]> git.openstreetmap.org Git - rails.git/blob - vendor/assets/iD/iD.js
Merge remote-tracking branch 'upstream/pull/2354'
[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) {
49          return (val !== _undefined) && (val !== null);
50         };
51
52         var validValue = function (value) {
53                 if (!isValue(value)) throw new TypeError("Cannot use null or undefined");
54                 return value;
55         };
56
57         var clear = function () {
58                 validValue(this).length = 0;
59                 return this;
60         };
61
62         var isImplemented$1 = function () {
63                 var numberIsNaN = Number.isNaN;
64                 if (typeof numberIsNaN !== "function") return false;
65                 return !numberIsNaN({}) && numberIsNaN(NaN) && !numberIsNaN(34);
66         };
67
68         var shim = function (value) {
69                 // eslint-disable-next-line no-self-compare
70                 return value !== value;
71         };
72
73         var isNan = isImplemented$1()
74                 ? Number.isNaN
75                 : shim;
76
77         var isImplemented$2 = function () {
78                 var sign = Math.sign;
79                 if (typeof sign !== "function") return false;
80                 return (sign(10) === 1) && (sign(-20) === -1);
81         };
82
83         var shim$1 = function (value) {
84                 value = Number(value);
85                 if (isNaN(value) || (value === 0)) return value;
86                 return value > 0 ? 1 : -1;
87         };
88
89         var sign = isImplemented$2()
90                 ? Math.sign
91                 : shim$1;
92
93         var abs = Math.abs, floor = Math.floor;
94
95         var toInteger = function (value) {
96                 if (isNaN(value)) return 0;
97                 value = Number(value);
98                 if ((value === 0) || !isFinite(value)) return value;
99                 return sign(value) * floor(abs(value));
100         };
101
102         var max = Math.max;
103
104         var toPosInteger = function (value) {
105          return max(0, toInteger(value));
106         };
107
108         var indexOf           = Array.prototype.indexOf
109           , objHasOwnProperty = Object.prototype.hasOwnProperty
110           , abs$1               = Math.abs
111           , floor$1             = Math.floor;
112
113         var eIndexOf = function (searchElement /*, fromIndex*/) {
114                 var i, length, fromIndex, val;
115                 if (!isNan(searchElement)) return indexOf.apply(this, arguments);
116
117                 length = toPosInteger(validValue(this).length);
118                 fromIndex = arguments[1];
119                 if (isNaN(fromIndex)) fromIndex = 0;
120                 else if (fromIndex >= 0) fromIndex = floor$1(fromIndex);
121                 else fromIndex = toPosInteger(this.length) - floor$1(abs$1(fromIndex));
122
123                 for (i = fromIndex; i < length; ++i) {
124                         if (objHasOwnProperty.call(this, i)) {
125                                 val = this[i];
126                                 if (isNan(val)) return i; // Jslint: ignore
127                         }
128                 }
129                 return -1;
130         };
131
132         var create = Object.create, getPrototypeOf = Object.getPrototypeOf, plainObject = {};
133
134         var isImplemented$3 = function (/* CustomCreate*/) {
135                 var setPrototypeOf = Object.setPrototypeOf, customCreate = arguments[0] || create;
136                 if (typeof setPrototypeOf !== "function") return false;
137                 return getPrototypeOf(setPrototypeOf(customCreate(null), plainObject)) === plainObject;
138         };
139
140         var map = { function: true, object: true };
141
142         var isObject = function (value) {
143                 return (isValue(value) && map[typeof value]) || false;
144         };
145
146         var create$1 = Object.create, shim$2;
147
148         if (!isImplemented$3()) {
149                 shim$2 = shim$3;
150         }
151
152         var create_1 = (function () {
153                 var nullObject, polyProps, desc;
154                 if (!shim$2) return create$1;
155                 if (shim$2.level !== 1) return create$1;
156
157                 nullObject = {};
158                 polyProps = {};
159                 desc = {
160                         configurable: false,
161                         enumerable: false,
162                         writable: true,
163                         value: undefined
164                 };
165                 Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
166                         if (name === "__proto__") {
167                                 polyProps[name] = {
168                                         configurable: true,
169                                         enumerable: false,
170                                         writable: true,
171                                         value: undefined
172                                 };
173                                 return;
174                         }
175                         polyProps[name] = desc;
176                 });
177                 Object.defineProperties(nullObject, polyProps);
178
179                 Object.defineProperty(shim$2, "nullPolyfill", {
180                         configurable: false,
181                         enumerable: false,
182                         writable: false,
183                         value: nullObject
184                 });
185
186                 return function (prototype, props) {
187                         return create$1(prototype === null ? nullObject : prototype, props);
188                 };
189         }());
190
191         var objIsPrototypeOf = Object.prototype.isPrototypeOf
192           , defineProperty  = Object.defineProperty
193           , nullDesc        = {
194                 configurable: true,
195                 enumerable: false,
196                 writable: true,
197                 value: undefined
198         }
199           , validate;
200
201         validate = function (obj, prototype) {
202                 validValue(obj);
203                 if (prototype === null || isObject(prototype)) return obj;
204                 throw new TypeError("Prototype must be null or an object");
205         };
206
207         var shim$3 = (function (status) {
208                 var fn, set;
209                 if (!status) return null;
210                 if (status.level === 2) {
211                         if (status.set) {
212                                 set = status.set;
213                                 fn = function (obj, prototype) {
214                                         set.call(validate(obj, prototype), prototype);
215                                         return obj;
216                                 };
217                         } else {
218                                 fn = function (obj, prototype) {
219                                         validate(obj, prototype).__proto__ = prototype;
220                                         return obj;
221                                 };
222                         }
223                 } else {
224                         fn = function self(obj, prototype) {
225                                 var isNullBase;
226                                 validate(obj, prototype);
227                                 isNullBase = objIsPrototypeOf.call(self.nullPolyfill, obj);
228                                 if (isNullBase) delete self.nullPolyfill.__proto__;
229                                 if (prototype === null) prototype = self.nullPolyfill;
230                                 obj.__proto__ = prototype;
231                                 if (isNullBase) defineProperty(self.nullPolyfill, "__proto__", nullDesc);
232                                 return obj;
233                         };
234                 }
235                 return Object.defineProperty(fn, "level", {
236                         configurable: false,
237                         enumerable: false,
238                         writable: false,
239                         value: status.level
240                 });
241         }(
242                 (function () {
243                         var tmpObj1 = Object.create(null)
244                           , tmpObj2 = {}
245                           , set
246                           , desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
247
248                         if (desc) {
249                                 try {
250                                         set = desc.set; // Opera crashes at this point
251                                         set.call(tmpObj1, tmpObj2);
252                                 } catch (ignore) {}
253                                 if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { set: set, level: 2 };
254                         }
255
256                         tmpObj1.__proto__ = tmpObj2;
257                         if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 2 };
258
259                         tmpObj1 = {};
260                         tmpObj1.__proto__ = tmpObj2;
261                         if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 1 };
262
263                         return false;
264                 })()
265         ));
266
267         var setPrototypeOf = isImplemented$3()
268                 ? Object.setPrototypeOf
269                 : shim$3;
270
271         var validCallable = function (fn) {
272                 if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
273                 return fn;
274         };
275
276         var isImplemented$4 = function () {
277                 var assign = Object.assign, obj;
278                 if (typeof assign !== "function") return false;
279                 obj = { foo: "raz" };
280                 assign(obj, { bar: "dwa" }, { trzy: "trzy" });
281                 return (obj.foo + obj.bar + obj.trzy) === "razdwatrzy";
282         };
283
284         var isImplemented$5 = function () {
285                 try {
286                         Object.keys("primitive");
287                         return true;
288                 } catch (e) {
289                         return false;
290                 }
291         };
292
293         var keys = Object.keys;
294
295         var shim$4 = function (object) { return keys(isValue(object) ? Object(object) : object); };
296
297         var keys$1 = isImplemented$5() ? Object.keys : shim$4;
298
299         var max$1   = Math.max;
300
301         var shim$5 = function (dest, src /*, …srcn*/) {
302                 var error, i, length = max$1(arguments.length, 2), assign;
303                 dest = Object(validValue(dest));
304                 assign = function (key) {
305                         try {
306                                 dest[key] = src[key];
307                         } catch (e) {
308                                 if (!error) error = e;
309                         }
310                 };
311                 for (i = 1; i < length; ++i) {
312                         src = arguments[i];
313                         keys$1(src).forEach(assign);
314                 }
315                 if (error !== undefined) throw error;
316                 return dest;
317         };
318
319         var assign = isImplemented$4()
320                 ? Object.assign
321                 : shim$5;
322
323         var forEach = Array.prototype.forEach, create$2 = Object.create;
324
325         var process$1 = function (src, obj) {
326                 var key;
327                 for (key in src) obj[key] = src[key];
328         };
329
330         // eslint-disable-next-line no-unused-vars
331         var normalizeOptions = function (opts1 /*, …options*/) {
332                 var result = create$2(null);
333                 forEach.call(arguments, function (options) {
334                         if (!isValue(options)) return;
335                         process$1(Object(options), result);
336                 });
337                 return result;
338         };
339
340         // Deprecated
341
342         var isCallable = function (obj) {
343          return typeof obj === "function";
344         };
345
346         var str = "razdwatrzy";
347
348         var isImplemented$6 = function () {
349                 if (typeof str.contains !== "function") return false;
350                 return (str.contains("dwa") === true) && (str.contains("foo") === false);
351         };
352
353         var indexOf$1 = String.prototype.indexOf;
354
355         var shim$6 = function (searchString/*, position*/) {
356                 return indexOf$1.call(this, searchString, arguments[1]) > -1;
357         };
358
359         var contains = isImplemented$6()
360                 ? String.prototype.contains
361                 : shim$6;
362
363         var d_1 = createCommonjsModule(function (module) {
364
365         var d;
366
367         d = module.exports = function (dscr, value/*, options*/) {
368                 var c, e, w, options, desc;
369                 if ((arguments.length < 2) || (typeof dscr !== 'string')) {
370                         options = value;
371                         value = dscr;
372                         dscr = null;
373                 } else {
374                         options = arguments[2];
375                 }
376                 if (dscr == null) {
377                         c = w = true;
378                         e = false;
379                 } else {
380                         c = contains.call(dscr, 'c');
381                         e = contains.call(dscr, 'e');
382                         w = contains.call(dscr, 'w');
383                 }
384
385                 desc = { value: value, configurable: c, enumerable: e, writable: w };
386                 return !options ? desc : assign(normalizeOptions(options), desc);
387         };
388
389         d.gs = function (dscr, get, set/*, options*/) {
390                 var c, e, options, desc;
391                 if (typeof dscr !== 'string') {
392                         options = set;
393                         set = get;
394                         get = dscr;
395                         dscr = null;
396                 } else {
397                         options = arguments[3];
398                 }
399                 if (get == null) {
400                         get = undefined;
401                 } else if (!isCallable(get)) {
402                         options = get;
403                         get = set = undefined;
404                 } else if (set == null) {
405                         set = undefined;
406                 } else if (!isCallable(set)) {
407                         options = set;
408                         set = undefined;
409                 }
410                 if (dscr == null) {
411                         c = true;
412                         e = false;
413                 } else {
414                         c = contains.call(dscr, 'c');
415                         e = contains.call(dscr, 'e');
416                 }
417
418                 desc = { get: get, set: set, configurable: c, enumerable: e };
419                 return !options ? desc : assign(normalizeOptions(options), desc);
420         };
421         });
422
423         var eventEmitter = createCommonjsModule(function (module, exports) {
424
425         var apply = Function.prototype.apply, call = Function.prototype.call
426           , create = Object.create, defineProperty = Object.defineProperty
427           , defineProperties = Object.defineProperties
428           , hasOwnProperty = Object.prototype.hasOwnProperty
429           , descriptor = { configurable: true, enumerable: false, writable: true }
430
431           , on, once, off, emit, methods, descriptors, base;
432
433         on = function (type, listener) {
434                 var data;
435
436                 validCallable(listener);
437
438                 if (!hasOwnProperty.call(this, '__ee__')) {
439                         data = descriptor.value = create(null);
440                         defineProperty(this, '__ee__', descriptor);
441                         descriptor.value = null;
442                 } else {
443                         data = this.__ee__;
444                 }
445                 if (!data[type]) data[type] = listener;
446                 else if (typeof data[type] === 'object') data[type].push(listener);
447                 else data[type] = [data[type], listener];
448
449                 return this;
450         };
451
452         once = function (type, listener) {
453                 var once, self;
454
455                 validCallable(listener);
456                 self = this;
457                 on.call(this, type, once = function () {
458                         off.call(self, type, once);
459                         apply.call(listener, this, arguments);
460                 });
461
462                 once.__eeOnceListener__ = listener;
463                 return this;
464         };
465
466         off = function (type, listener) {
467                 var data, listeners, candidate, i;
468
469                 validCallable(listener);
470
471                 if (!hasOwnProperty.call(this, '__ee__')) return this;
472                 data = this.__ee__;
473                 if (!data[type]) return this;
474                 listeners = data[type];
475
476                 if (typeof listeners === 'object') {
477                         for (i = 0; (candidate = listeners[i]); ++i) {
478                                 if ((candidate === listener) ||
479                                                 (candidate.__eeOnceListener__ === listener)) {
480                                         if (listeners.length === 2) data[type] = listeners[i ? 0 : 1];
481                                         else listeners.splice(i, 1);
482                                 }
483                         }
484                 } else {
485                         if ((listeners === listener) ||
486                                         (listeners.__eeOnceListener__ === listener)) {
487                                 delete data[type];
488                         }
489                 }
490
491                 return this;
492         };
493
494         emit = function (type) {
495                 var i, l, listener, listeners, args;
496
497                 if (!hasOwnProperty.call(this, '__ee__')) return;
498                 listeners = this.__ee__[type];
499                 if (!listeners) return;
500
501                 if (typeof listeners === 'object') {
502                         l = arguments.length;
503                         args = new Array(l - 1);
504                         for (i = 1; i < l; ++i) args[i - 1] = arguments[i];
505
506                         listeners = listeners.slice();
507                         for (i = 0; (listener = listeners[i]); ++i) {
508                                 apply.call(listener, this, args);
509                         }
510                 } else {
511                         switch (arguments.length) {
512                         case 1:
513                                 call.call(listeners, this);
514                                 break;
515                         case 2:
516                                 call.call(listeners, this, arguments[1]);
517                                 break;
518                         case 3:
519                                 call.call(listeners, this, arguments[1], arguments[2]);
520                                 break;
521                         default:
522                                 l = arguments.length;
523                                 args = new Array(l - 1);
524                                 for (i = 1; i < l; ++i) {
525                                         args[i - 1] = arguments[i];
526                                 }
527                                 apply.call(listeners, this, args);
528                         }
529                 }
530         };
531
532         methods = {
533                 on: on,
534                 once: once,
535                 off: off,
536                 emit: emit
537         };
538
539         descriptors = {
540                 on: d_1(on),
541                 once: d_1(once),
542                 off: d_1(off),
543                 emit: d_1(emit)
544         };
545
546         base = defineProperties({}, descriptors);
547
548         module.exports = exports = function (o) {
549                 return (o == null) ? create(base) : defineProperties(Object(o), descriptors);
550         };
551         exports.methods = methods;
552         });
553         var eventEmitter_1 = eventEmitter.methods;
554
555         var validTypes = { object: true, symbol: true };
556
557         var isImplemented$7 = function () {
558                 var symbol;
559                 if (typeof Symbol !== 'function') return false;
560                 symbol = Symbol('test symbol');
561                 try { String(symbol); } catch (e) { return false; }
562
563                 // Return 'true' also for polyfills
564                 if (!validTypes[typeof Symbol.iterator]) return false;
565                 if (!validTypes[typeof Symbol.toPrimitive]) return false;
566                 if (!validTypes[typeof Symbol.toStringTag]) return false;
567
568                 return true;
569         };
570
571         var isSymbol = function (x) {
572                 if (!x) return false;
573                 if (typeof x === 'symbol') return true;
574                 if (!x.constructor) return false;
575                 if (x.constructor.name !== 'Symbol') return false;
576                 return (x[x.constructor.toStringTag] === 'Symbol');
577         };
578
579         var validateSymbol = function (value) {
580                 if (!isSymbol(value)) throw new TypeError(value + " is not a symbol");
581                 return value;
582         };
583
584         var create$3 = Object.create, defineProperties = Object.defineProperties
585           , defineProperty$1 = Object.defineProperty, objPrototype = Object.prototype
586           , NativeSymbol, SymbolPolyfill, HiddenSymbol, globalSymbols = create$3(null)
587           , isNativeSafe;
588
589         if (typeof Symbol === 'function') {
590                 NativeSymbol = Symbol;
591                 try {
592                         String(NativeSymbol());
593                         isNativeSafe = true;
594                 } catch (ignore) {}
595         }
596
597         var generateName = (function () {
598                 var created = create$3(null);
599                 return function (desc) {
600                         var postfix = 0, name, ie11BugWorkaround;
601                         while (created[desc + (postfix || '')]) ++postfix;
602                         desc += (postfix || '');
603                         created[desc] = true;
604                         name = '@@' + desc;
605                         defineProperty$1(objPrototype, name, d_1.gs(null, function (value) {
606                                 // For IE11 issue see:
607                                 // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
608                                 //    ie11-broken-getters-on-dom-objects
609                                 // https://github.com/medikoo/es6-symbol/issues/12
610                                 if (ie11BugWorkaround) return;
611                                 ie11BugWorkaround = true;
612                                 defineProperty$1(this, name, d_1(value));
613                                 ie11BugWorkaround = false;
614                         }));
615                         return name;
616                 };
617         }());
618
619         // Internal constructor (not one exposed) for creating Symbol instances.
620         // This one is used to ensure that `someSymbol instanceof Symbol` always return false
621         HiddenSymbol = function Symbol(description) {
622                 if (this instanceof HiddenSymbol) throw new TypeError('Symbol is not a constructor');
623                 return SymbolPolyfill(description);
624         };
625
626         // Exposed `Symbol` constructor
627         // (returns instances of HiddenSymbol)
628         var polyfill = SymbolPolyfill = function Symbol(description) {
629                 var symbol;
630                 if (this instanceof Symbol) throw new TypeError('Symbol is not a constructor');
631                 if (isNativeSafe) return NativeSymbol(description);
632                 symbol = create$3(HiddenSymbol.prototype);
633                 description = (description === undefined ? '' : String(description));
634                 return defineProperties(symbol, {
635                         __description__: d_1('', description),
636                         __name__: d_1('', generateName(description))
637                 });
638         };
639         defineProperties(SymbolPolyfill, {
640                 for: d_1(function (key) {
641                         if (globalSymbols[key]) return globalSymbols[key];
642                         return (globalSymbols[key] = SymbolPolyfill(String(key)));
643                 }),
644                 keyFor: d_1(function (s) {
645                         var key;
646                         validateSymbol(s);
647                         for (key in globalSymbols) if (globalSymbols[key] === s) return key;
648                 }),
649
650                 // To ensure proper interoperability with other native functions (e.g. Array.from)
651                 // fallback to eventual native implementation of given symbol
652                 hasInstance: d_1('', (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill('hasInstance')),
653                 isConcatSpreadable: d_1('', (NativeSymbol && NativeSymbol.isConcatSpreadable) ||
654                         SymbolPolyfill('isConcatSpreadable')),
655                 iterator: d_1('', (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill('iterator')),
656                 match: d_1('', (NativeSymbol && NativeSymbol.match) || SymbolPolyfill('match')),
657                 replace: d_1('', (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill('replace')),
658                 search: d_1('', (NativeSymbol && NativeSymbol.search) || SymbolPolyfill('search')),
659                 species: d_1('', (NativeSymbol && NativeSymbol.species) || SymbolPolyfill('species')),
660                 split: d_1('', (NativeSymbol && NativeSymbol.split) || SymbolPolyfill('split')),
661                 toPrimitive: d_1('', (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill('toPrimitive')),
662                 toStringTag: d_1('', (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill('toStringTag')),
663                 unscopables: d_1('', (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill('unscopables'))
664         });
665
666         // Internal tweaks for real symbol producer
667         defineProperties(HiddenSymbol.prototype, {
668                 constructor: d_1(SymbolPolyfill),
669                 toString: d_1('', function () { return this.__name__; })
670         });
671
672         // Proper implementation of methods exposed on Symbol.prototype
673         // They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype
674         defineProperties(SymbolPolyfill.prototype, {
675                 toString: d_1(function () { return 'Symbol (' + validateSymbol(this).__description__ + ')'; }),
676                 valueOf: d_1(function () { return validateSymbol(this); })
677         });
678         defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d_1('', function () {
679                 var symbol = validateSymbol(this);
680                 if (typeof symbol === 'symbol') return symbol;
681                 return symbol.toString();
682         }));
683         defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d_1('c', 'Symbol'));
684
685         // Proper implementaton of toPrimitive and toStringTag for returned symbol instances
686         defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toStringTag,
687                 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));
688
689         // Note: It's important to define `toPrimitive` as last one, as some implementations
690         // implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)
691         // And that may invoke error in definition flow:
692         // See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149
693         defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive,
694                 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));
695
696         var es6Symbol = isImplemented$7() ? Symbol : polyfill;
697
698         var objToString = Object.prototype.toString
699           , id = objToString.call(
700                 (function () {
701                         return arguments;
702                 })()
703         );
704
705         var isArguments = function (value) {
706                 return objToString.call(value) === id;
707         };
708
709         var objToString$1 = Object.prototype.toString, id$1 = objToString$1.call("");
710
711         var isString = function (value) {
712                 return (
713                         typeof value === "string" ||
714                         (value &&
715                                 typeof value === "object" &&
716                                 (value instanceof String || objToString$1.call(value) === id$1)) ||
717                         false
718                 );
719         };
720
721         var iteratorSymbol = es6Symbol.iterator
722           , isArray        = Array.isArray;
723
724         var isIterable = function (value) {
725                 if (!isValue(value)) return false;
726                 if (isArray(value)) return true;
727                 if (isString(value)) return true;
728                 if (isArguments(value)) return true;
729                 return typeof value[iteratorSymbol] === "function";
730         };
731
732         var validIterable = function (value) {
733                 if (!isIterable(value)) throw new TypeError(value + " is not iterable");
734                 return value;
735         };
736
737         var isImplemented$8 = function () {
738                 var from = Array.from, arr, result;
739                 if (typeof from !== "function") return false;
740                 arr = ["raz", "dwa"];
741                 result = from(arr);
742                 return Boolean(result && (result !== arr) && (result[1] === "dwa"));
743         };
744
745         var objToString$2 = Object.prototype.toString, id$2 = objToString$2.call(noop);
746
747         var isFunction = function (value) {
748                 return typeof value === "function" && objToString$2.call(value) === id$2;
749         };
750
751         var iteratorSymbol$1 = es6Symbol.iterator
752           , isArray$1        = Array.isArray
753           , call           = Function.prototype.call
754           , desc           = { configurable: true, enumerable: true, writable: true, value: null }
755           , defineProperty$2 = Object.defineProperty;
756
757         // eslint-disable-next-line complexity, max-lines-per-function
758         var shim$7 = function (arrayLike /*, mapFn, thisArg*/) {
759                 var mapFn = arguments[1]
760                   , thisArg = arguments[2]
761                   , Context
762                   , i
763                   , j
764                   , arr
765                   , length
766                   , code
767                   , iterator
768                   , result
769                   , getIterator
770                   , value;
771
772                 arrayLike = Object(validValue(arrayLike));
773
774                 if (isValue(mapFn)) validCallable(mapFn);
775                 if (!this || this === Array || !isFunction(this)) {
776                         // Result: Plain array
777                         if (!mapFn) {
778                                 if (isArguments(arrayLike)) {
779                                         // Source: Arguments
780                                         length = arrayLike.length;
781                                         if (length !== 1) return Array.apply(null, arrayLike);
782                                         arr = new Array(1);
783                                         arr[0] = arrayLike[0];
784                                         return arr;
785                                 }
786                                 if (isArray$1(arrayLike)) {
787                                         // Source: Array
788                                         arr = new Array(length = arrayLike.length);
789                                         for (i = 0; i < length; ++i) arr[i] = arrayLike[i];
790                                         return arr;
791                                 }
792                         }
793                         arr = [];
794                 } else {
795                         // Result: Non plain array
796                         Context = this;
797                 }
798
799                 if (!isArray$1(arrayLike)) {
800                         if ((getIterator = arrayLike[iteratorSymbol$1]) !== undefined) {
801                                 // Source: Iterator
802                                 iterator = validCallable(getIterator).call(arrayLike);
803                                 if (Context) arr = new Context();
804                                 result = iterator.next();
805                                 i = 0;
806                                 while (!result.done) {
807                                         value = mapFn ? call.call(mapFn, thisArg, result.value, i) : result.value;
808                                         if (Context) {
809                                                 desc.value = value;
810                                                 defineProperty$2(arr, i, desc);
811                                         } else {
812                                                 arr[i] = value;
813                                         }
814                                         result = iterator.next();
815                                         ++i;
816                                 }
817                                 length = i;
818                         } else if (isString(arrayLike)) {
819                                 // Source: String
820                                 length = arrayLike.length;
821                                 if (Context) arr = new Context();
822                                 for (i = 0, j = 0; i < length; ++i) {
823                                         value = arrayLike[i];
824                                         if (i + 1 < length) {
825                                                 code = value.charCodeAt(0);
826                                                 // eslint-disable-next-line max-depth
827                                                 if (code >= 0xd800 && code <= 0xdbff) value += arrayLike[++i];
828                                         }
829                                         value = mapFn ? call.call(mapFn, thisArg, value, j) : value;
830                                         if (Context) {
831                                                 desc.value = value;
832                                                 defineProperty$2(arr, j, desc);
833                                         } else {
834                                                 arr[j] = value;
835                                         }
836                                         ++j;
837                                 }
838                                 length = j;
839                         }
840                 }
841                 if (length === undefined) {
842                         // Source: array or array-like
843                         length = toPosInteger(arrayLike.length);
844                         if (Context) arr = new Context(length);
845                         for (i = 0; i < length; ++i) {
846                                 value = mapFn ? call.call(mapFn, thisArg, arrayLike[i], i) : arrayLike[i];
847                                 if (Context) {
848                                         desc.value = value;
849                                         defineProperty$2(arr, i, desc);
850                                 } else {
851                                         arr[i] = value;
852                                 }
853                         }
854                 }
855                 if (Context) {
856                         desc.value = null;
857                         arr.length = length;
858                 }
859                 return arr;
860         };
861
862         var from_1 = isImplemented$8()
863                 ? Array.from
864                 : shim$7;
865
866         var copy = function (obj/*, propertyNames, options*/) {
867                 var copy = Object(validValue(obj)), propertyNames = arguments[1], options = Object(arguments[2]);
868                 if (copy !== obj && !propertyNames) return copy;
869                 var result = {};
870                 if (propertyNames) {
871                         from_1(propertyNames, function (propertyName) {
872                                 if (options.ensure || propertyName in obj) result[propertyName] = obj[propertyName];
873                         });
874                 } else {
875                         assign(result, obj);
876                 }
877                 return result;
878         };
879
880         var bind                    = Function.prototype.bind
881           , call$1                    = Function.prototype.call
882           , keys$2                    = Object.keys
883           , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
884
885         var _iterate = function (method, defVal) {
886                 return function (obj, cb /*, thisArg, compareFn*/) {
887                         var list, thisArg = arguments[2], compareFn = arguments[3];
888                         obj = Object(validValue(obj));
889                         validCallable(cb);
890
891                         list = keys$2(obj);
892                         if (compareFn) {
893                                 list.sort(typeof compareFn === "function" ? bind.call(compareFn, obj) : undefined);
894                         }
895                         if (typeof method !== "function") method = list[method];
896                         return call$1.call(method, list, function (key, index) {
897                                 if (!objPropertyIsEnumerable.call(obj, key)) return defVal;
898                                 return call$1.call(cb, thisArg, obj[key], key, obj, index);
899                         });
900                 };
901         };
902
903         var forEach$1 = _iterate("forEach");
904
905         var call$2     = Function.prototype.call;
906
907         var map$1 = function (obj, cb /*, thisArg*/) {
908                 var result = {}, thisArg = arguments[2];
909                 validCallable(cb);
910                 forEach$1(obj, function (value, key, targetObj, index) {
911                         result[key] = call$2.call(cb, thisArg, value, key, targetObj, index);
912                 });
913                 return result;
914         };
915
916         var callable         = validCallable
917
918           , bind$1 = Function.prototype.bind, defineProperty$3 = Object.defineProperty
919           , hasOwnProperty = Object.prototype.hasOwnProperty
920           , define;
921
922         define = function (name, desc, options) {
923                 var value = validValue(desc) && callable(desc.value), dgs;
924                 dgs = copy(desc);
925                 delete dgs.writable;
926                 delete dgs.value;
927                 dgs.get = function () {
928                         if (!options.overwriteDefinition && hasOwnProperty.call(this, name)) return value;
929                         desc.value = bind$1.call(value, options.resolveContext ? options.resolveContext(this) : this);
930                         defineProperty$3(this, name, desc);
931                         return this[name];
932                 };
933                 return dgs;
934         };
935
936         var autoBind = function (props/*, options*/) {
937                 var options = normalizeOptions(arguments[1]);
938                 if (options.resolveContext != null) validCallable(options.resolveContext);
939                 return map$1(props, function (desc, name) { return define(name, desc, options); });
940         };
941
942         var defineProperty$4 = Object.defineProperty, defineProperties$1 = Object.defineProperties, Iterator;
943
944         var es6Iterator = Iterator = function (list, context) {
945                 if (!(this instanceof Iterator)) throw new TypeError("Constructor requires 'new'");
946                 defineProperties$1(this, {
947                         __list__: d_1("w", validValue(list)),
948                         __context__: d_1("w", context),
949                         __nextIndex__: d_1("w", 0)
950                 });
951                 if (!context) return;
952                 validCallable(context.on);
953                 context.on("_add", this._onAdd);
954                 context.on("_delete", this._onDelete);
955                 context.on("_clear", this._onClear);
956         };
957
958         // Internal %IteratorPrototype% doesn't expose its constructor
959         delete Iterator.prototype.constructor;
960
961         defineProperties$1(
962                 Iterator.prototype,
963                 assign(
964                         {
965                                 _next: d_1(function () {
966                                         var i;
967                                         if (!this.__list__) return undefined;
968                                         if (this.__redo__) {
969                                                 i = this.__redo__.shift();
970                                                 if (i !== undefined) return i;
971                                         }
972                                         if (this.__nextIndex__ < this.__list__.length) return this.__nextIndex__++;
973                                         this._unBind();
974                                         return undefined;
975                                 }),
976                                 next: d_1(function () {
977                                         return this._createResult(this._next());
978                                 }),
979                                 _createResult: d_1(function (i) {
980                                         if (i === undefined) return { done: true, value: undefined };
981                                         return { done: false, value: this._resolve(i) };
982                                 }),
983                                 _resolve: d_1(function (i) {
984                                         return this.__list__[i];
985                                 }),
986                                 _unBind: d_1(function () {
987                                         this.__list__ = null;
988                                         delete this.__redo__;
989                                         if (!this.__context__) return;
990                                         this.__context__.off("_add", this._onAdd);
991                                         this.__context__.off("_delete", this._onDelete);
992                                         this.__context__.off("_clear", this._onClear);
993                                         this.__context__ = null;
994                                 }),
995                                 toString: d_1(function () {
996                                         return "[object " + (this[es6Symbol.toStringTag] || "Object") + "]";
997                                 })
998                         },
999                         autoBind({
1000                                 _onAdd: d_1(function (index) {
1001                                         if (index >= this.__nextIndex__) return;
1002                                         ++this.__nextIndex__;
1003                                         if (!this.__redo__) {
1004                                                 defineProperty$4(this, "__redo__", d_1("c", [index]));
1005                                                 return;
1006                                         }
1007                                         this.__redo__.forEach(function (redo, i) {
1008                                                 if (redo >= index) this.__redo__[i] = ++redo;
1009                                         }, this);
1010                                         this.__redo__.push(index);
1011                                 }),
1012                                 _onDelete: d_1(function (index) {
1013                                         var i;
1014                                         if (index >= this.__nextIndex__) return;
1015                                         --this.__nextIndex__;
1016                                         if (!this.__redo__) return;
1017                                         i = this.__redo__.indexOf(index);
1018                                         if (i !== -1) this.__redo__.splice(i, 1);
1019                                         this.__redo__.forEach(function (redo, j) {
1020                                                 if (redo > index) this.__redo__[j] = --redo;
1021                                         }, this);
1022                                 }),
1023                                 _onClear: d_1(function () {
1024                                         if (this.__redo__) clear.call(this.__redo__);
1025                                         this.__nextIndex__ = 0;
1026                                 })
1027                         })
1028                 )
1029         );
1030
1031         defineProperty$4(
1032                 Iterator.prototype,
1033                 es6Symbol.iterator,
1034                 d_1(function () {
1035                         return this;
1036                 })
1037         );
1038
1039         var array = createCommonjsModule(function (module) {
1040
1041
1042
1043         var defineProperty = Object.defineProperty, ArrayIterator;
1044
1045         ArrayIterator = module.exports = function (arr, kind) {
1046                 if (!(this instanceof ArrayIterator)) throw new TypeError("Constructor requires 'new'");
1047                 es6Iterator.call(this, arr);
1048                 if (!kind) kind = "value";
1049                 else if (contains.call(kind, "key+value")) kind = "key+value";
1050                 else if (contains.call(kind, "key")) kind = "key";
1051                 else kind = "value";
1052                 defineProperty(this, "__kind__", d_1("", kind));
1053         };
1054         if (setPrototypeOf) setPrototypeOf(ArrayIterator, es6Iterator);
1055
1056         // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1057         delete ArrayIterator.prototype.constructor;
1058
1059         ArrayIterator.prototype = Object.create(es6Iterator.prototype, {
1060                 _resolve: d_1(function (i) {
1061                         if (this.__kind__ === "value") return this.__list__[i];
1062                         if (this.__kind__ === "key+value") return [i, this.__list__[i]];
1063                         return i;
1064                 })
1065         });
1066         defineProperty(ArrayIterator.prototype, es6Symbol.toStringTag, d_1("c", "Array Iterator"));
1067         });
1068
1069         var string = createCommonjsModule(function (module) {
1070
1071
1072
1073         var defineProperty = Object.defineProperty, StringIterator;
1074
1075         StringIterator = module.exports = function (str) {
1076                 if (!(this instanceof StringIterator)) throw new TypeError("Constructor requires 'new'");
1077                 str = String(str);
1078                 es6Iterator.call(this, str);
1079                 defineProperty(this, "__length__", d_1("", str.length));
1080         };
1081         if (setPrototypeOf) setPrototypeOf(StringIterator, es6Iterator);
1082
1083         // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1084         delete StringIterator.prototype.constructor;
1085
1086         StringIterator.prototype = Object.create(es6Iterator.prototype, {
1087                 _next: d_1(function () {
1088                         if (!this.__list__) return undefined;
1089                         if (this.__nextIndex__ < this.__length__) return this.__nextIndex__++;
1090                         this._unBind();
1091                         return undefined;
1092                 }),
1093                 _resolve: d_1(function (i) {
1094                         var char = this.__list__[i], code;
1095                         if (this.__nextIndex__ === this.__length__) return char;
1096                         code = char.charCodeAt(0);
1097                         if (code >= 0xd800 && code <= 0xdbff) return char + this.__list__[this.__nextIndex__++];
1098                         return char;
1099                 })
1100         });
1101         defineProperty(StringIterator.prototype, es6Symbol.toStringTag, d_1("c", "String Iterator"));
1102         });
1103
1104         var iteratorSymbol$2 = es6Symbol.iterator;
1105
1106         var get = function (obj) {
1107                 if (typeof validIterable(obj)[iteratorSymbol$2] === "function") return obj[iteratorSymbol$2]();
1108                 if (isArguments(obj)) return new array(obj);
1109                 if (isString(obj)) return new string(obj);
1110                 return new array(obj);
1111         };
1112
1113         var isArray$2 = Array.isArray, call$3 = Function.prototype.call, some = Array.prototype.some;
1114
1115         var forOf = function (iterable, cb /*, thisArg*/) {
1116                 var mode, thisArg = arguments[2], result, doBreak, broken, i, length, char, code;
1117                 if (isArray$2(iterable) || isArguments(iterable)) mode = "array";
1118                 else if (isString(iterable)) mode = "string";
1119                 else iterable = get(iterable);
1120
1121                 validCallable(cb);
1122                 doBreak = function () {
1123                         broken = true;
1124                 };
1125                 if (mode === "array") {
1126                         some.call(iterable, function (value) {
1127                                 call$3.call(cb, thisArg, value, doBreak);
1128                                 return broken;
1129                         });
1130                         return;
1131                 }
1132                 if (mode === "string") {
1133                         length = iterable.length;
1134                         for (i = 0; i < length; ++i) {
1135                                 char = iterable[i];
1136                                 if (i + 1 < length) {
1137                                         code = char.charCodeAt(0);
1138                                         if (code >= 0xd800 && code <= 0xdbff) char += iterable[++i];
1139                                 }
1140                                 call$3.call(cb, thisArg, char, doBreak);
1141                                 if (broken) break;
1142                         }
1143                         return;
1144                 }
1145                 result = iterable.next();
1146
1147                 while (!result.done) {
1148                         call$3.call(cb, thisArg, result.value, doBreak);
1149                         if (broken) return;
1150                         result = iterable.next();
1151                 }
1152         };
1153
1154         var iterator = createCommonjsModule(function (module) {
1155
1156         var toStringTagSymbol = es6Symbol.toStringTag
1157
1158           , defineProperty = Object.defineProperty
1159           , SetIterator;
1160
1161         SetIterator = module.exports = function (set, kind) {
1162                 if (!(this instanceof SetIterator)) return new SetIterator(set, kind);
1163                 es6Iterator.call(this, set.__setData__, set);
1164                 if (!kind) kind = 'value';
1165                 else if (contains.call(kind, 'key+value')) kind = 'key+value';
1166                 else kind = 'value';
1167                 defineProperty(this, '__kind__', d_1('', kind));
1168         };
1169         if (setPrototypeOf) setPrototypeOf(SetIterator, es6Iterator);
1170
1171         SetIterator.prototype = Object.create(es6Iterator.prototype, {
1172                 constructor: d_1(SetIterator),
1173                 _resolve: d_1(function (i) {
1174                         if (this.__kind__ === 'value') return this.__list__[i];
1175                         return [this.__list__[i], this.__list__[i]];
1176                 }),
1177                 toString: d_1(function () { return '[object Set Iterator]'; })
1178         });
1179         defineProperty(SetIterator.prototype, toStringTagSymbol, d_1('c', 'Set Iterator'));
1180         });
1181
1182         // Exports true if environment provides native `Set` implementation,
1183
1184         var isNativeImplemented = (function () {
1185                 if (typeof Set === 'undefined') return false;
1186                 return (Object.prototype.toString.call(Set.prototype) === '[object Set]');
1187         }());
1188
1189         var iterator$1       = validIterable
1190
1191           , call$4 = Function.prototype.call
1192           , defineProperty$5 = Object.defineProperty, getPrototypeOf$1 = Object.getPrototypeOf
1193           , SetPoly, getValues, NativeSet;
1194
1195         if (isNativeImplemented) NativeSet = Set;
1196
1197         var polyfill$1 = SetPoly = function Set(/*iterable*/) {
1198                 var iterable = arguments[0], self;
1199                 if (!(this instanceof SetPoly)) throw new TypeError('Constructor requires \'new\'');
1200                 if (isNativeImplemented && setPrototypeOf) self = setPrototypeOf(new NativeSet(), getPrototypeOf$1(this));
1201                 else self = this;
1202                 if (iterable != null) iterator$1(iterable);
1203                 defineProperty$5(self, '__setData__', d_1('c', []));
1204                 if (!iterable) return self;
1205                 forOf(iterable, function (value) {
1206                         if (eIndexOf.call(this, value) !== -1) return;
1207                         this.push(value);
1208                 }, self.__setData__);
1209                 return self;
1210         };
1211
1212         if (isNativeImplemented) {
1213                 if (setPrototypeOf) setPrototypeOf(SetPoly, NativeSet);
1214                 SetPoly.prototype = Object.create(NativeSet.prototype, { constructor: d_1(SetPoly) });
1215         }
1216
1217         eventEmitter(Object.defineProperties(SetPoly.prototype, {
1218                 add: d_1(function (value) {
1219                         if (this.has(value)) return this;
1220                         this.emit('_add', this.__setData__.push(value) - 1, value);
1221                         return this;
1222                 }),
1223                 clear: d_1(function () {
1224                         if (!this.__setData__.length) return;
1225                         clear.call(this.__setData__);
1226                         this.emit('_clear');
1227                 }),
1228                 delete: d_1(function (value) {
1229                         var index = eIndexOf.call(this.__setData__, value);
1230                         if (index === -1) return false;
1231                         this.__setData__.splice(index, 1);
1232                         this.emit('_delete', index, value);
1233                         return true;
1234                 }),
1235                 entries: d_1(function () { return new iterator(this, 'key+value'); }),
1236                 forEach: d_1(function (cb/*, thisArg*/) {
1237                         var thisArg = arguments[1], iterator, result, value;
1238                         validCallable(cb);
1239                         iterator = this.values();
1240                         result = iterator._next();
1241                         while (result !== undefined) {
1242                                 value = iterator._resolve(result);
1243                                 call$4.call(cb, thisArg, value, value, this);
1244                                 result = iterator._next();
1245                         }
1246                 }),
1247                 has: d_1(function (value) {
1248                         return (eIndexOf.call(this.__setData__, value) !== -1);
1249                 }),
1250                 keys: d_1(getValues = function () { return this.values(); }),
1251                 size: d_1.gs(function () { return this.__setData__.length; }),
1252                 values: d_1(function () { return new iterator(this); }),
1253                 toString: d_1(function () { return '[object Set]'; })
1254         }));
1255         defineProperty$5(SetPoly.prototype, es6Symbol.iterator, d_1(getValues));
1256         defineProperty$5(SetPoly.prototype, es6Symbol.toStringTag, d_1('c', 'Set'));
1257
1258         var es6Set = isImplemented() ? Set : polyfill$1;
1259
1260         var isImplemented$9 = function () {
1261                 var map, iterator, result;
1262                 if (typeof Map !== 'function') return false;
1263                 try {
1264                         // WebKit doesn't support arguments and crashes
1265                         map = new Map([['raz', 'one'], ['dwa', 'two'], ['trzy', 'three']]);
1266                 } catch (e) {
1267                         return false;
1268                 }
1269                 if (String(map) !== '[object Map]') return false;
1270                 if (map.size !== 3) return false;
1271                 if (typeof map.clear !== 'function') return false;
1272                 if (typeof map.delete !== 'function') return false;
1273                 if (typeof map.entries !== 'function') return false;
1274                 if (typeof map.forEach !== 'function') return false;
1275                 if (typeof map.get !== 'function') return false;
1276                 if (typeof map.has !== 'function') return false;
1277                 if (typeof map.keys !== 'function') return false;
1278                 if (typeof map.set !== 'function') return false;
1279                 if (typeof map.values !== 'function') return false;
1280
1281                 iterator = map.entries();
1282                 result = iterator.next();
1283                 if (result.done !== false) return false;
1284                 if (!result.value) return false;
1285                 if (result.value[0] !== 'raz') return false;
1286                 if (result.value[1] !== 'one') return false;
1287
1288                 return true;
1289         };
1290
1291         var forEach$2 = Array.prototype.forEach, create$4 = Object.create;
1292
1293         // eslint-disable-next-line no-unused-vars
1294         var primitiveSet = function (arg /*, …args*/) {
1295                 var set = create$4(null);
1296                 forEach$2.call(arguments, function (name) {
1297                         set[name] = true;
1298                 });
1299                 return set;
1300         };
1301
1302         var iteratorKinds = primitiveSet('key',
1303                 'value', 'key+value');
1304
1305         var iterator$2 = createCommonjsModule(function (module) {
1306
1307         var toStringTagSymbol = es6Symbol.toStringTag
1308
1309           , defineProperties = Object.defineProperties
1310           , unBind = es6Iterator.prototype._unBind
1311           , MapIterator;
1312
1313         MapIterator = module.exports = function (map, kind) {
1314                 if (!(this instanceof MapIterator)) return new MapIterator(map, kind);
1315                 es6Iterator.call(this, map.__mapKeysData__, map);
1316                 if (!kind || !iteratorKinds[kind]) kind = 'key+value';
1317                 defineProperties(this, {
1318                         __kind__: d_1('', kind),
1319                         __values__: d_1('w', map.__mapValuesData__)
1320                 });
1321         };
1322         if (setPrototypeOf) setPrototypeOf(MapIterator, es6Iterator);
1323
1324         MapIterator.prototype = Object.create(es6Iterator.prototype, {
1325                 constructor: d_1(MapIterator),
1326                 _resolve: d_1(function (i) {
1327                         if (this.__kind__ === 'value') return this.__values__[i];
1328                         if (this.__kind__ === 'key') return this.__list__[i];
1329                         return [this.__list__[i], this.__values__[i]];
1330                 }),
1331                 _unBind: d_1(function () {
1332                         this.__values__ = null;
1333                         unBind.call(this);
1334                 }),
1335                 toString: d_1(function () { return '[object Map Iterator]'; })
1336         });
1337         Object.defineProperty(MapIterator.prototype, toStringTagSymbol,
1338                 d_1('c', 'Map Iterator'));
1339         });
1340
1341         // Exports true if environment provides native `Map` implementation,
1342
1343         var isNativeImplemented$1 = (function () {
1344                 if (typeof Map === 'undefined') return false;
1345                 return (Object.prototype.toString.call(new Map()) === '[object Map]');
1346         }());
1347
1348         var iterator$3       = validIterable
1349
1350           , call$5 = Function.prototype.call
1351           , defineProperties$2 = Object.defineProperties, getPrototypeOf$2 = Object.getPrototypeOf
1352           , MapPoly;
1353
1354         var polyfill$2 = MapPoly = function (/*iterable*/) {
1355                 var iterable = arguments[0], keys, values, self;
1356                 if (!(this instanceof MapPoly)) throw new TypeError('Constructor requires \'new\'');
1357                 if (isNativeImplemented$1 && setPrototypeOf && (Map !== MapPoly)) {
1358                         self = setPrototypeOf(new Map(), getPrototypeOf$2(this));
1359                 } else {
1360                         self = this;
1361                 }
1362                 if (iterable != null) iterator$3(iterable);
1363                 defineProperties$2(self, {
1364                         __mapKeysData__: d_1('c', keys = []),
1365                         __mapValuesData__: d_1('c', values = [])
1366                 });
1367                 if (!iterable) return self;
1368                 forOf(iterable, function (value) {
1369                         var key = validValue(value)[0];
1370                         value = value[1];
1371                         if (eIndexOf.call(keys, key) !== -1) return;
1372                         keys.push(key);
1373                         values.push(value);
1374                 }, self);
1375                 return self;
1376         };
1377
1378         if (isNativeImplemented$1) {
1379                 if (setPrototypeOf) setPrototypeOf(MapPoly, Map);
1380                 MapPoly.prototype = Object.create(Map.prototype, {
1381                         constructor: d_1(MapPoly)
1382                 });
1383         }
1384
1385         eventEmitter(defineProperties$2(MapPoly.prototype, {
1386                 clear: d_1(function () {
1387                         if (!this.__mapKeysData__.length) return;
1388                         clear.call(this.__mapKeysData__);
1389                         clear.call(this.__mapValuesData__);
1390                         this.emit('_clear');
1391                 }),
1392                 delete: d_1(function (key) {
1393                         var index = eIndexOf.call(this.__mapKeysData__, key);
1394                         if (index === -1) return false;
1395                         this.__mapKeysData__.splice(index, 1);
1396                         this.__mapValuesData__.splice(index, 1);
1397                         this.emit('_delete', index, key);
1398                         return true;
1399                 }),
1400                 entries: d_1(function () { return new iterator$2(this, 'key+value'); }),
1401                 forEach: d_1(function (cb/*, thisArg*/) {
1402                         var thisArg = arguments[1], iterator, result;
1403                         validCallable(cb);
1404                         iterator = this.entries();
1405                         result = iterator._next();
1406                         while (result !== undefined) {
1407                                 call$5.call(cb, thisArg, this.__mapValuesData__[result],
1408                                         this.__mapKeysData__[result], this);
1409                                 result = iterator._next();
1410                         }
1411                 }),
1412                 get: d_1(function (key) {
1413                         var index = eIndexOf.call(this.__mapKeysData__, key);
1414                         if (index === -1) return;
1415                         return this.__mapValuesData__[index];
1416                 }),
1417                 has: d_1(function (key) {
1418                         return (eIndexOf.call(this.__mapKeysData__, key) !== -1);
1419                 }),
1420                 keys: d_1(function () { return new iterator$2(this, 'key'); }),
1421                 set: d_1(function (key, value) {
1422                         var index = eIndexOf.call(this.__mapKeysData__, key), emit;
1423                         if (index === -1) {
1424                                 index = this.__mapKeysData__.push(key) - 1;
1425                                 emit = true;
1426                         }
1427                         this.__mapValuesData__[index] = value;
1428                         if (emit) this.emit('_add', index, key);
1429                         return this;
1430                 }),
1431                 size: d_1.gs(function () { return this.__mapKeysData__.length; }),
1432                 values: d_1(function () { return new iterator$2(this, 'value'); }),
1433                 toString: d_1(function () { return '[object Map]'; })
1434         }));
1435         Object.defineProperty(MapPoly.prototype, es6Symbol.iterator, d_1(function () {
1436                 return this.entries();
1437         }));
1438         Object.defineProperty(MapPoly.prototype, es6Symbol.toStringTag, d_1('c', 'Map'));
1439
1440         var es6Map = isImplemented$9() ? Map : polyfill$2;
1441
1442         var toStr = Object.prototype.toString;
1443
1444         var isArguments$1 = function isArguments(value) {
1445                 var str = toStr.call(value);
1446                 var isArgs = str === '[object Arguments]';
1447                 if (!isArgs) {
1448                         isArgs = str !== '[object Array]' &&
1449                                 value !== null &&
1450                                 typeof value === 'object' &&
1451                                 typeof value.length === 'number' &&
1452                                 value.length >= 0 &&
1453                                 toStr.call(value.callee) === '[object Function]';
1454                 }
1455                 return isArgs;
1456         };
1457
1458         var keysShim;
1459         if (!Object.keys) {
1460                 // modified from https://github.com/es-shims/es5-shim
1461                 var has = Object.prototype.hasOwnProperty;
1462                 var toStr$1 = Object.prototype.toString;
1463                 var isArgs = isArguments$1; // eslint-disable-line global-require
1464                 var isEnumerable = Object.prototype.propertyIsEnumerable;
1465                 var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
1466                 var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
1467                 var dontEnums = [
1468                         'toString',
1469                         'toLocaleString',
1470                         'valueOf',
1471                         'hasOwnProperty',
1472                         'isPrototypeOf',
1473                         'propertyIsEnumerable',
1474                         'constructor'
1475                 ];
1476                 var equalsConstructorPrototype = function (o) {
1477                         var ctor = o.constructor;
1478                         return ctor && ctor.prototype === o;
1479                 };
1480                 var excludedKeys = {
1481                         $applicationCache: true,
1482                         $console: true,
1483                         $external: true,
1484                         $frame: true,
1485                         $frameElement: true,
1486                         $frames: true,
1487                         $innerHeight: true,
1488                         $innerWidth: true,
1489                         $outerHeight: true,
1490                         $outerWidth: true,
1491                         $pageXOffset: true,
1492                         $pageYOffset: true,
1493                         $parent: true,
1494                         $scrollLeft: true,
1495                         $scrollTop: true,
1496                         $scrollX: true,
1497                         $scrollY: true,
1498                         $self: true,
1499                         $webkitIndexedDB: true,
1500                         $webkitStorageInfo: true,
1501                         $window: true
1502                 };
1503                 var hasAutomationEqualityBug = (function () {
1504                         /* global window */
1505                         if (typeof window === 'undefined') { return false; }
1506                         for (var k in window) {
1507                                 try {
1508                                         if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
1509                                                 try {
1510                                                         equalsConstructorPrototype(window[k]);
1511                                                 } catch (e) {
1512                                                         return true;
1513                                                 }
1514                                         }
1515                                 } catch (e) {
1516                                         return true;
1517                                 }
1518                         }
1519                         return false;
1520                 }());
1521                 var equalsConstructorPrototypeIfNotBuggy = function (o) {
1522                         /* global window */
1523                         if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
1524                                 return equalsConstructorPrototype(o);
1525                         }
1526                         try {
1527                                 return equalsConstructorPrototype(o);
1528                         } catch (e) {
1529                                 return false;
1530                         }
1531                 };
1532
1533                 keysShim = function keys(object) {
1534                         var isObject = object !== null && typeof object === 'object';
1535                         var isFunction = toStr$1.call(object) === '[object Function]';
1536                         var isArguments = isArgs(object);
1537                         var isString = isObject && toStr$1.call(object) === '[object String]';
1538                         var theKeys = [];
1539
1540                         if (!isObject && !isFunction && !isArguments) {
1541                                 throw new TypeError('Object.keys called on a non-object');
1542                         }
1543
1544                         var skipProto = hasProtoEnumBug && isFunction;
1545                         if (isString && object.length > 0 && !has.call(object, 0)) {
1546                                 for (var i = 0; i < object.length; ++i) {
1547                                         theKeys.push(String(i));
1548                                 }
1549                         }
1550
1551                         if (isArguments && object.length > 0) {
1552                                 for (var j = 0; j < object.length; ++j) {
1553                                         theKeys.push(String(j));
1554                                 }
1555                         } else {
1556                                 for (var name in object) {
1557                                         if (!(skipProto && name === 'prototype') && has.call(object, name)) {
1558                                                 theKeys.push(String(name));
1559                                         }
1560                                 }
1561                         }
1562
1563                         if (hasDontEnumBug) {
1564                                 var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
1565
1566                                 for (var k = 0; k < dontEnums.length; ++k) {
1567                                         if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
1568                                                 theKeys.push(dontEnums[k]);
1569                                         }
1570                                 }
1571                         }
1572                         return theKeys;
1573                 };
1574         }
1575         var implementation = keysShim;
1576
1577         var slice = Array.prototype.slice;
1578
1579
1580         var origKeys = Object.keys;
1581         var keysShim$1 = origKeys ? function keys(o) { return origKeys(o); } : implementation;
1582
1583         var originalKeys = Object.keys;
1584
1585         keysShim$1.shim = function shimObjectKeys() {
1586                 if (Object.keys) {
1587                         var keysWorksWithArguments = (function () {
1588                                 // Safari 5.0 bug
1589                                 var args = Object.keys(arguments);
1590                                 return args && args.length === arguments.length;
1591                         }(1, 2));
1592                         if (!keysWorksWithArguments) {
1593                                 Object.keys = function keys(object) { // eslint-disable-line func-name-matching
1594                                         if (isArguments$1(object)) {
1595                                                 return originalKeys(slice.call(object));
1596                                         }
1597                                         return originalKeys(object);
1598                                 };
1599                         }
1600                 } else {
1601                         Object.keys = keysShim$1;
1602                 }
1603                 return Object.keys || keysShim$1;
1604         };
1605
1606         var objectKeys = keysShim$1;
1607
1608         var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
1609
1610         var toStr$2 = Object.prototype.toString;
1611         var concat = Array.prototype.concat;
1612         var origDefineProperty = Object.defineProperty;
1613
1614         var isFunction$1 = function (fn) {
1615                 return typeof fn === 'function' && toStr$2.call(fn) === '[object Function]';
1616         };
1617
1618         var arePropertyDescriptorsSupported = function () {
1619                 var obj = {};
1620                 try {
1621                         origDefineProperty(obj, 'x', { enumerable: false, value: obj });
1622                         // eslint-disable-next-line no-unused-vars, no-restricted-syntax
1623                         for (var _ in obj) { // jscs:ignore disallowUnusedVariables
1624                                 return false;
1625                         }
1626                         return obj.x === obj;
1627                 } catch (e) { /* this is IE 8. */
1628                         return false;
1629                 }
1630         };
1631         var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();
1632
1633         var defineProperty$6 = function (object, name, value, predicate) {
1634                 if (name in object && (!isFunction$1(predicate) || !predicate())) {
1635                         return;
1636                 }
1637                 if (supportsDescriptors) {
1638                         origDefineProperty(object, name, {
1639                                 configurable: true,
1640                                 enumerable: false,
1641                                 value: value,
1642                                 writable: true
1643                         });
1644                 } else {
1645                         object[name] = value;
1646                 }
1647         };
1648
1649         var defineProperties$3 = function (object, map) {
1650                 var predicates = arguments.length > 2 ? arguments[2] : {};
1651                 var props = objectKeys(map);
1652                 if (hasSymbols) {
1653                         props = concat.call(props, Object.getOwnPropertySymbols(map));
1654                 }
1655                 for (var i = 0; i < props.length; i += 1) {
1656                         defineProperty$6(object, props[i], map[props[i]], predicates[props[i]]);
1657                 }
1658         };
1659
1660         defineProperties$3.supportsDescriptors = !!supportsDescriptors;
1661
1662         var defineProperties_1 = defineProperties$3;
1663
1664         /* eslint no-invalid-this: 1 */
1665
1666         var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
1667         var slice$1 = Array.prototype.slice;
1668         var toStr$3 = Object.prototype.toString;
1669         var funcType = '[object Function]';
1670
1671         var implementation$1 = function bind(that) {
1672             var target = this;
1673             if (typeof target !== 'function' || toStr$3.call(target) !== funcType) {
1674                 throw new TypeError(ERROR_MESSAGE + target);
1675             }
1676             var args = slice$1.call(arguments, 1);
1677
1678             var bound;
1679             var binder = function () {
1680                 if (this instanceof bound) {
1681                     var result = target.apply(
1682                         this,
1683                         args.concat(slice$1.call(arguments))
1684                     );
1685                     if (Object(result) === result) {
1686                         return result;
1687                     }
1688                     return this;
1689                 } else {
1690                     return target.apply(
1691                         that,
1692                         args.concat(slice$1.call(arguments))
1693                     );
1694                 }
1695             };
1696
1697             var boundLength = Math.max(0, target.length - args.length);
1698             var boundArgs = [];
1699             for (var i = 0; i < boundLength; i++) {
1700                 boundArgs.push('$' + i);
1701             }
1702
1703             bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
1704
1705             if (target.prototype) {
1706                 var Empty = function Empty() {};
1707                 Empty.prototype = target.prototype;
1708                 bound.prototype = new Empty();
1709                 Empty.prototype = null;
1710             }
1711
1712             return bound;
1713         };
1714
1715         var functionBind = Function.prototype.bind || implementation$1;
1716
1717         var src = functionBind.call(Function.call, Object.prototype.hasOwnProperty);
1718
1719         var isPrimitive = function isPrimitive(value) {
1720                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
1721         };
1722
1723         var fnToStr = Function.prototype.toString;
1724
1725         var constructorRegex = /^\s*class\b/;
1726         var isES6ClassFn = function isES6ClassFunction(value) {
1727                 try {
1728                         var fnStr = fnToStr.call(value);
1729                         return constructorRegex.test(fnStr);
1730                 } catch (e) {
1731                         return false; // not a function
1732                 }
1733         };
1734
1735         var tryFunctionObject = function tryFunctionToStr(value) {
1736                 try {
1737                         if (isES6ClassFn(value)) { return false; }
1738                         fnToStr.call(value);
1739                         return true;
1740                 } catch (e) {
1741                         return false;
1742                 }
1743         };
1744         var toStr$4 = Object.prototype.toString;
1745         var fnClass = '[object Function]';
1746         var genClass = '[object GeneratorFunction]';
1747         var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
1748
1749         var isCallable$1 = function isCallable(value) {
1750                 if (!value) { return false; }
1751                 if (typeof value !== 'function' && typeof value !== 'object') { return false; }
1752                 if (typeof value === 'function' && !value.prototype) { return true; }
1753                 if (hasToStringTag) { return tryFunctionObject(value); }
1754                 if (isES6ClassFn(value)) { return false; }
1755                 var strClass = toStr$4.call(value);
1756                 return strClass === fnClass || strClass === genClass;
1757         };
1758
1759         var getDay = Date.prototype.getDay;
1760         var tryDateObject = function tryDateObject(value) {
1761                 try {
1762                         getDay.call(value);
1763                         return true;
1764                 } catch (e) {
1765                         return false;
1766                 }
1767         };
1768
1769         var toStr$5 = Object.prototype.toString;
1770         var dateClass = '[object Date]';
1771         var hasToStringTag$1 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
1772
1773         var isDateObject = function isDateObject(value) {
1774                 if (typeof value !== 'object' || value === null) { return false; }
1775                 return hasToStringTag$1 ? tryDateObject(value) : toStr$5.call(value) === dateClass;
1776         };
1777
1778         /* eslint complexity: [2, 17], max-statements: [2, 33] */
1779         var shams = function hasSymbols() {
1780                 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
1781                 if (typeof Symbol.iterator === 'symbol') { return true; }
1782
1783                 var obj = {};
1784                 var sym = Symbol('test');
1785                 var symObj = Object(sym);
1786                 if (typeof sym === 'string') { return false; }
1787
1788                 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
1789                 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
1790
1791                 // temp disabled per https://github.com/ljharb/object.assign/issues/17
1792                 // if (sym instanceof Symbol) { return false; }
1793                 // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
1794                 // if (!(symObj instanceof Symbol)) { return false; }
1795
1796                 // if (typeof Symbol.prototype.toString !== 'function') { return false; }
1797                 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
1798
1799                 var symVal = 42;
1800                 obj[sym] = symVal;
1801                 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax
1802                 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
1803
1804                 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
1805
1806                 var syms = Object.getOwnPropertySymbols(obj);
1807                 if (syms.length !== 1 || syms[0] !== sym) { return false; }
1808
1809                 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
1810
1811                 if (typeof Object.getOwnPropertyDescriptor === 'function') {
1812                         var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
1813                         if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
1814                 }
1815
1816                 return true;
1817         };
1818
1819         var origSymbol = commonjsGlobal.Symbol;
1820
1821
1822         var hasSymbols$1 = function hasNativeSymbols() {
1823                 if (typeof origSymbol !== 'function') { return false; }
1824                 if (typeof Symbol !== 'function') { return false; }
1825                 if (typeof origSymbol('foo') !== 'symbol') { return false; }
1826                 if (typeof Symbol('bar') !== 'symbol') { return false; }
1827
1828                 return shams();
1829         };
1830
1831         var isSymbol$1 = createCommonjsModule(function (module) {
1832
1833         var toStr = Object.prototype.toString;
1834         var hasSymbols = hasSymbols$1();
1835
1836         if (hasSymbols) {
1837                 var symToStr = Symbol.prototype.toString;
1838                 var symStringRegex = /^Symbol\(.*\)$/;
1839                 var isSymbolObject = function isRealSymbolObject(value) {
1840                         if (typeof value.valueOf() !== 'symbol') {
1841                                 return false;
1842                         }
1843                         return symStringRegex.test(symToStr.call(value));
1844                 };
1845
1846                 module.exports = function isSymbol(value) {
1847                         if (typeof value === 'symbol') {
1848                                 return true;
1849                         }
1850                         if (toStr.call(value) !== '[object Symbol]') {
1851                                 return false;
1852                         }
1853                         try {
1854                                 return isSymbolObject(value);
1855                         } catch (e) {
1856                                 return false;
1857                         }
1858                 };
1859         } else {
1860
1861                 module.exports = function isSymbol(value) {
1862                         // this environment does not support Symbols.
1863                         return false ;
1864                 };
1865         }
1866         });
1867
1868         var hasSymbols$2 = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
1869
1870
1871
1872
1873
1874
1875         var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
1876                 if (typeof O === 'undefined' || O === null) {
1877                         throw new TypeError('Cannot call method on ' + O);
1878                 }
1879                 if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {
1880                         throw new TypeError('hint must be "string" or "number"');
1881                 }
1882                 var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
1883                 var method, result, i;
1884                 for (i = 0; i < methodNames.length; ++i) {
1885                         method = O[methodNames[i]];
1886                         if (isCallable$1(method)) {
1887                                 result = method.call(O);
1888                                 if (isPrimitive(result)) {
1889                                         return result;
1890                                 }
1891                         }
1892                 }
1893                 throw new TypeError('No default value');
1894         };
1895
1896         var GetMethod = function GetMethod(O, P) {
1897                 var func = O[P];
1898                 if (func !== null && typeof func !== 'undefined') {
1899                         if (!isCallable$1(func)) {
1900                                 throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
1901                         }
1902                         return func;
1903                 }
1904                 return void 0;
1905         };
1906
1907         // http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
1908         var es2015 = function ToPrimitive(input) {
1909                 if (isPrimitive(input)) {
1910                         return input;
1911                 }
1912                 var hint = 'default';
1913                 if (arguments.length > 1) {
1914                         if (arguments[1] === String) {
1915                                 hint = 'string';
1916                         } else if (arguments[1] === Number) {
1917                                 hint = 'number';
1918                         }
1919                 }
1920
1921                 var exoticToPrim;
1922                 if (hasSymbols$2) {
1923                         if (Symbol.toPrimitive) {
1924                                 exoticToPrim = GetMethod(input, Symbol.toPrimitive);
1925                         } else if (isSymbol$1(input)) {
1926                                 exoticToPrim = Symbol.prototype.valueOf;
1927                         }
1928                 }
1929                 if (typeof exoticToPrim !== 'undefined') {
1930                         var result = exoticToPrim.call(input, hint);
1931                         if (isPrimitive(result)) {
1932                                 return result;
1933                         }
1934                         throw new TypeError('unable to convert exotic object to primitive');
1935                 }
1936                 if (hint === 'default' && (isDateObject(input) || isSymbol$1(input))) {
1937                         hint = 'string';
1938                 }
1939                 return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
1940         };
1941
1942         var es6 = es2015;
1943
1944         /* globals
1945                 Set,
1946                 Map,
1947                 WeakSet,
1948                 WeakMap,
1949
1950                 Promise,
1951
1952                 Symbol,
1953                 Proxy,
1954
1955                 Atomics,
1956                 SharedArrayBuffer,
1957
1958                 ArrayBuffer,
1959                 DataView,
1960                 Uint8Array,
1961                 Float32Array,
1962                 Float64Array,
1963                 Int8Array,
1964                 Int16Array,
1965                 Int32Array,
1966                 Uint8ClampedArray,
1967                 Uint16Array,
1968                 Uint32Array,
1969         */
1970
1971         var undefined$1; // eslint-disable-line no-shadow-restricted-names
1972
1973         var ThrowTypeError = Object.getOwnPropertyDescriptor
1974                 ? (function () { return Object.getOwnPropertyDescriptor(arguments, 'callee').get; }())
1975                 : function () { throw new TypeError(); };
1976
1977         var hasSymbols$3 = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
1978
1979         var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
1980         var generatorFunction =  undefined$1;
1981         var asyncFunction =  undefined$1;
1982         var asyncGenFunction =  undefined$1;
1983
1984         var TypedArray = typeof Uint8Array === 'undefined' ? undefined$1 : getProto(Uint8Array);
1985
1986         var INTRINSICS = {
1987                 '$ %Array%': Array,
1988                 '$ %ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer,
1989                 '$ %ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer.prototype,
1990                 '$ %ArrayIteratorPrototype%': hasSymbols$3 ? getProto([][Symbol.iterator]()) : undefined$1,
1991                 '$ %ArrayPrototype%': Array.prototype,
1992                 '$ %ArrayProto_entries%': Array.prototype.entries,
1993                 '$ %ArrayProto_forEach%': Array.prototype.forEach,
1994                 '$ %ArrayProto_keys%': Array.prototype.keys,
1995                 '$ %ArrayProto_values%': Array.prototype.values,
1996                 '$ %AsyncFromSyncIteratorPrototype%': undefined$1,
1997                 '$ %AsyncFunction%': asyncFunction,
1998                 '$ %AsyncFunctionPrototype%':  undefined$1,
1999                 '$ %AsyncGenerator%':  undefined$1,
2000                 '$ %AsyncGeneratorFunction%': asyncGenFunction,
2001                 '$ %AsyncGeneratorPrototype%':  undefined$1,
2002                 '$ %AsyncIteratorPrototype%':  undefined$1,
2003                 '$ %Atomics%': typeof Atomics === 'undefined' ? undefined$1 : Atomics,
2004                 '$ %Boolean%': Boolean,
2005                 '$ %BooleanPrototype%': Boolean.prototype,
2006                 '$ %DataView%': typeof DataView === 'undefined' ? undefined$1 : DataView,
2007                 '$ %DataViewPrototype%': typeof DataView === 'undefined' ? undefined$1 : DataView.prototype,
2008                 '$ %Date%': Date,
2009                 '$ %DatePrototype%': Date.prototype,
2010                 '$ %decodeURI%': decodeURI,
2011                 '$ %decodeURIComponent%': decodeURIComponent,
2012                 '$ %encodeURI%': encodeURI,
2013                 '$ %encodeURIComponent%': encodeURIComponent,
2014                 '$ %Error%': Error,
2015                 '$ %ErrorPrototype%': Error.prototype,
2016                 '$ %eval%': eval, // eslint-disable-line no-eval
2017                 '$ %EvalError%': EvalError,
2018                 '$ %EvalErrorPrototype%': EvalError.prototype,
2019                 '$ %Float32Array%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array,
2020                 '$ %Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array.prototype,
2021                 '$ %Float64Array%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array,
2022                 '$ %Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array.prototype,
2023                 '$ %Function%': Function,
2024                 '$ %FunctionPrototype%': Function.prototype,
2025                 '$ %Generator%':  undefined$1,
2026                 '$ %GeneratorFunction%': generatorFunction,
2027                 '$ %GeneratorPrototype%':  undefined$1,
2028                 '$ %Int8Array%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array,
2029                 '$ %Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2030                 '$ %Int16Array%': typeof Int16Array === 'undefined' ? undefined$1 : Int16Array,
2031                 '$ %Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2032                 '$ %Int32Array%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array,
2033                 '$ %Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array.prototype,
2034                 '$ %isFinite%': isFinite,
2035                 '$ %isNaN%': isNaN,
2036                 '$ %IteratorPrototype%': hasSymbols$3 ? getProto(getProto([][Symbol.iterator]())) : undefined$1,
2037                 '$ %JSON%': JSON,
2038                 '$ %JSONParse%': JSON.parse,
2039                 '$ %Map%': typeof Map === 'undefined' ? undefined$1 : Map,
2040                 '$ %MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Map()[Symbol.iterator]()),
2041                 '$ %MapPrototype%': typeof Map === 'undefined' ? undefined$1 : Map.prototype,
2042                 '$ %Math%': Math,
2043                 '$ %Number%': Number,
2044                 '$ %NumberPrototype%': Number.prototype,
2045                 '$ %Object%': Object,
2046                 '$ %ObjectPrototype%': Object.prototype,
2047                 '$ %ObjProto_toString%': Object.prototype.toString,
2048                 '$ %ObjProto_valueOf%': Object.prototype.valueOf,
2049                 '$ %parseFloat%': parseFloat,
2050                 '$ %parseInt%': parseInt,
2051                 '$ %Promise%': typeof Promise === 'undefined' ? undefined$1 : Promise,
2052                 '$ %PromisePrototype%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype,
2053                 '$ %PromiseProto_then%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype.then,
2054                 '$ %Promise_all%': typeof Promise === 'undefined' ? undefined$1 : Promise.all,
2055                 '$ %Promise_reject%': typeof Promise === 'undefined' ? undefined$1 : Promise.reject,
2056                 '$ %Promise_resolve%': typeof Promise === 'undefined' ? undefined$1 : Promise.resolve,
2057                 '$ %Proxy%': typeof Proxy === 'undefined' ? undefined$1 : Proxy,
2058                 '$ %RangeError%': RangeError,
2059                 '$ %RangeErrorPrototype%': RangeError.prototype,
2060                 '$ %ReferenceError%': ReferenceError,
2061                 '$ %ReferenceErrorPrototype%': ReferenceError.prototype,
2062                 '$ %Reflect%': typeof Reflect === 'undefined' ? undefined$1 : Reflect,
2063                 '$ %RegExp%': RegExp,
2064                 '$ %RegExpPrototype%': RegExp.prototype,
2065                 '$ %Set%': typeof Set === 'undefined' ? undefined$1 : Set,
2066                 '$ %SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Set()[Symbol.iterator]()),
2067                 '$ %SetPrototype%': typeof Set === 'undefined' ? undefined$1 : Set.prototype,
2068                 '$ %SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer,
2069                 '$ %SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer.prototype,
2070                 '$ %String%': String,
2071                 '$ %StringIteratorPrototype%': hasSymbols$3 ? getProto(''[Symbol.iterator]()) : undefined$1,
2072                 '$ %StringPrototype%': String.prototype,
2073                 '$ %Symbol%': hasSymbols$3 ? Symbol : undefined$1,
2074                 '$ %SymbolPrototype%': hasSymbols$3 ? Symbol.prototype : undefined$1,
2075                 '$ %SyntaxError%': SyntaxError,
2076                 '$ %SyntaxErrorPrototype%': SyntaxError.prototype,
2077                 '$ %ThrowTypeError%': ThrowTypeError,
2078                 '$ %TypedArray%': TypedArray,
2079                 '$ %TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined$1,
2080                 '$ %TypeError%': TypeError,
2081                 '$ %TypeErrorPrototype%': TypeError.prototype,
2082                 '$ %Uint8Array%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array,
2083                 '$ %Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array.prototype,
2084                 '$ %Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray,
2085                 '$ %Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray.prototype,
2086                 '$ %Uint16Array%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array,
2087                 '$ %Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array.prototype,
2088                 '$ %Uint32Array%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array,
2089                 '$ %Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array.prototype,
2090                 '$ %URIError%': URIError,
2091                 '$ %URIErrorPrototype%': URIError.prototype,
2092                 '$ %WeakMap%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap,
2093                 '$ %WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap.prototype,
2094                 '$ %WeakSet%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet,
2095                 '$ %WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet.prototype
2096         };
2097
2098         var GetIntrinsic = function GetIntrinsic(name, allowMissing) {
2099                 if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
2100                         throw new TypeError('"allowMissing" argument must be a boolean');
2101                 }
2102
2103                 var key = '$ ' + name;
2104                 if (!(key in INTRINSICS)) {
2105                         throw new SyntaxError('intrinsic ' + name + ' does not exist!');
2106                 }
2107
2108                 // istanbul ignore if // hopefully this is impossible to test :-)
2109                 if (typeof INTRINSICS[key] === 'undefined' && !allowMissing) {
2110                         throw new TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
2111                 }
2112                 return INTRINSICS[key];
2113         };
2114
2115         var $TypeError = GetIntrinsic('%TypeError%');
2116         var $SyntaxError = GetIntrinsic('%SyntaxError%');
2117
2118
2119
2120         var predicates = {
2121           // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
2122           'Property Descriptor': function isPropertyDescriptor(ES, Desc) {
2123             if (ES.Type(Desc) !== 'Object') {
2124               return false;
2125             }
2126             var allowed = {
2127               '[[Configurable]]': true,
2128               '[[Enumerable]]': true,
2129               '[[Get]]': true,
2130               '[[Set]]': true,
2131               '[[Value]]': true,
2132               '[[Writable]]': true
2133             };
2134
2135             for (var key in Desc) { // eslint-disable-line
2136               if (src(Desc, key) && !allowed[key]) {
2137                 return false;
2138               }
2139             }
2140
2141             var isData = src(Desc, '[[Value]]');
2142             var IsAccessor = src(Desc, '[[Get]]') || src(Desc, '[[Set]]');
2143             if (isData && IsAccessor) {
2144               throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
2145             }
2146             return true;
2147           }
2148         };
2149
2150         var assertRecord = function assertRecord(ES, recordType, argumentName, value) {
2151           var predicate = predicates[recordType];
2152           if (typeof predicate !== 'function') {
2153             throw new $SyntaxError('unknown record type: ' + recordType);
2154           }
2155           if (!predicate(ES, value)) {
2156             throw new $TypeError(argumentName + ' must be a ' + recordType);
2157           }
2158           console.log(predicate(ES, value), value);
2159         };
2160
2161         var _isNaN = Number.isNaN || function isNaN(a) {
2162                 return a !== a;
2163         };
2164
2165         var $isNaN = Number.isNaN || function (a) { return a !== a; };
2166
2167         var _isFinite = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
2168
2169         var has$1 = functionBind.call(Function.call, Object.prototype.hasOwnProperty);
2170
2171         var $assign = Object.assign;
2172
2173         var assign$1 = function assign(target, source) {
2174                 if ($assign) {
2175                         return $assign(target, source);
2176                 }
2177
2178                 for (var key in source) {
2179                         if (has$1(source, key)) {
2180                                 target[key] = source[key];
2181                         }
2182                 }
2183                 return target;
2184         };
2185
2186         var sign$1 = function sign(number) {
2187                 return number >= 0 ? 1 : -1;
2188         };
2189
2190         var mod = function mod(number, modulo) {
2191                 var remain = number % modulo;
2192                 return Math.floor(remain >= 0 ? remain : remain + modulo);
2193         };
2194
2195         var isPrimitive$1 = function isPrimitive(value) {
2196                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2197         };
2198
2199         var toStr$6 = Object.prototype.toString;
2200
2201
2202
2203
2204
2205         // http://ecma-international.org/ecma-262/5.1/#sec-8.12.8
2206         var ES5internalSlots = {
2207                 '[[DefaultValue]]': function (O) {
2208                         var actualHint;
2209                         if (arguments.length > 1) {
2210                                 actualHint = arguments[1];
2211                         } else {
2212                                 actualHint = toStr$6.call(O) === '[object Date]' ? String : Number;
2213                         }
2214
2215                         if (actualHint === String || actualHint === Number) {
2216                                 var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
2217                                 var value, i;
2218                                 for (i = 0; i < methods.length; ++i) {
2219                                         if (isCallable$1(O[methods[i]])) {
2220                                                 value = O[methods[i]]();
2221                                                 if (isPrimitive(value)) {
2222                                                         return value;
2223                                                 }
2224                                         }
2225                                 }
2226                                 throw new TypeError('No default value');
2227                         }
2228                         throw new TypeError('invalid [[DefaultValue]] hint supplied');
2229                 }
2230         };
2231
2232         // http://ecma-international.org/ecma-262/5.1/#sec-9.1
2233         var es5 = function ToPrimitive(input) {
2234                 if (isPrimitive(input)) {
2235                         return input;
2236                 }
2237                 if (arguments.length > 1) {
2238                         return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);
2239                 }
2240                 return ES5internalSlots['[[DefaultValue]]'](input);
2241         };
2242
2243         var $Object = GetIntrinsic('%Object%');
2244         var $TypeError$1 = GetIntrinsic('%TypeError%');
2245         var $String = GetIntrinsic('%String%');
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259         // https://es5.github.io/#x9
2260         var ES5 = {
2261                 ToPrimitive: es5,
2262
2263                 ToBoolean: function ToBoolean(value) {
2264                         return !!value;
2265                 },
2266                 ToNumber: function ToNumber(value) {
2267                         return +value; // eslint-disable-line no-implicit-coercion
2268                 },
2269                 ToInteger: function ToInteger(value) {
2270                         var number = this.ToNumber(value);
2271                         if (_isNaN(number)) { return 0; }
2272                         if (number === 0 || !_isFinite(number)) { return number; }
2273                         return sign$1(number) * Math.floor(Math.abs(number));
2274                 },
2275                 ToInt32: function ToInt32(x) {
2276                         return this.ToNumber(x) >> 0;
2277                 },
2278                 ToUint32: function ToUint32(x) {
2279                         return this.ToNumber(x) >>> 0;
2280                 },
2281                 ToUint16: function ToUint16(value) {
2282                         var number = this.ToNumber(value);
2283                         if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
2284                         var posInt = sign$1(number) * Math.floor(Math.abs(number));
2285                         return mod(posInt, 0x10000);
2286                 },
2287                 ToString: function ToString(value) {
2288                         return $String(value);
2289                 },
2290                 ToObject: function ToObject(value) {
2291                         this.CheckObjectCoercible(value);
2292                         return $Object(value);
2293                 },
2294                 CheckObjectCoercible: function CheckObjectCoercible(value, optMessage) {
2295                         /* jshint eqnull:true */
2296                         if (value == null) {
2297                                 throw new $TypeError$1(optMessage || 'Cannot call method on ' + value);
2298                         }
2299                         return value;
2300                 },
2301                 IsCallable: isCallable$1,
2302                 SameValue: function SameValue(x, y) {
2303                         if (x === y) { // 0 === -0, but they are not identical.
2304                                 if (x === 0) { return 1 / x === 1 / y; }
2305                                 return true;
2306                         }
2307                         return _isNaN(x) && _isNaN(y);
2308                 },
2309
2310                 // https://www.ecma-international.org/ecma-262/5.1/#sec-8
2311                 Type: function Type(x) {
2312                         if (x === null) {
2313                                 return 'Null';
2314                         }
2315                         if (typeof x === 'undefined') {
2316                                 return 'Undefined';
2317                         }
2318                         if (typeof x === 'function' || typeof x === 'object') {
2319                                 return 'Object';
2320                         }
2321                         if (typeof x === 'number') {
2322                                 return 'Number';
2323                         }
2324                         if (typeof x === 'boolean') {
2325                                 return 'Boolean';
2326                         }
2327                         if (typeof x === 'string') {
2328                                 return 'String';
2329                         }
2330                 },
2331
2332                 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
2333                 IsPropertyDescriptor: function IsPropertyDescriptor(Desc) {
2334                         if (this.Type(Desc) !== 'Object') {
2335                                 return false;
2336                         }
2337                         var allowed = {
2338                                 '[[Configurable]]': true,
2339                                 '[[Enumerable]]': true,
2340                                 '[[Get]]': true,
2341                                 '[[Set]]': true,
2342                                 '[[Value]]': true,
2343                                 '[[Writable]]': true
2344                         };
2345
2346                         for (var key in Desc) { // eslint-disable-line
2347                                 if (src(Desc, key) && !allowed[key]) {
2348                                         return false;
2349                                 }
2350                         }
2351
2352                         var isData = src(Desc, '[[Value]]');
2353                         var IsAccessor = src(Desc, '[[Get]]') || src(Desc, '[[Set]]');
2354                         if (isData && IsAccessor) {
2355                                 throw new $TypeError$1('Property Descriptors may not be both accessor and data descriptors');
2356                         }
2357                         return true;
2358                 },
2359
2360                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.1
2361                 IsAccessorDescriptor: function IsAccessorDescriptor(Desc) {
2362                         if (typeof Desc === 'undefined') {
2363                                 return false;
2364                         }
2365
2366                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2367
2368                         if (!src(Desc, '[[Get]]') && !src(Desc, '[[Set]]')) {
2369                                 return false;
2370                         }
2371
2372                         return true;
2373                 },
2374
2375                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.2
2376                 IsDataDescriptor: function IsDataDescriptor(Desc) {
2377                         if (typeof Desc === 'undefined') {
2378                                 return false;
2379                         }
2380
2381                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2382
2383                         if (!src(Desc, '[[Value]]') && !src(Desc, '[[Writable]]')) {
2384                                 return false;
2385                         }
2386
2387                         return true;
2388                 },
2389
2390                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.3
2391                 IsGenericDescriptor: function IsGenericDescriptor(Desc) {
2392                         if (typeof Desc === 'undefined') {
2393                                 return false;
2394                         }
2395
2396                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2397
2398                         if (!this.IsAccessorDescriptor(Desc) && !this.IsDataDescriptor(Desc)) {
2399                                 return true;
2400                         }
2401
2402                         return false;
2403                 },
2404
2405                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.4
2406                 FromPropertyDescriptor: function FromPropertyDescriptor(Desc) {
2407                         if (typeof Desc === 'undefined') {
2408                                 return Desc;
2409                         }
2410
2411                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2412
2413                         if (this.IsDataDescriptor(Desc)) {
2414                                 return {
2415                                         value: Desc['[[Value]]'],
2416                                         writable: !!Desc['[[Writable]]'],
2417                                         enumerable: !!Desc['[[Enumerable]]'],
2418                                         configurable: !!Desc['[[Configurable]]']
2419                                 };
2420                         } else if (this.IsAccessorDescriptor(Desc)) {
2421                                 return {
2422                                         get: Desc['[[Get]]'],
2423                                         set: Desc['[[Set]]'],
2424                                         enumerable: !!Desc['[[Enumerable]]'],
2425                                         configurable: !!Desc['[[Configurable]]']
2426                                 };
2427                         } else {
2428                                 throw new $TypeError$1('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
2429                         }
2430                 },
2431
2432                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
2433                 ToPropertyDescriptor: function ToPropertyDescriptor(Obj) {
2434                         if (this.Type(Obj) !== 'Object') {
2435                                 throw new $TypeError$1('ToPropertyDescriptor requires an object');
2436                         }
2437
2438                         var desc = {};
2439                         if (src(Obj, 'enumerable')) {
2440                                 desc['[[Enumerable]]'] = this.ToBoolean(Obj.enumerable);
2441                         }
2442                         if (src(Obj, 'configurable')) {
2443                                 desc['[[Configurable]]'] = this.ToBoolean(Obj.configurable);
2444                         }
2445                         if (src(Obj, 'value')) {
2446                                 desc['[[Value]]'] = Obj.value;
2447                         }
2448                         if (src(Obj, 'writable')) {
2449                                 desc['[[Writable]]'] = this.ToBoolean(Obj.writable);
2450                         }
2451                         if (src(Obj, 'get')) {
2452                                 var getter = Obj.get;
2453                                 if (typeof getter !== 'undefined' && !this.IsCallable(getter)) {
2454                                         throw new TypeError('getter must be a function');
2455                                 }
2456                                 desc['[[Get]]'] = getter;
2457                         }
2458                         if (src(Obj, 'set')) {
2459                                 var setter = Obj.set;
2460                                 if (typeof setter !== 'undefined' && !this.IsCallable(setter)) {
2461                                         throw new $TypeError$1('setter must be a function');
2462                                 }
2463                                 desc['[[Set]]'] = setter;
2464                         }
2465
2466                         if ((src(desc, '[[Get]]') || src(desc, '[[Set]]')) && (src(desc, '[[Value]]') || src(desc, '[[Writable]]'))) {
2467                                 throw new $TypeError$1('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
2468                         }
2469                         return desc;
2470                 }
2471         };
2472
2473         var es5$1 = ES5;
2474
2475         var regexExec = RegExp.prototype.exec;
2476         var gOPD = Object.getOwnPropertyDescriptor;
2477
2478         var tryRegexExecCall = function tryRegexExec(value) {
2479                 try {
2480                         var lastIndex = value.lastIndex;
2481                         value.lastIndex = 0;
2482
2483                         regexExec.call(value);
2484                         return true;
2485                 } catch (e) {
2486                         return false;
2487                 } finally {
2488                         value.lastIndex = lastIndex;
2489                 }
2490         };
2491         var toStr$7 = Object.prototype.toString;
2492         var regexClass = '[object RegExp]';
2493         var hasToStringTag$2 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2494
2495         var isRegex = function isRegex(value) {
2496                 if (!value || typeof value !== 'object') {
2497                         return false;
2498                 }
2499                 if (!hasToStringTag$2) {
2500                         return toStr$7.call(value) === regexClass;
2501                 }
2502
2503                 var descriptor = gOPD(value, 'lastIndex');
2504                 var hasLastIndexDataProperty = descriptor && src(descriptor, 'value');
2505                 if (!hasLastIndexDataProperty) {
2506                         return false;
2507                 }
2508
2509                 return tryRegexExecCall(value);
2510         };
2511
2512         var $TypeError$2 = GetIntrinsic('%TypeError%');
2513         var $SyntaxError$1 = GetIntrinsic('%SyntaxError%');
2514         var $Array = GetIntrinsic('%Array%');
2515         var $String$1 = GetIntrinsic('%String%');
2516         var $Object$1 = GetIntrinsic('%Object%');
2517         var $Number = GetIntrinsic('%Number%');
2518         var $Symbol = GetIntrinsic('%Symbol%', true);
2519         var $RegExp = GetIntrinsic('%RegExp%');
2520
2521         var hasSymbols$4 = !!$Symbol;
2522
2523
2524
2525
2526         var MAX_SAFE_INTEGER = $Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;
2527
2528
2529
2530
2531
2532         var parseInteger = parseInt;
2533
2534         var arraySlice = functionBind.call(Function.call, $Array.prototype.slice);
2535         var strSlice = functionBind.call(Function.call, $String$1.prototype.slice);
2536         var isBinary = functionBind.call(Function.call, $RegExp.prototype.test, /^0b[01]+$/i);
2537         var isOctal = functionBind.call(Function.call, $RegExp.prototype.test, /^0o[0-7]+$/i);
2538         var regexExec$1 = functionBind.call(Function.call, $RegExp.prototype.exec);
2539         var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
2540         var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
2541         var hasNonWS = functionBind.call(Function.call, $RegExp.prototype.test, nonWSregex);
2542         var invalidHexLiteral = /^[-+]0x[0-9a-f]+$/i;
2543         var isInvalidHexLiteral = functionBind.call(Function.call, $RegExp.prototype.test, invalidHexLiteral);
2544         var $charCodeAt = functionBind.call(Function.call, $String$1.prototype.charCodeAt);
2545
2546         var toStr$8 = functionBind.call(Function.call, Object.prototype.toString);
2547
2548         var $NumberValueOf = functionBind.call(Function.call, GetIntrinsic('%NumberPrototype%').valueOf);
2549         var $BooleanValueOf = functionBind.call(Function.call, GetIntrinsic('%BooleanPrototype%').valueOf);
2550         var $StringValueOf = functionBind.call(Function.call, GetIntrinsic('%StringPrototype%').valueOf);
2551         var $DateValueOf = functionBind.call(Function.call, GetIntrinsic('%DatePrototype%').valueOf);
2552
2553         var $floor = Math.floor;
2554         var $abs = Math.abs;
2555
2556         var $ObjectCreate = Object.create;
2557         var $gOPD = $Object$1.getOwnPropertyDescriptor;
2558
2559         var $isExtensible = $Object$1.isExtensible;
2560
2561         var $defineProperty = $Object$1.defineProperty;
2562
2563         // whitespace from: http://es5.github.io/#x15.5.4.20
2564         // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
2565         var ws = [
2566                 '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
2567                 '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
2568                 '\u2029\uFEFF'
2569         ].join('');
2570         var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
2571         var replace = functionBind.call(Function.call, $String$1.prototype.replace);
2572         var trim = function (value) {
2573                 return replace(value, trimRegex, '');
2574         };
2575
2576
2577
2578
2579
2580         // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-abstract-operations
2581         var ES6 = assign$1(assign$1({}, es5$1), {
2582
2583                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-call-f-v-args
2584                 Call: function Call(F, V) {
2585                         var args = arguments.length > 2 ? arguments[2] : [];
2586                         if (!this.IsCallable(F)) {
2587                                 throw new $TypeError$2(F + ' is not a function');
2588                         }
2589                         return F.apply(V, args);
2590                 },
2591
2592                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive
2593                 ToPrimitive: es6,
2594
2595                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toboolean
2596                 // ToBoolean: ES5.ToBoolean,
2597
2598                 // https://ecma-international.org/ecma-262/6.0/#sec-tonumber
2599                 ToNumber: function ToNumber(argument) {
2600                         var value = isPrimitive$1(argument) ? argument : es6(argument, $Number);
2601                         if (typeof value === 'symbol') {
2602                                 throw new $TypeError$2('Cannot convert a Symbol value to a number');
2603                         }
2604                         if (typeof value === 'string') {
2605                                 if (isBinary(value)) {
2606                                         return this.ToNumber(parseInteger(strSlice(value, 2), 2));
2607                                 } else if (isOctal(value)) {
2608                                         return this.ToNumber(parseInteger(strSlice(value, 2), 8));
2609                                 } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
2610                                         return NaN;
2611                                 } else {
2612                                         var trimmed = trim(value);
2613                                         if (trimmed !== value) {
2614                                                 return this.ToNumber(trimmed);
2615                                         }
2616                                 }
2617                         }
2618                         return $Number(value);
2619                 },
2620
2621                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tointeger
2622                 // ToInteger: ES5.ToNumber,
2623
2624                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint32
2625                 // ToInt32: ES5.ToInt32,
2626
2627                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint32
2628                 // ToUint32: ES5.ToUint32,
2629
2630                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint16
2631                 ToInt16: function ToInt16(argument) {
2632                         var int16bit = this.ToUint16(argument);
2633                         return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
2634                 },
2635
2636                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint16
2637                 // ToUint16: ES5.ToUint16,
2638
2639                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint8
2640                 ToInt8: function ToInt8(argument) {
2641                         var int8bit = this.ToUint8(argument);
2642                         return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
2643                 },
2644
2645                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8
2646                 ToUint8: function ToUint8(argument) {
2647                         var number = this.ToNumber(argument);
2648                         if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
2649                         var posInt = sign$1(number) * $floor($abs(number));
2650                         return mod(posInt, 0x100);
2651                 },
2652
2653                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8clamp
2654                 ToUint8Clamp: function ToUint8Clamp(argument) {
2655                         var number = this.ToNumber(argument);
2656                         if (_isNaN(number) || number <= 0) { return 0; }
2657                         if (number >= 0xFF) { return 0xFF; }
2658                         var f = $floor(argument);
2659                         if (f + 0.5 < number) { return f + 1; }
2660                         if (number < f + 0.5) { return f; }
2661                         if (f % 2 !== 0) { return f + 1; }
2662                         return f;
2663                 },
2664
2665                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tostring
2666                 ToString: function ToString(argument) {
2667                         if (typeof argument === 'symbol') {
2668                                 throw new $TypeError$2('Cannot convert a Symbol value to a string');
2669                         }
2670                         return $String$1(argument);
2671                 },
2672
2673                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toobject
2674                 ToObject: function ToObject(value) {
2675                         this.RequireObjectCoercible(value);
2676                         return $Object$1(value);
2677                 },
2678
2679                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-topropertykey
2680                 ToPropertyKey: function ToPropertyKey(argument) {
2681                         var key = this.ToPrimitive(argument, $String$1);
2682                         return typeof key === 'symbol' ? key : this.ToString(key);
2683                 },
2684
2685                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
2686                 ToLength: function ToLength(argument) {
2687                         var len = this.ToInteger(argument);
2688                         if (len <= 0) { return 0; } // includes converting -0 to +0
2689                         if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
2690                         return len;
2691                 },
2692
2693                 // https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
2694                 CanonicalNumericIndexString: function CanonicalNumericIndexString(argument) {
2695                         if (toStr$8(argument) !== '[object String]') {
2696                                 throw new $TypeError$2('must be a string');
2697                         }
2698                         if (argument === '-0') { return -0; }
2699                         var n = this.ToNumber(argument);
2700                         if (this.SameValue(this.ToString(n), argument)) { return n; }
2701                         return void 0;
2702                 },
2703
2704                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-requireobjectcoercible
2705                 RequireObjectCoercible: es5$1.CheckObjectCoercible,
2706
2707                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isarray
2708                 IsArray: $Array.isArray || function IsArray(argument) {
2709                         return toStr$8(argument) === '[object Array]';
2710                 },
2711
2712                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iscallable
2713                 // IsCallable: ES5.IsCallable,
2714
2715                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isconstructor
2716                 IsConstructor: function IsConstructor(argument) {
2717                         return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
2718                 },
2719
2720                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isextensible-o
2721                 IsExtensible: Object.preventExtensions
2722                         ? function IsExtensible(obj) {
2723                                 if (isPrimitive$1(obj)) {
2724                                         return false;
2725                                 }
2726                                 return $isExtensible(obj);
2727                         }
2728                         : function isExtensible(obj) { return true; }, // eslint-disable-line no-unused-vars
2729
2730                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isinteger
2731                 IsInteger: function IsInteger(argument) {
2732                         if (typeof argument !== 'number' || _isNaN(argument) || !_isFinite(argument)) {
2733                                 return false;
2734                         }
2735                         var abs = $abs(argument);
2736                         return $floor(abs) === abs;
2737                 },
2738
2739                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ispropertykey
2740                 IsPropertyKey: function IsPropertyKey(argument) {
2741                         return typeof argument === 'string' || typeof argument === 'symbol';
2742                 },
2743
2744                 // https://ecma-international.org/ecma-262/6.0/#sec-isregexp
2745                 IsRegExp: function IsRegExp(argument) {
2746                         if (!argument || typeof argument !== 'object') {
2747                                 return false;
2748                         }
2749                         if (hasSymbols$4) {
2750                                 var isRegExp = argument[$Symbol.match];
2751                                 if (typeof isRegExp !== 'undefined') {
2752                                         return es5$1.ToBoolean(isRegExp);
2753                                 }
2754                         }
2755                         return isRegex(argument);
2756                 },
2757
2758                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevalue
2759                 // SameValue: ES5.SameValue,
2760
2761                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero
2762                 SameValueZero: function SameValueZero(x, y) {
2763                         return (x === y) || (_isNaN(x) && _isNaN(y));
2764                 },
2765
2766                 /**
2767                  * 7.3.2 GetV (V, P)
2768                  * 1. Assert: IsPropertyKey(P) is true.
2769                  * 2. Let O be ToObject(V).
2770                  * 3. ReturnIfAbrupt(O).
2771                  * 4. Return O.[[Get]](P, V).
2772                  */
2773                 GetV: function GetV(V, P) {
2774                         // 7.3.2.1
2775                         if (!this.IsPropertyKey(P)) {
2776                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
2777                         }
2778
2779                         // 7.3.2.2-3
2780                         var O = this.ToObject(V);
2781
2782                         // 7.3.2.4
2783                         return O[P];
2784                 },
2785
2786                 /**
2787                  * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
2788                  * 1. Assert: IsPropertyKey(P) is true.
2789                  * 2. Let func be GetV(O, P).
2790                  * 3. ReturnIfAbrupt(func).
2791                  * 4. If func is either undefined or null, return undefined.
2792                  * 5. If IsCallable(func) is false, throw a TypeError exception.
2793                  * 6. Return func.
2794                  */
2795                 GetMethod: function GetMethod(O, P) {
2796                         // 7.3.9.1
2797                         if (!this.IsPropertyKey(P)) {
2798                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
2799                         }
2800
2801                         // 7.3.9.2
2802                         var func = this.GetV(O, P);
2803
2804                         // 7.3.9.4
2805                         if (func == null) {
2806                                 return void 0;
2807                         }
2808
2809                         // 7.3.9.5
2810                         if (!this.IsCallable(func)) {
2811                                 throw new $TypeError$2(P + 'is not a function');
2812                         }
2813
2814                         // 7.3.9.6
2815                         return func;
2816                 },
2817
2818                 /**
2819                  * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
2820                  * 1. Assert: Type(O) is Object.
2821                  * 2. Assert: IsPropertyKey(P) is true.
2822                  * 3. Return O.[[Get]](P, O).
2823                  */
2824                 Get: function Get(O, P) {
2825                         // 7.3.1.1
2826                         if (this.Type(O) !== 'Object') {
2827                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
2828                         }
2829                         // 7.3.1.2
2830                         if (!this.IsPropertyKey(P)) {
2831                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
2832                         }
2833                         // 7.3.1.3
2834                         return O[P];
2835                 },
2836
2837                 Type: function Type(x) {
2838                         if (typeof x === 'symbol') {
2839                                 return 'Symbol';
2840                         }
2841                         return es5$1.Type(x);
2842                 },
2843
2844                 // https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
2845                 SpeciesConstructor: function SpeciesConstructor(O, defaultConstructor) {
2846                         if (this.Type(O) !== 'Object') {
2847                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
2848                         }
2849                         var C = O.constructor;
2850                         if (typeof C === 'undefined') {
2851                                 return defaultConstructor;
2852                         }
2853                         if (this.Type(C) !== 'Object') {
2854                                 throw new $TypeError$2('O.constructor is not an Object');
2855                         }
2856                         var S = hasSymbols$4 && $Symbol.species ? C[$Symbol.species] : void 0;
2857                         if (S == null) {
2858                                 return defaultConstructor;
2859                         }
2860                         if (this.IsConstructor(S)) {
2861                                 return S;
2862                         }
2863                         throw new $TypeError$2('no constructor found');
2864                 },
2865
2866                 // https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
2867                 CompletePropertyDescriptor: function CompletePropertyDescriptor(Desc) {
2868                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2869
2870                         if (this.IsGenericDescriptor(Desc) || this.IsDataDescriptor(Desc)) {
2871                                 if (!src(Desc, '[[Value]]')) {
2872                                         Desc['[[Value]]'] = void 0;
2873                                 }
2874                                 if (!src(Desc, '[[Writable]]')) {
2875                                         Desc['[[Writable]]'] = false;
2876                                 }
2877                         } else {
2878                                 if (!src(Desc, '[[Get]]')) {
2879                                         Desc['[[Get]]'] = void 0;
2880                                 }
2881                                 if (!src(Desc, '[[Set]]')) {
2882                                         Desc['[[Set]]'] = void 0;
2883                                 }
2884                         }
2885                         if (!src(Desc, '[[Enumerable]]')) {
2886                                 Desc['[[Enumerable]]'] = false;
2887                         }
2888                         if (!src(Desc, '[[Configurable]]')) {
2889                                 Desc['[[Configurable]]'] = false;
2890                         }
2891                         return Desc;
2892                 },
2893
2894                 // https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
2895                 Set: function Set(O, P, V, Throw) {
2896                         if (this.Type(O) !== 'Object') {
2897                                 throw new $TypeError$2('O must be an Object');
2898                         }
2899                         if (!this.IsPropertyKey(P)) {
2900                                 throw new $TypeError$2('P must be a Property Key');
2901                         }
2902                         if (this.Type(Throw) !== 'Boolean') {
2903                                 throw new $TypeError$2('Throw must be a Boolean');
2904                         }
2905                         if (Throw) {
2906                                 O[P] = V;
2907                                 return true;
2908                         } else {
2909                                 try {
2910                                         O[P] = V;
2911                                 } catch (e) {
2912                                         return false;
2913                                 }
2914                         }
2915                 },
2916
2917                 // https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
2918                 HasOwnProperty: function HasOwnProperty(O, P) {
2919                         if (this.Type(O) !== 'Object') {
2920                                 throw new $TypeError$2('O must be an Object');
2921                         }
2922                         if (!this.IsPropertyKey(P)) {
2923                                 throw new $TypeError$2('P must be a Property Key');
2924                         }
2925                         return src(O, P);
2926                 },
2927
2928                 // https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
2929                 HasProperty: function HasProperty(O, P) {
2930                         if (this.Type(O) !== 'Object') {
2931                                 throw new $TypeError$2('O must be an Object');
2932                         }
2933                         if (!this.IsPropertyKey(P)) {
2934                                 throw new $TypeError$2('P must be a Property Key');
2935                         }
2936                         return P in O;
2937                 },
2938
2939                 // https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
2940                 IsConcatSpreadable: function IsConcatSpreadable(O) {
2941                         if (this.Type(O) !== 'Object') {
2942                                 return false;
2943                         }
2944                         if (hasSymbols$4 && typeof $Symbol.isConcatSpreadable === 'symbol') {
2945                                 var spreadable = this.Get(O, Symbol.isConcatSpreadable);
2946                                 if (typeof spreadable !== 'undefined') {
2947                                         return this.ToBoolean(spreadable);
2948                                 }
2949                         }
2950                         return this.IsArray(O);
2951                 },
2952
2953                 // https://ecma-international.org/ecma-262/6.0/#sec-invoke
2954                 Invoke: function Invoke(O, P) {
2955                         if (!this.IsPropertyKey(P)) {
2956                                 throw new $TypeError$2('P must be a Property Key');
2957                         }
2958                         var argumentsList = arraySlice(arguments, 2);
2959                         var func = this.GetV(O, P);
2960                         return this.Call(func, O, argumentsList);
2961                 },
2962
2963                 // https://ecma-international.org/ecma-262/6.0/#sec-getiterator
2964                 GetIterator: function GetIterator(obj, method) {
2965                         if (!hasSymbols$4) {
2966                                 throw new SyntaxError('ES.GetIterator depends on native iterator support.');
2967                         }
2968
2969                         var actualMethod = method;
2970                         if (arguments.length < 2) {
2971                                 actualMethod = this.GetMethod(obj, $Symbol.iterator);
2972                         }
2973                         var iterator = this.Call(actualMethod, obj);
2974                         if (this.Type(iterator) !== 'Object') {
2975                                 throw new $TypeError$2('iterator must return an object');
2976                         }
2977
2978                         return iterator;
2979                 },
2980
2981                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
2982                 IteratorNext: function IteratorNext(iterator, value) {
2983                         var result = this.Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
2984                         if (this.Type(result) !== 'Object') {
2985                                 throw new $TypeError$2('iterator next must return an object');
2986                         }
2987                         return result;
2988                 },
2989
2990                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
2991                 IteratorComplete: function IteratorComplete(iterResult) {
2992                         if (this.Type(iterResult) !== 'Object') {
2993                                 throw new $TypeError$2('Assertion failed: Type(iterResult) is not Object');
2994                         }
2995                         return this.ToBoolean(this.Get(iterResult, 'done'));
2996                 },
2997
2998                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
2999                 IteratorValue: function IteratorValue(iterResult) {
3000                         if (this.Type(iterResult) !== 'Object') {
3001                                 throw new $TypeError$2('Assertion failed: Type(iterResult) is not Object');
3002                         }
3003                         return this.Get(iterResult, 'value');
3004                 },
3005
3006                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
3007                 IteratorStep: function IteratorStep(iterator) {
3008                         var result = this.IteratorNext(iterator);
3009                         var done = this.IteratorComplete(result);
3010                         return done === true ? false : result;
3011                 },
3012
3013                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
3014                 IteratorClose: function IteratorClose(iterator, completion) {
3015                         if (this.Type(iterator) !== 'Object') {
3016                                 throw new $TypeError$2('Assertion failed: Type(iterator) is not Object');
3017                         }
3018                         if (!this.IsCallable(completion)) {
3019                                 throw new $TypeError$2('Assertion failed: completion is not a thunk for a Completion Record');
3020                         }
3021                         var completionThunk = completion;
3022
3023                         var iteratorReturn = this.GetMethod(iterator, 'return');
3024
3025                         if (typeof iteratorReturn === 'undefined') {
3026                                 return completionThunk();
3027                         }
3028
3029                         var completionRecord;
3030                         try {
3031                                 var innerResult = this.Call(iteratorReturn, iterator, []);
3032                         } catch (e) {
3033                                 // if we hit here, then "e" is the innerResult completion that needs re-throwing
3034
3035                                 // if the completion is of type "throw", this will throw.
3036                                 completionRecord = completionThunk();
3037                                 completionThunk = null; // ensure it's not called twice.
3038
3039                                 // if not, then return the innerResult completion
3040                                 throw e;
3041                         }
3042                         completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
3043                         completionThunk = null; // ensure it's not called twice.
3044
3045                         if (this.Type(innerResult) !== 'Object') {
3046                                 throw new $TypeError$2('iterator .return must return an object');
3047                         }
3048
3049                         return completionRecord;
3050                 },
3051
3052                 // https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
3053                 CreateIterResultObject: function CreateIterResultObject(value, done) {
3054                         if (this.Type(done) !== 'Boolean') {
3055                                 throw new $TypeError$2('Assertion failed: Type(done) is not Boolean');
3056                         }
3057                         return {
3058                                 value: value,
3059                                 done: done
3060                         };
3061                 },
3062
3063                 // https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
3064                 RegExpExec: function RegExpExec(R, S) {
3065                         if (this.Type(R) !== 'Object') {
3066                                 throw new $TypeError$2('R must be an Object');
3067                         }
3068                         if (this.Type(S) !== 'String') {
3069                                 throw new $TypeError$2('S must be a String');
3070                         }
3071                         var exec = this.Get(R, 'exec');
3072                         if (this.IsCallable(exec)) {
3073                                 var result = this.Call(exec, R, [S]);
3074                                 if (result === null || this.Type(result) === 'Object') {
3075                                         return result;
3076                                 }
3077                                 throw new $TypeError$2('"exec" method must return `null` or an Object');
3078                         }
3079                         return regexExec$1(R, S);
3080                 },
3081
3082                 // https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
3083                 ArraySpeciesCreate: function ArraySpeciesCreate(originalArray, length) {
3084                         if (!this.IsInteger(length) || length < 0) {
3085                                 throw new $TypeError$2('Assertion failed: length must be an integer >= 0');
3086                         }
3087                         var len = length === 0 ? 0 : length;
3088                         var C;
3089                         var isArray = this.IsArray(originalArray);
3090                         if (isArray) {
3091                                 C = this.Get(originalArray, 'constructor');
3092                                 // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
3093                                 // if (this.IsConstructor(C)) {
3094                                 //      if C is another realm's Array, C = undefined
3095                                 //      Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
3096                                 // }
3097                                 if (this.Type(C) === 'Object' && hasSymbols$4 && $Symbol.species) {
3098                                         C = this.Get(C, $Symbol.species);
3099                                         if (C === null) {
3100                                                 C = void 0;
3101                                         }
3102                                 }
3103                         }
3104                         if (typeof C === 'undefined') {
3105                                 return $Array(len);
3106                         }
3107                         if (!this.IsConstructor(C)) {
3108                                 throw new $TypeError$2('C must be a constructor');
3109                         }
3110                         return new C(len); // this.Construct(C, len);
3111                 },
3112
3113                 CreateDataProperty: function CreateDataProperty(O, P, V) {
3114                         if (this.Type(O) !== 'Object') {
3115                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3116                         }
3117                         if (!this.IsPropertyKey(P)) {
3118                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3119                         }
3120                         var oldDesc = $gOPD(O, P);
3121                         var extensible = oldDesc || (typeof $isExtensible !== 'function' || $isExtensible(O));
3122                         var immutable = oldDesc && (!oldDesc.writable || !oldDesc.configurable);
3123                         if (immutable || !extensible) {
3124                                 return false;
3125                         }
3126                         var newDesc = {
3127                                 configurable: true,
3128                                 enumerable: true,
3129                                 value: V,
3130                                 writable: true
3131                         };
3132                         $defineProperty(O, P, newDesc);
3133                         return true;
3134                 },
3135
3136                 // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
3137                 CreateDataPropertyOrThrow: function CreateDataPropertyOrThrow(O, P, V) {
3138                         if (this.Type(O) !== 'Object') {
3139                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3140                         }
3141                         if (!this.IsPropertyKey(P)) {
3142                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3143                         }
3144                         var success = this.CreateDataProperty(O, P, V);
3145                         if (!success) {
3146                                 throw new $TypeError$2('unable to create data property');
3147                         }
3148                         return success;
3149                 },
3150
3151                 // https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
3152                 ObjectCreate: function ObjectCreate(proto, internalSlotsList) {
3153                         if (proto !== null && this.Type(proto) !== 'Object') {
3154                                 throw new $TypeError$2('Assertion failed: proto must be null or an object');
3155                         }
3156                         var slots = arguments.length < 2 ? [] : internalSlotsList;
3157                         if (slots.length > 0) {
3158                                 throw new $SyntaxError$1('es-abstract does not yet support internal slots');
3159                         }
3160
3161                         if (proto === null && !$ObjectCreate) {
3162                                 throw new $SyntaxError$1('native Object.create support is required to create null objects');
3163                         }
3164
3165                         return $ObjectCreate(proto);
3166                 },
3167
3168                 // https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
3169                 AdvanceStringIndex: function AdvanceStringIndex(S, index, unicode) {
3170                         if (this.Type(S) !== 'String') {
3171                                 throw new $TypeError$2('S must be a String');
3172                         }
3173                         if (!this.IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
3174                                 throw new $TypeError$2('Assertion failed: length must be an integer >= 0 and <= 2**53');
3175                         }
3176                         if (this.Type(unicode) !== 'Boolean') {
3177                                 throw new $TypeError$2('Assertion failed: unicode must be a Boolean');
3178                         }
3179                         if (!unicode) {
3180                                 return index + 1;
3181                         }
3182                         var length = S.length;
3183                         if ((index + 1) >= length) {
3184                                 return index + 1;
3185                         }
3186
3187                         var first = $charCodeAt(S, index);
3188                         if (first < 0xD800 || first > 0xDBFF) {
3189                                 return index + 1;
3190                         }
3191
3192                         var second = $charCodeAt(S, index + 1);
3193                         if (second < 0xDC00 || second > 0xDFFF) {
3194                                 return index + 1;
3195                         }
3196
3197                         return index + 2;
3198                 },
3199
3200                 // https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
3201                 CreateMethodProperty: function CreateMethodProperty(O, P, V) {
3202                         if (this.Type(O) !== 'Object') {
3203                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3204                         }
3205
3206                         if (!this.IsPropertyKey(P)) {
3207                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3208                         }
3209
3210                         var newDesc = {
3211                                 configurable: true,
3212                                 enumerable: false,
3213                                 value: V,
3214                                 writable: true
3215                         };
3216                         return !!$defineProperty(O, P, newDesc);
3217                 },
3218
3219                 // https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
3220                 DefinePropertyOrThrow: function DefinePropertyOrThrow(O, P, desc) {
3221                         if (this.Type(O) !== 'Object') {
3222                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3223                         }
3224
3225                         if (!this.IsPropertyKey(P)) {
3226                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3227                         }
3228
3229                         return !!$defineProperty(O, P, desc);
3230                 },
3231
3232                 // https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
3233                 DeletePropertyOrThrow: function DeletePropertyOrThrow(O, P) {
3234                         if (this.Type(O) !== 'Object') {
3235                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3236                         }
3237
3238                         if (!this.IsPropertyKey(P)) {
3239                                 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3240                         }
3241
3242                         var success = delete O[P];
3243                         if (!success) {
3244                                 throw new TypeError('Attempt to delete property failed.');
3245                         }
3246                         return success;
3247                 },
3248
3249                 // https://www.ecma-international.org/ecma-262/6.0/#sec-enumerableownnames
3250                 EnumerableOwnNames: function EnumerableOwnNames(O) {
3251                         if (this.Type(O) !== 'Object') {
3252                                 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3253                         }
3254
3255                         return objectKeys(O);
3256                 },
3257
3258                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
3259                 thisNumberValue: function thisNumberValue(value) {
3260                         if (this.Type(value) === 'Number') {
3261                                 return value;
3262                         }
3263
3264                         return $NumberValueOf(value);
3265                 },
3266
3267                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
3268                 thisBooleanValue: function thisBooleanValue(value) {
3269                         if (this.Type(value) === 'Boolean') {
3270                                 return value;
3271                         }
3272
3273                         return $BooleanValueOf(value);
3274                 },
3275
3276                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
3277                 thisStringValue: function thisStringValue(value) {
3278                         if (this.Type(value) === 'String') {
3279                                 return value;
3280                         }
3281
3282                         return $StringValueOf(value);
3283                 },
3284
3285                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
3286                 thisTimeValue: function thisTimeValue(value) {
3287                         return $DateValueOf(value);
3288                 }
3289         });
3290
3291         delete ES6.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible
3292
3293         var es2015$1 = ES6;
3294
3295         var es6$1 = es2015$1;
3296
3297         var implementation$2 = function find(predicate) {
3298                 var list = es6$1.ToObject(this);
3299                 var length = es6$1.ToInteger(es6$1.ToLength(list.length));
3300                 if (!es6$1.IsCallable(predicate)) {
3301                         throw new TypeError('Array#find: predicate must be a function');
3302                 }
3303                 if (length === 0) {
3304                         return undefined;
3305                 }
3306                 var thisArg = arguments[1];
3307                 for (var i = 0, value; i < length; i++) {
3308                         value = list[i];
3309                         if (es6$1.Call(predicate, thisArg, [value, i, list])) {
3310                                 return value;
3311                         }
3312                 }
3313                 return undefined;
3314         };
3315
3316         var polyfill$3 = function getPolyfill() {
3317                 // Detect if an implementation exists
3318                 // Detect early implementations which skipped holes in sparse arrays
3319           // eslint-disable-next-line no-sparse-arrays
3320                 var implemented = Array.prototype.find && [, 1].find(function () {
3321                         return true;
3322                 }) !== 1;
3323
3324           // eslint-disable-next-line global-require
3325                 return implemented ? Array.prototype.find : implementation$2;
3326         };
3327
3328         var shim$8 = function shimArrayPrototypeFind() {
3329                 var polyfill = polyfill$3();
3330
3331                 defineProperties_1(Array.prototype, { find: polyfill }, {
3332                         find: function () {
3333                                 return Array.prototype.find !== polyfill;
3334                         }
3335                 });
3336
3337                 return polyfill;
3338         };
3339
3340         var slice$2 = Array.prototype.slice;
3341
3342         var polyfill$4 = polyfill$3();
3343
3344         var boundFindShim = function find(array, predicate) { // eslint-disable-line no-unused-vars
3345                 es6$1.RequireObjectCoercible(array);
3346                 var args = slice$2.call(arguments, 1);
3347                 return polyfill$4.apply(array, args);
3348         };
3349
3350         defineProperties_1(boundFindShim, {
3351                 getPolyfill: polyfill$3,
3352                 implementation: implementation$2,
3353                 shim: shim$8
3354         });
3355
3356         var array_prototype_find = boundFindShim;
3357
3358         var implementation$3 = function findIndex(predicate) {
3359                 var list = es6$1.ToObject(this);
3360                 var length = es6$1.ToLength(list.length);
3361                 if (!es6$1.IsCallable(predicate)) {
3362                         throw new TypeError('Array#findIndex: predicate must be a function');
3363                 }
3364                 if (length === 0) return -1;
3365                 var thisArg = arguments[1];
3366                 for (var i = 0, value; i < length; i++) {
3367                         value = list[i];
3368                         if (es6$1.Call(predicate, thisArg, [value, i, list])) return i;
3369                 }
3370                 return -1;
3371         };
3372
3373         var polyfill$5 = function getPolyfill() {
3374                 // Detect if an implementation exists
3375                 // Detect early implementations which skipped holes in sparse arrays
3376                 var implemented = Array.prototype.findIndex && ([, 1].findIndex(function (item, idx) {
3377                         return idx === 0;
3378                 }) === 0);
3379
3380
3381                 return implemented ? Array.prototype.findIndex : implementation$3;
3382         };
3383
3384         var shim$9 = function shimArrayPrototypeFindIndex() {
3385                 var polyfill = polyfill$5();
3386
3387                 defineProperties_1(Array.prototype, { findIndex: polyfill }, {
3388                         findIndex: function () {
3389                                 return Array.prototype.findIndex !== polyfill;
3390                         }
3391                 });
3392
3393                 return polyfill;
3394         };
3395
3396         var slice$3 = Array.prototype.slice;
3397
3398         var polyfill$6 = polyfill$5();
3399
3400         var boundShim = function findIndex(array, predicate) {
3401                 es6$1.RequireObjectCoercible(array);
3402                 var args = slice$3.call(arguments, 1);
3403                 return polyfill$6.apply(array, args);
3404         };
3405
3406         defineProperties_1(boundShim, {
3407                 implementation: implementation$3,
3408                 getPolyfill: polyfill$5,
3409                 shim: shim$9
3410         });
3411
3412         var array_prototype_findindex = boundShim;
3413
3414         var supportsDescriptors$1 = defineProperties_1.supportsDescriptors;
3415
3416         /*! https://mths.be/array-from v0.2.0 by @mathias */
3417         var implementation$4 = function from(arrayLike) {
3418                 var defineProperty = supportsDescriptors$1 ? Object.defineProperty : function put(object, key, descriptor) {
3419                         object[key] = descriptor.value;
3420                 };
3421                 var C = this;
3422                 if (arrayLike === null || typeof arrayLike === 'undefined') {
3423                         throw new TypeError('`Array.from` requires an array-like object, not `null` or `undefined`');
3424                 }
3425                 var items = es6$1.ToObject(arrayLike);
3426
3427                 var mapFn, T;
3428                 if (typeof arguments[1] !== 'undefined') {
3429                         mapFn = arguments[1];
3430                         if (!es6$1.IsCallable(mapFn)) {
3431                                 throw new TypeError('When provided, the second argument to `Array.from` must be a function');
3432                         }
3433                         if (arguments.length > 2) {
3434                                 T = arguments[2];
3435                         }
3436                 }
3437
3438                 var len = es6$1.ToLength(items.length);
3439                 var A = es6$1.IsCallable(C) ? es6$1.ToObject(new C(len)) : new Array(len);
3440                 var k = 0;
3441                 var kValue, mappedValue;
3442                 while (k < len) {
3443                         kValue = items[k];
3444                         if (mapFn) {
3445                                 mappedValue = typeof T === 'undefined' ? mapFn(kValue, k) : es6$1.Call(mapFn, T, [kValue, k]);
3446                         } else {
3447                                 mappedValue = kValue;
3448                         }
3449                         defineProperty(A, k, {
3450                                 'configurable': true,
3451                                 'enumerable': true,
3452                                 'value': mappedValue,
3453                                 'writable': true
3454                         });
3455                         k += 1;
3456                 }
3457                 A.length = len;
3458                 return A;
3459         };
3460
3461         var tryCall = function (fn) {
3462                 try {
3463                         fn();
3464                         return true;
3465                 } catch (e) {
3466                         return false;
3467                 }
3468         };
3469
3470         var polyfill$7 = function getPolyfill() {
3471                 var implemented = es6$1.IsCallable(Array.from)
3472                         && tryCall(function () { Array.from({ 'length': -Infinity }); })
3473                         && !tryCall(function () { Array.from([], undefined); });
3474
3475                 return implemented ? Array.from : implementation$4;
3476         };
3477
3478         var shim$a = function shimArrayFrom() {
3479                 var polyfill = polyfill$7();
3480
3481                 defineProperties_1(Array, { 'from': polyfill }, {
3482                         'from': function () {
3483                                 return Array.from !== polyfill;
3484                         }
3485                 });
3486
3487                 return polyfill;
3488         };
3489
3490         // eslint-disable-next-line no-unused-vars
3491         var boundFromShim = function from(array) {
3492             // eslint-disable-next-line no-invalid-this
3493                 return implementation$4.apply(this || Array, arguments);
3494         };
3495
3496         defineProperties_1(boundFromShim, {
3497                 'getPolyfill': polyfill$7,
3498                 'implementation': implementation$4,
3499                 'shim': shim$a
3500         });
3501
3502         var array_from = boundFromShim;
3503
3504         var ES2016 = assign$1(assign$1({}, es2015$1), {
3505                 // https://github.com/tc39/ecma262/pull/60
3506                 SameValueNonNumber: function SameValueNonNumber(x, y) {
3507                         if (typeof x === 'number' || typeof x !== typeof y) {
3508                                 throw new TypeError('SameValueNonNumber requires two non-number values of the same type.');
3509                         }
3510                         return this.SameValue(x, y);
3511                 }
3512         });
3513
3514         var es2016 = ES2016;
3515
3516         var es7 = es2016;
3517
3518         var isEnumerable$1 = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
3519
3520         var implementation$5 = function values(O) {
3521                 var obj = es7.RequireObjectCoercible(O);
3522                 var vals = [];
3523                 for (var key in obj) {
3524                         if (src(obj, key) && isEnumerable$1(obj, key)) {
3525                                 vals.push(obj[key]);
3526                         }
3527                 }
3528                 return vals;
3529         };
3530
3531         var polyfill$8 = function getPolyfill() {
3532                 return typeof Object.values === 'function' ? Object.values : implementation$5;
3533         };
3534
3535         var shim$b = function shimValues() {
3536                 var polyfill = polyfill$8();
3537                 defineProperties_1(Object, { values: polyfill }, {
3538                         values: function testValues() {
3539                                 return Object.values !== polyfill;
3540                         }
3541                 });
3542                 return polyfill;
3543         };
3544
3545         var polyfill$9 = polyfill$8();
3546
3547         defineProperties_1(polyfill$9, {
3548                 getPolyfill: polyfill$8,
3549                 implementation: implementation$5,
3550                 shim: shim$b
3551         });
3552
3553         var object_values = polyfill$9;
3554
3555         // modified from https://github.com/es-shims/es6-shim
3556
3557
3558         var canBeObject = function (obj) {
3559                 return typeof obj !== 'undefined' && obj !== null;
3560         };
3561         var hasSymbols$5 = shams();
3562         var toObject = Object;
3563         var push = functionBind.call(Function.call, Array.prototype.push);
3564         var propIsEnumerable = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
3565         var originalGetSymbols = hasSymbols$5 ? Object.getOwnPropertySymbols : null;
3566
3567         var implementation$6 = function assign(target, source1) {
3568                 if (!canBeObject(target)) { throw new TypeError('target must be an object'); }
3569                 var objTarget = toObject(target);
3570                 var s, source, i, props, syms, value, key;
3571                 for (s = 1; s < arguments.length; ++s) {
3572                         source = toObject(arguments[s]);
3573                         props = objectKeys(source);
3574                         var getSymbols = hasSymbols$5 && (Object.getOwnPropertySymbols || originalGetSymbols);
3575                         if (getSymbols) {
3576                                 syms = getSymbols(source);
3577                                 for (i = 0; i < syms.length; ++i) {
3578                                         key = syms[i];
3579                                         if (propIsEnumerable(source, key)) {
3580                                                 push(props, key);
3581                                         }
3582                                 }
3583                         }
3584                         for (i = 0; i < props.length; ++i) {
3585                                 key = props[i];
3586                                 value = source[key];
3587                                 if (propIsEnumerable(source, key)) {
3588                                         objTarget[key] = value;
3589                                 }
3590                         }
3591                 }
3592                 return objTarget;
3593         };
3594
3595         var lacksProperEnumerationOrder = function () {
3596                 if (!Object.assign) {
3597                         return false;
3598                 }
3599                 // v8, specifically in node 4.x, has a bug with incorrect property enumeration order
3600                 // note: this does not detect the bug unless there's 20 characters
3601                 var str = 'abcdefghijklmnopqrst';
3602                 var letters = str.split('');
3603                 var map = {};
3604                 for (var i = 0; i < letters.length; ++i) {
3605                         map[letters[i]] = letters[i];
3606                 }
3607                 var obj = Object.assign({}, map);
3608                 var actual = '';
3609                 for (var k in obj) {
3610                         actual += k;
3611                 }
3612                 return str !== actual;
3613         };
3614
3615         var assignHasPendingExceptions = function () {
3616                 if (!Object.assign || !Object.preventExtensions) {
3617                         return false;
3618                 }
3619                 // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
3620                 // which is 72% slower than our shim, and Firefox 40's native implementation.
3621                 var thrower = Object.preventExtensions({ 1: 2 });
3622                 try {
3623                         Object.assign(thrower, 'xy');
3624                 } catch (e) {
3625                         return thrower[1] === 'y';
3626                 }
3627                 return false;
3628         };
3629
3630         var polyfill$a = function getPolyfill() {
3631                 if (!Object.assign) {
3632                         return implementation$6;
3633                 }
3634                 if (lacksProperEnumerationOrder()) {
3635                         return implementation$6;
3636                 }
3637                 if (assignHasPendingExceptions()) {
3638                         return implementation$6;
3639                 }
3640                 return Object.assign;
3641         };
3642
3643         var shim$c = function shimAssign() {
3644                 var polyfill = polyfill$a();
3645                 defineProperties_1(
3646                         Object,
3647                         { assign: polyfill },
3648                         { assign: function () { return Object.assign !== polyfill; } }
3649                 );
3650                 return polyfill;
3651         };
3652
3653         var polyfill$b = polyfill$a();
3654
3655         defineProperties_1(polyfill$b, {
3656                 getPolyfill: polyfill$a,
3657                 implementation: implementation$6,
3658                 shim: shim$c
3659         });
3660
3661         var object_assign = polyfill$b;
3662
3663         /**
3664          * @this {Promise}
3665          */
3666         function finallyConstructor(callback) {
3667           var constructor = this.constructor;
3668           return this.then(
3669             function(value) {
3670               return constructor.resolve(callback()).then(function() {
3671                 return value;
3672               });
3673             },
3674             function(reason) {
3675               return constructor.resolve(callback()).then(function() {
3676                 return constructor.reject(reason);
3677               });
3678             }
3679           );
3680         }
3681
3682         // Store setTimeout reference so promise-polyfill will be unaffected by
3683         // other code modifying setTimeout (like sinon.useFakeTimers())
3684         var setTimeoutFunc = setTimeout;
3685
3686         function noop$1() {}
3687
3688         // Polyfill for Function.prototype.bind
3689         function bind$2(fn, thisArg) {
3690           return function() {
3691             fn.apply(thisArg, arguments);
3692           };
3693         }
3694
3695         /**
3696          * @constructor
3697          * @param {Function} fn
3698          */
3699         function Promise$1(fn) {
3700           if (!(this instanceof Promise$1))
3701             throw new TypeError('Promises must be constructed via new');
3702           if (typeof fn !== 'function') throw new TypeError('not a function');
3703           /** @type {!number} */
3704           this._state = 0;
3705           /** @type {!boolean} */
3706           this._handled = false;
3707           /** @type {Promise|undefined} */
3708           this._value = undefined;
3709           /** @type {!Array<!Function>} */
3710           this._deferreds = [];
3711
3712           doResolve(fn, this);
3713         }
3714
3715         function handle(self, deferred) {
3716           while (self._state === 3) {
3717             self = self._value;
3718           }
3719           if (self._state === 0) {
3720             self._deferreds.push(deferred);
3721             return;
3722           }
3723           self._handled = true;
3724           Promise$1._immediateFn(function() {
3725             var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
3726             if (cb === null) {
3727               (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
3728               return;
3729             }
3730             var ret;
3731             try {
3732               ret = cb(self._value);
3733             } catch (e) {
3734               reject(deferred.promise, e);
3735               return;
3736             }
3737             resolve(deferred.promise, ret);
3738           });
3739         }
3740
3741         function resolve(self, newValue) {
3742           try {
3743             // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
3744             if (newValue === self)
3745               throw new TypeError('A promise cannot be resolved with itself.');
3746             if (
3747               newValue &&
3748               (typeof newValue === 'object' || typeof newValue === 'function')
3749             ) {
3750               var then = newValue.then;
3751               if (newValue instanceof Promise$1) {
3752                 self._state = 3;
3753                 self._value = newValue;
3754                 finale(self);
3755                 return;
3756               } else if (typeof then === 'function') {
3757                 doResolve(bind$2(then, newValue), self);
3758                 return;
3759               }
3760             }
3761             self._state = 1;
3762             self._value = newValue;
3763             finale(self);
3764           } catch (e) {
3765             reject(self, e);
3766           }
3767         }
3768
3769         function reject(self, newValue) {
3770           self._state = 2;
3771           self._value = newValue;
3772           finale(self);
3773         }
3774
3775         function finale(self) {
3776           if (self._state === 2 && self._deferreds.length === 0) {
3777             Promise$1._immediateFn(function() {
3778               if (!self._handled) {
3779                 Promise$1._unhandledRejectionFn(self._value);
3780               }
3781             });
3782           }
3783
3784           for (var i = 0, len = self._deferreds.length; i < len; i++) {
3785             handle(self, self._deferreds[i]);
3786           }
3787           self._deferreds = null;
3788         }
3789
3790         /**
3791          * @constructor
3792          */
3793         function Handler(onFulfilled, onRejected, promise) {
3794           this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
3795           this.onRejected = typeof onRejected === 'function' ? onRejected : null;
3796           this.promise = promise;
3797         }
3798
3799         /**
3800          * Take a potentially misbehaving resolver function and make sure
3801          * onFulfilled and onRejected are only called once.
3802          *
3803          * Makes no guarantees about asynchrony.
3804          */
3805         function doResolve(fn, self) {
3806           var done = false;
3807           try {
3808             fn(
3809               function(value) {
3810                 if (done) return;
3811                 done = true;
3812                 resolve(self, value);
3813               },
3814               function(reason) {
3815                 if (done) return;
3816                 done = true;
3817                 reject(self, reason);
3818               }
3819             );
3820           } catch (ex) {
3821             if (done) return;
3822             done = true;
3823             reject(self, ex);
3824           }
3825         }
3826
3827         Promise$1.prototype['catch'] = function(onRejected) {
3828           return this.then(null, onRejected);
3829         };
3830
3831         Promise$1.prototype.then = function(onFulfilled, onRejected) {
3832           // @ts-ignore
3833           var prom = new this.constructor(noop$1);
3834
3835           handle(this, new Handler(onFulfilled, onRejected, prom));
3836           return prom;
3837         };
3838
3839         Promise$1.prototype['finally'] = finallyConstructor;
3840
3841         Promise$1.all = function(arr) {
3842           return new Promise$1(function(resolve, reject) {
3843             if (!arr || typeof arr.length === 'undefined')
3844               throw new TypeError('Promise.all accepts an array');
3845             var args = Array.prototype.slice.call(arr);
3846             if (args.length === 0) return resolve([]);
3847             var remaining = args.length;
3848
3849             function res(i, val) {
3850               try {
3851                 if (val && (typeof val === 'object' || typeof val === 'function')) {
3852                   var then = val.then;
3853                   if (typeof then === 'function') {
3854                     then.call(
3855                       val,
3856                       function(val) {
3857                         res(i, val);
3858                       },
3859                       reject
3860                     );
3861                     return;
3862                   }
3863                 }
3864                 args[i] = val;
3865                 if (--remaining === 0) {
3866                   resolve(args);
3867                 }
3868               } catch (ex) {
3869                 reject(ex);
3870               }
3871             }
3872
3873             for (var i = 0; i < args.length; i++) {
3874               res(i, args[i]);
3875             }
3876           });
3877         };
3878
3879         Promise$1.resolve = function(value) {
3880           if (value && typeof value === 'object' && value.constructor === Promise$1) {
3881             return value;
3882           }
3883
3884           return new Promise$1(function(resolve) {
3885             resolve(value);
3886           });
3887         };
3888
3889         Promise$1.reject = function(value) {
3890           return new Promise$1(function(resolve, reject) {
3891             reject(value);
3892           });
3893         };
3894
3895         Promise$1.race = function(values) {
3896           return new Promise$1(function(resolve, reject) {
3897             for (var i = 0, len = values.length; i < len; i++) {
3898               values[i].then(resolve, reject);
3899             }
3900           });
3901         };
3902
3903         // Use polyfill for setImmediate for performance gains
3904         Promise$1._immediateFn =
3905           (typeof setImmediate === 'function' &&
3906             function(fn) {
3907               setImmediate(fn);
3908             }) ||
3909           function(fn) {
3910             setTimeoutFunc(fn, 0);
3911           };
3912
3913         Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) {
3914           if (typeof console !== 'undefined' && console) {
3915             console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
3916           }
3917         };
3918
3919         /** @suppress {undefinedVars} */
3920         var globalNS = (function() {
3921           // the only reliable means to get the global object is
3922           // `Function('return this')()`
3923           // However, this causes CSP violations in Chrome apps.
3924           if (typeof self !== 'undefined') {
3925             return self;
3926           }
3927           if (typeof window !== 'undefined') {
3928             return window;
3929           }
3930           if (typeof global !== 'undefined') {
3931             return global;
3932           }
3933           throw new Error('unable to locate global object');
3934         })();
3935
3936         if (!('Promise' in globalNS)) {
3937           globalNS['Promise'] = Promise$1;
3938         } else if (!globalNS.Promise.prototype['finally']) {
3939           globalNS.Promise.prototype['finally'] = finallyConstructor;
3940         }
3941
3942         var polyfill$c = /*#__PURE__*/Object.freeze({
3943
3944         });
3945
3946         var setAsap = createCommonjsModule(function (module) {
3947         (function (thisVar, undefined$1) {
3948                 var main = (typeof window === 'object' && window) || (typeof commonjsGlobal === 'object' && commonjsGlobal) ||
3949                         typeof self === 'object' && self || thisVar;
3950
3951                 var hasSetImmediate = typeof setImmediate === 'function';
3952                 var hasNextTick = typeof process === 'object' && !!process && typeof process.nextTick === 'function';
3953                 var index = 0;
3954
3955                 function getNewIndex() {
3956                         if (index === 9007199254740991) {
3957                                 return 0;
3958                         }
3959                         return ++index;
3960                 }
3961
3962                 var setAsap = (function () {
3963                         var hiddenDiv, scriptEl, timeoutFn, callbacks;
3964
3965                         // Modern browsers, fastest async
3966                         if (main.MutationObserver) {
3967                                 return function setAsap(callback) {
3968                                         hiddenDiv = document.createElement("div");
3969                                         (new MutationObserver(function() {
3970                                                 callback();
3971                                                 hiddenDiv = null;
3972                                         })).observe(hiddenDiv, { attributes: true });
3973                                         hiddenDiv.setAttribute('i', '1');
3974                                 };
3975
3976                         // Browsers that support postMessage
3977                         } else if (!hasSetImmediate && main.postMessage && !main.importScripts && main.addEventListener) {
3978
3979                                 var MESSAGE_PREFIX = "com.setImmediate" + Math.random();
3980                                 callbacks = {};
3981
3982                                 var onGlobalMessage = function (event) {
3983                                         if (event.source === main && event.data.indexOf(MESSAGE_PREFIX) === 0) {
3984                                                 var i = +event.data.split(':')[1];
3985                                                 callbacks[i]();
3986                                                 delete callbacks[i];
3987                                         }
3988                                 };
3989
3990                                 main.addEventListener("message", onGlobalMessage, false);
3991
3992                                 return function setAsap(callback) {
3993                                         var i = getNewIndex();
3994                                         callbacks[i] = callback;
3995                                         main.postMessage(MESSAGE_PREFIX + ':' + i, "*");
3996                                 };
3997
3998                                 // IE browsers without postMessage
3999                         } else if (!hasSetImmediate && main.document && 'onreadystatechange' in document.createElement('script')) {
4000
4001                                 return function setAsap(callback) {
4002                                         scriptEl = document.createElement("script");
4003                                         scriptEl.onreadystatechange = function onreadystatechange() {
4004                                                 scriptEl.onreadystatechange = null;
4005                                                 scriptEl.parentNode.removeChild(scriptEl);
4006                                                 scriptEl = null;
4007                                                 callback();
4008                                         };
4009                                         document.body.appendChild(scriptEl);
4010                                 };
4011
4012                         // All other browsers and node
4013                         } else {
4014
4015                                 timeoutFn = (hasSetImmediate && setImmediate) || (hasNextTick && process.nextTick) || setTimeout;
4016                                 return function setAsap(callback) {
4017                                         timeoutFn(callback);
4018                                 };
4019                         }
4020
4021                 })();
4022
4023                 if ( module.exports) {
4024                         module.exports = setAsap;
4025                 } else if (typeof commonjsRequire !== 'undefined' && commonjsRequire.amd) {
4026                         undefined$1(function () {
4027                                 return setAsap;
4028                         });
4029                 } else {
4030                         main.setAsap = setAsap;
4031                 }
4032         })(commonjsGlobal);
4033         });
4034
4035         var performanceNow = createCommonjsModule(function (module) {
4036         // Generated by CoffeeScript 1.12.2
4037         (function() {
4038           var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;
4039
4040           if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
4041             module.exports = function() {
4042               return performance.now();
4043             };
4044           } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
4045             module.exports = function() {
4046               return (getNanoSeconds() - nodeLoadTime) / 1e6;
4047             };
4048             hrtime = process.hrtime;
4049             getNanoSeconds = function() {
4050               var hr;
4051               hr = hrtime();
4052               return hr[0] * 1e9 + hr[1];
4053             };
4054             moduleLoadTime = getNanoSeconds();
4055             upTime = process.uptime() * 1e9;
4056             nodeLoadTime = moduleLoadTime - upTime;
4057           } else if (Date.now) {
4058             module.exports = function() {
4059               return Date.now() - loadTime;
4060             };
4061             loadTime = Date.now();
4062           } else {
4063             module.exports = function() {
4064               return new Date().getTime() - loadTime;
4065             };
4066             loadTime = new Date().getTime();
4067           }
4068
4069         }).call(commonjsGlobal);
4070
4071
4072         });
4073
4074         var root = typeof window === 'undefined' ? commonjsGlobal : window
4075           , vendors = ['moz', 'webkit']
4076           , suffix = 'AnimationFrame'
4077           , raf = root['request' + suffix]
4078           , caf = root['cancel' + suffix] || root['cancelRequest' + suffix];
4079
4080         for(var i = 0; !raf && i < vendors.length; i++) {
4081           raf = root[vendors[i] + 'Request' + suffix];
4082           caf = root[vendors[i] + 'Cancel' + suffix]
4083               || root[vendors[i] + 'CancelRequest' + suffix];
4084         }
4085
4086         // Some versions of FF have rAF but not cAF
4087         if(!raf || !caf) {
4088           var last = 0
4089             , id$3 = 0
4090             , queue = []
4091             , frameDuration = 1000 / 60;
4092
4093           raf = function(callback) {
4094             if(queue.length === 0) {
4095               var _now = performanceNow()
4096                 , next = Math.max(0, frameDuration - (_now - last));
4097               last = next + _now;
4098               setTimeout(function() {
4099                 var cp = queue.slice(0);
4100                 // Clear queue here to prevent
4101                 // callbacks from appending listeners
4102                 // to the current frame's queue
4103                 queue.length = 0;
4104                 for(var i = 0; i < cp.length; i++) {
4105                   if(!cp[i].cancelled) {
4106                     try{
4107                       cp[i].callback(last);
4108                     } catch(e) {
4109                       setTimeout(function() { throw e }, 0);
4110                     }
4111                   }
4112                 }
4113               }, Math.round(next));
4114             }
4115             queue.push({
4116               handle: ++id$3,
4117               callback: callback,
4118               cancelled: false
4119             });
4120             return id$3
4121           };
4122
4123           caf = function(handle) {
4124             for(var i = 0; i < queue.length; i++) {
4125               if(queue[i].handle === handle) {
4126                 queue[i].cancelled = true;
4127               }
4128             }
4129           };
4130         }
4131
4132         var raf_1 = function(fn) {
4133           // Wrap in a new function to prevent
4134           // `cancel` potentially being assigned
4135           // to the native rAF function
4136           return raf.call(root, fn)
4137         };
4138         var cancel = function() {
4139           caf.apply(root, arguments);
4140         };
4141         var polyfill$d = function(object) {
4142           if (!object) {
4143             object = root;
4144           }
4145           object.requestAnimationFrame = raf;
4146           object.cancelAnimationFrame = caf;
4147         };
4148         raf_1.cancel = cancel;
4149         raf_1.polyfill = polyfill$d;
4150
4151         var support = {
4152           searchParams: 'URLSearchParams' in self,
4153           iterable: 'Symbol' in self && 'iterator' in Symbol,
4154           blob:
4155             'FileReader' in self &&
4156             'Blob' in self &&
4157             (function() {
4158               try {
4159                 new Blob();
4160                 return true
4161               } catch (e) {
4162                 return false
4163               }
4164             })(),
4165           formData: 'FormData' in self,
4166           arrayBuffer: 'ArrayBuffer' in self
4167         };
4168
4169         function isDataView(obj) {
4170           return obj && DataView.prototype.isPrototypeOf(obj)
4171         }
4172
4173         if (support.arrayBuffer) {
4174           var viewClasses = [
4175             '[object Int8Array]',
4176             '[object Uint8Array]',
4177             '[object Uint8ClampedArray]',
4178             '[object Int16Array]',
4179             '[object Uint16Array]',
4180             '[object Int32Array]',
4181             '[object Uint32Array]',
4182             '[object Float32Array]',
4183             '[object Float64Array]'
4184           ];
4185
4186           var isArrayBufferView =
4187             ArrayBuffer.isView ||
4188             function(obj) {
4189               return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
4190             };
4191         }
4192
4193         function normalizeName(name) {
4194           if (typeof name !== 'string') {
4195             name = String(name);
4196           }
4197           if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
4198             throw new TypeError('Invalid character in header field name')
4199           }
4200           return name.toLowerCase()
4201         }
4202
4203         function normalizeValue(value) {
4204           if (typeof value !== 'string') {
4205             value = String(value);
4206           }
4207           return value
4208         }
4209
4210         // Build a destructive iterator for the value list
4211         function iteratorFor(items) {
4212           var iterator = {
4213             next: function() {
4214               var value = items.shift();
4215               return {done: value === undefined, value: value}
4216             }
4217           };
4218
4219           if (support.iterable) {
4220             iterator[Symbol.iterator] = function() {
4221               return iterator
4222             };
4223           }
4224
4225           return iterator
4226         }
4227
4228         function Headers(headers) {
4229           this.map = {};
4230
4231           if (headers instanceof Headers) {
4232             headers.forEach(function(value, name) {
4233               this.append(name, value);
4234             }, this);
4235           } else if (Array.isArray(headers)) {
4236             headers.forEach(function(header) {
4237               this.append(header[0], header[1]);
4238             }, this);
4239           } else if (headers) {
4240             Object.getOwnPropertyNames(headers).forEach(function(name) {
4241               this.append(name, headers[name]);
4242             }, this);
4243           }
4244         }
4245
4246         Headers.prototype.append = function(name, value) {
4247           name = normalizeName(name);
4248           value = normalizeValue(value);
4249           var oldValue = this.map[name];
4250           this.map[name] = oldValue ? oldValue + ', ' + value : value;
4251         };
4252
4253         Headers.prototype['delete'] = function(name) {
4254           delete this.map[normalizeName(name)];
4255         };
4256
4257         Headers.prototype.get = function(name) {
4258           name = normalizeName(name);
4259           return this.has(name) ? this.map[name] : null
4260         };
4261
4262         Headers.prototype.has = function(name) {
4263           return this.map.hasOwnProperty(normalizeName(name))
4264         };
4265
4266         Headers.prototype.set = function(name, value) {
4267           this.map[normalizeName(name)] = normalizeValue(value);
4268         };
4269
4270         Headers.prototype.forEach = function(callback, thisArg) {
4271           for (var name in this.map) {
4272             if (this.map.hasOwnProperty(name)) {
4273               callback.call(thisArg, this.map[name], name, this);
4274             }
4275           }
4276         };
4277
4278         Headers.prototype.keys = function() {
4279           var items = [];
4280           this.forEach(function(value, name) {
4281             items.push(name);
4282           });
4283           return iteratorFor(items)
4284         };
4285
4286         Headers.prototype.values = function() {
4287           var items = [];
4288           this.forEach(function(value) {
4289             items.push(value);
4290           });
4291           return iteratorFor(items)
4292         };
4293
4294         Headers.prototype.entries = function() {
4295           var items = [];
4296           this.forEach(function(value, name) {
4297             items.push([name, value]);
4298           });
4299           return iteratorFor(items)
4300         };
4301
4302         if (support.iterable) {
4303           Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
4304         }
4305
4306         function consumed(body) {
4307           if (body.bodyUsed) {
4308             return Promise.reject(new TypeError('Already read'))
4309           }
4310           body.bodyUsed = true;
4311         }
4312
4313         function fileReaderReady(reader) {
4314           return new Promise(function(resolve, reject) {
4315             reader.onload = function() {
4316               resolve(reader.result);
4317             };
4318             reader.onerror = function() {
4319               reject(reader.error);
4320             };
4321           })
4322         }
4323
4324         function readBlobAsArrayBuffer(blob) {
4325           var reader = new FileReader();
4326           var promise = fileReaderReady(reader);
4327           reader.readAsArrayBuffer(blob);
4328           return promise
4329         }
4330
4331         function readBlobAsText(blob) {
4332           var reader = new FileReader();
4333           var promise = fileReaderReady(reader);
4334           reader.readAsText(blob);
4335           return promise
4336         }
4337
4338         function readArrayBufferAsText(buf) {
4339           var view = new Uint8Array(buf);
4340           var chars = new Array(view.length);
4341
4342           for (var i = 0; i < view.length; i++) {
4343             chars[i] = String.fromCharCode(view[i]);
4344           }
4345           return chars.join('')
4346         }
4347
4348         function bufferClone(buf) {
4349           if (buf.slice) {
4350             return buf.slice(0)
4351           } else {
4352             var view = new Uint8Array(buf.byteLength);
4353             view.set(new Uint8Array(buf));
4354             return view.buffer
4355           }
4356         }
4357
4358         function Body() {
4359           this.bodyUsed = false;
4360
4361           this._initBody = function(body) {
4362             this._bodyInit = body;
4363             if (!body) {
4364               this._bodyText = '';
4365             } else if (typeof body === 'string') {
4366               this._bodyText = body;
4367             } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
4368               this._bodyBlob = body;
4369             } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
4370               this._bodyFormData = body;
4371             } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
4372               this._bodyText = body.toString();
4373             } else if (support.arrayBuffer && support.blob && isDataView(body)) {
4374               this._bodyArrayBuffer = bufferClone(body.buffer);
4375               // IE 10-11 can't handle a DataView body.
4376               this._bodyInit = new Blob([this._bodyArrayBuffer]);
4377             } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
4378               this._bodyArrayBuffer = bufferClone(body);
4379             } else {
4380               this._bodyText = body = Object.prototype.toString.call(body);
4381             }
4382
4383             if (!this.headers.get('content-type')) {
4384               if (typeof body === 'string') {
4385                 this.headers.set('content-type', 'text/plain;charset=UTF-8');
4386               } else if (this._bodyBlob && this._bodyBlob.type) {
4387                 this.headers.set('content-type', this._bodyBlob.type);
4388               } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
4389                 this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
4390               }
4391             }
4392           };
4393
4394           if (support.blob) {
4395             this.blob = function() {
4396               var rejected = consumed(this);
4397               if (rejected) {
4398                 return rejected
4399               }
4400
4401               if (this._bodyBlob) {
4402                 return Promise.resolve(this._bodyBlob)
4403               } else if (this._bodyArrayBuffer) {
4404                 return Promise.resolve(new Blob([this._bodyArrayBuffer]))
4405               } else if (this._bodyFormData) {
4406                 throw new Error('could not read FormData body as blob')
4407               } else {
4408                 return Promise.resolve(new Blob([this._bodyText]))
4409               }
4410             };
4411
4412             this.arrayBuffer = function() {
4413               if (this._bodyArrayBuffer) {
4414                 return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
4415               } else {
4416                 return this.blob().then(readBlobAsArrayBuffer)
4417               }
4418             };
4419           }
4420
4421           this.text = function() {
4422             var rejected = consumed(this);
4423             if (rejected) {
4424               return rejected
4425             }
4426
4427             if (this._bodyBlob) {
4428               return readBlobAsText(this._bodyBlob)
4429             } else if (this._bodyArrayBuffer) {
4430               return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
4431             } else if (this._bodyFormData) {
4432               throw new Error('could not read FormData body as text')
4433             } else {
4434               return Promise.resolve(this._bodyText)
4435             }
4436           };
4437
4438           if (support.formData) {
4439             this.formData = function() {
4440               return this.text().then(decode)
4441             };
4442           }
4443
4444           this.json = function() {
4445             return this.text().then(JSON.parse)
4446           };
4447
4448           return this
4449         }
4450
4451         // HTTP methods whose capitalization should be normalized
4452         var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
4453
4454         function normalizeMethod(method) {
4455           var upcased = method.toUpperCase();
4456           return methods.indexOf(upcased) > -1 ? upcased : method
4457         }
4458
4459         function Request(input, options) {
4460           options = options || {};
4461           var body = options.body;
4462
4463           if (input instanceof Request) {
4464             if (input.bodyUsed) {
4465               throw new TypeError('Already read')
4466             }
4467             this.url = input.url;
4468             this.credentials = input.credentials;
4469             if (!options.headers) {
4470               this.headers = new Headers(input.headers);
4471             }
4472             this.method = input.method;
4473             this.mode = input.mode;
4474             this.signal = input.signal;
4475             if (!body && input._bodyInit != null) {
4476               body = input._bodyInit;
4477               input.bodyUsed = true;
4478             }
4479           } else {
4480             this.url = String(input);
4481           }
4482
4483           this.credentials = options.credentials || this.credentials || 'same-origin';
4484           if (options.headers || !this.headers) {
4485             this.headers = new Headers(options.headers);
4486           }
4487           this.method = normalizeMethod(options.method || this.method || 'GET');
4488           this.mode = options.mode || this.mode || null;
4489           this.signal = options.signal || this.signal;
4490           this.referrer = null;
4491
4492           if ((this.method === 'GET' || this.method === 'HEAD') && body) {
4493             throw new TypeError('Body not allowed for GET or HEAD requests')
4494           }
4495           this._initBody(body);
4496         }
4497
4498         Request.prototype.clone = function() {
4499           return new Request(this, {body: this._bodyInit})
4500         };
4501
4502         function decode(body) {
4503           var form = new FormData();
4504           body
4505             .trim()
4506             .split('&')
4507             .forEach(function(bytes) {
4508               if (bytes) {
4509                 var split = bytes.split('=');
4510                 var name = split.shift().replace(/\+/g, ' ');
4511                 var value = split.join('=').replace(/\+/g, ' ');
4512                 form.append(decodeURIComponent(name), decodeURIComponent(value));
4513               }
4514             });
4515           return form
4516         }
4517
4518         function parseHeaders(rawHeaders) {
4519           var headers = new Headers();
4520           // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
4521           // https://tools.ietf.org/html/rfc7230#section-3.2
4522           var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
4523           preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
4524             var parts = line.split(':');
4525             var key = parts.shift().trim();
4526             if (key) {
4527               var value = parts.join(':').trim();
4528               headers.append(key, value);
4529             }
4530           });
4531           return headers
4532         }
4533
4534         Body.call(Request.prototype);
4535
4536         function Response(bodyInit, options) {
4537           if (!options) {
4538             options = {};
4539           }
4540
4541           this.type = 'default';
4542           this.status = options.status === undefined ? 200 : options.status;
4543           this.ok = this.status >= 200 && this.status < 300;
4544           this.statusText = 'statusText' in options ? options.statusText : 'OK';
4545           this.headers = new Headers(options.headers);
4546           this.url = options.url || '';
4547           this._initBody(bodyInit);
4548         }
4549
4550         Body.call(Response.prototype);
4551
4552         Response.prototype.clone = function() {
4553           return new Response(this._bodyInit, {
4554             status: this.status,
4555             statusText: this.statusText,
4556             headers: new Headers(this.headers),
4557             url: this.url
4558           })
4559         };
4560
4561         Response.error = function() {
4562           var response = new Response(null, {status: 0, statusText: ''});
4563           response.type = 'error';
4564           return response
4565         };
4566
4567         var redirectStatuses = [301, 302, 303, 307, 308];
4568
4569         Response.redirect = function(url, status) {
4570           if (redirectStatuses.indexOf(status) === -1) {
4571             throw new RangeError('Invalid status code')
4572           }
4573
4574           return new Response(null, {status: status, headers: {location: url}})
4575         };
4576
4577         var DOMException$1 = self.DOMException;
4578         try {
4579           new DOMException$1();
4580         } catch (err) {
4581           DOMException$1 = function(message, name) {
4582             this.message = message;
4583             this.name = name;
4584             var error = Error(message);
4585             this.stack = error.stack;
4586           };
4587           DOMException$1.prototype = Object.create(Error.prototype);
4588           DOMException$1.prototype.constructor = DOMException$1;
4589         }
4590
4591         function fetch$1(input, init) {
4592           return new Promise(function(resolve, reject) {
4593             var request = new Request(input, init);
4594
4595             if (request.signal && request.signal.aborted) {
4596               return reject(new DOMException$1('Aborted', 'AbortError'))
4597             }
4598
4599             var xhr = new XMLHttpRequest();
4600
4601             function abortXhr() {
4602               xhr.abort();
4603             }
4604
4605             xhr.onload = function() {
4606               var options = {
4607                 status: xhr.status,
4608                 statusText: xhr.statusText,
4609                 headers: parseHeaders(xhr.getAllResponseHeaders() || '')
4610               };
4611               options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
4612               var body = 'response' in xhr ? xhr.response : xhr.responseText;
4613               resolve(new Response(body, options));
4614             };
4615
4616             xhr.onerror = function() {
4617               reject(new TypeError('Network request failed'));
4618             };
4619
4620             xhr.ontimeout = function() {
4621               reject(new TypeError('Network request failed'));
4622             };
4623
4624             xhr.onabort = function() {
4625               reject(new DOMException$1('Aborted', 'AbortError'));
4626             };
4627
4628             xhr.open(request.method, request.url, true);
4629
4630             if (request.credentials === 'include') {
4631               xhr.withCredentials = true;
4632             } else if (request.credentials === 'omit') {
4633               xhr.withCredentials = false;
4634             }
4635
4636             if ('responseType' in xhr && support.blob) {
4637               xhr.responseType = 'blob';
4638             }
4639
4640             request.headers.forEach(function(value, name) {
4641               xhr.setRequestHeader(name, value);
4642             });
4643
4644             if (request.signal) {
4645               request.signal.addEventListener('abort', abortXhr);
4646
4647               xhr.onreadystatechange = function() {
4648                 // DONE (success or failure)
4649                 if (xhr.readyState === 4) {
4650                   request.signal.removeEventListener('abort', abortXhr);
4651                 }
4652               };
4653             }
4654
4655             xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
4656           })
4657         }
4658
4659         fetch$1.polyfill = true;
4660
4661         if (!self.fetch) {
4662           self.fetch = fetch$1;
4663           self.Headers = Headers;
4664           self.Request = Request;
4665           self.Response = Response;
4666         }
4667
4668         var lib = createCommonjsModule(function (module, exports) {
4669         Object.defineProperty(exports, "__esModule", { value: true });
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680         if (!window.Set) {
4681             window.Set = es6Set;
4682         }
4683         if (!window.Map) {
4684             window.Map = es6Map;
4685         }
4686         if (!window.Promise) {
4687             window.Promise = polyfill$c;
4688             window.Promise._immediateFn = setAsap;
4689         }
4690         if (!Array.prototype.find) {
4691             array_prototype_find.shim();
4692         }
4693         if (!Array.prototype.findIndex) {
4694             array_prototype_findindex.shim();
4695         }
4696         if (!Array.from) {
4697             array_from.shim();
4698         }
4699         if (!Object.values) {
4700             object_values.shim();
4701         }
4702         if (!Object.assign) {
4703             object_assign.shim();
4704         }
4705         if (!window.requestAnimationFrame || !window.cancelAnimationFrame) {
4706             window.requestAnimationFrame = raf_1;
4707             window.cancelAnimationFrame = raf_1.cancel;
4708         }
4709
4710         var finalFetch = window.fetch;
4711         var finalPromise = window.Promise;
4712         window.fetch = function (input, init) {
4713             try {
4714                 return finalFetch(input, init);
4715             }
4716             catch (error) {
4717                 return new finalPromise(function (_, reject) { return reject(error); });
4718             }
4719         };
4720         });
4721
4722         unwrapExports(lib);
4723
4724         (function (factory) {
4725           
4726           factory();
4727         }(function () {
4728           function _classCallCheck(instance, Constructor) {
4729             if (!(instance instanceof Constructor)) {
4730               throw new TypeError("Cannot call a class as a function");
4731             }
4732           }
4733
4734           function _defineProperties(target, props) {
4735             for (var i = 0; i < props.length; i++) {
4736               var descriptor = props[i];
4737               descriptor.enumerable = descriptor.enumerable || false;
4738               descriptor.configurable = true;
4739               if ("value" in descriptor) descriptor.writable = true;
4740               Object.defineProperty(target, descriptor.key, descriptor);
4741             }
4742           }
4743
4744           function _createClass(Constructor, protoProps, staticProps) {
4745             if (protoProps) _defineProperties(Constructor.prototype, protoProps);
4746             if (staticProps) _defineProperties(Constructor, staticProps);
4747             return Constructor;
4748           }
4749
4750           function _inherits(subClass, superClass) {
4751             if (typeof superClass !== "function" && superClass !== null) {
4752               throw new TypeError("Super expression must either be null or a function");
4753             }
4754
4755             subClass.prototype = Object.create(superClass && superClass.prototype, {
4756               constructor: {
4757                 value: subClass,
4758                 writable: true,
4759                 configurable: true
4760               }
4761             });
4762             if (superClass) _setPrototypeOf(subClass, superClass);
4763           }
4764
4765           function _getPrototypeOf(o) {
4766             _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
4767               return o.__proto__ || Object.getPrototypeOf(o);
4768             };
4769             return _getPrototypeOf(o);
4770           }
4771
4772           function _setPrototypeOf(o, p) {
4773             _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
4774               o.__proto__ = p;
4775               return o;
4776             };
4777
4778             return _setPrototypeOf(o, p);
4779           }
4780
4781           function _assertThisInitialized(self) {
4782             if (self === void 0) {
4783               throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
4784             }
4785
4786             return self;
4787           }
4788
4789           function _possibleConstructorReturn(self, call) {
4790             if (call && (typeof call === "object" || typeof call === "function")) {
4791               return call;
4792             }
4793
4794             return _assertThisInitialized(self);
4795           }
4796
4797           function _superPropBase(object, property) {
4798             while (!Object.prototype.hasOwnProperty.call(object, property)) {
4799               object = _getPrototypeOf(object);
4800               if (object === null) break;
4801             }
4802
4803             return object;
4804           }
4805
4806           function _get(target, property, receiver) {
4807             if (typeof Reflect !== "undefined" && Reflect.get) {
4808               _get = Reflect.get;
4809             } else {
4810               _get = function _get(target, property, receiver) {
4811                 var base = _superPropBase(target, property);
4812
4813                 if (!base) return;
4814                 var desc = Object.getOwnPropertyDescriptor(base, property);
4815
4816                 if (desc.get) {
4817                   return desc.get.call(receiver);
4818                 }
4819
4820                 return desc.value;
4821               };
4822             }
4823
4824             return _get(target, property, receiver || target);
4825           }
4826
4827           var Emitter =
4828           /*#__PURE__*/
4829           function () {
4830             function Emitter() {
4831               _classCallCheck(this, Emitter);
4832
4833               Object.defineProperty(this, 'listeners', {
4834                 value: {},
4835                 writable: true,
4836                 configurable: true
4837               });
4838             }
4839
4840             _createClass(Emitter, [{
4841               key: "addEventListener",
4842               value: function addEventListener(type, callback) {
4843                 if (!(type in this.listeners)) {
4844                   this.listeners[type] = [];
4845                 }
4846
4847                 this.listeners[type].push(callback);
4848               }
4849             }, {
4850               key: "removeEventListener",
4851               value: function removeEventListener(type, callback) {
4852                 if (!(type in this.listeners)) {
4853                   return;
4854                 }
4855
4856                 var stack = this.listeners[type];
4857
4858                 for (var i = 0, l = stack.length; i < l; i++) {
4859                   if (stack[i] === callback) {
4860                     stack.splice(i, 1);
4861                     return;
4862                   }
4863                 }
4864               }
4865             }, {
4866               key: "dispatchEvent",
4867               value: function dispatchEvent(event) {
4868                 var _this = this;
4869
4870                 if (!(event.type in this.listeners)) {
4871                   return;
4872                 }
4873
4874                 var debounce = function debounce(callback) {
4875                   setTimeout(function () {
4876                     return callback.call(_this, event);
4877                   });
4878                 };
4879
4880                 var stack = this.listeners[event.type];
4881
4882                 for (var i = 0, l = stack.length; i < l; i++) {
4883                   debounce(stack[i]);
4884                 }
4885
4886                 return !event.defaultPrevented;
4887               }
4888             }]);
4889
4890             return Emitter;
4891           }();
4892
4893           var AbortSignal =
4894           /*#__PURE__*/
4895           function (_Emitter) {
4896             _inherits(AbortSignal, _Emitter);
4897
4898             function AbortSignal() {
4899               var _this2;
4900
4901               _classCallCheck(this, AbortSignal);
4902
4903               _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AbortSignal).call(this)); // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent
4904               // constructor has failed to run, then "this.listeners" will still be undefined and then we call
4905               // the parent constructor directly instead as a workaround. For general details, see babel bug:
4906               // https://github.com/babel/babel/issues/3041
4907               // This hack was added as a fix for the issue described here:
4908               // https://github.com/Financial-Times/polyfill-library/pull/59#issuecomment-477558042
4909
4910               if (!_this2.listeners) {
4911                 Emitter.call(_assertThisInitialized(_this2));
4912               } // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
4913               // we want Object.keys(new AbortController().signal) to be [] for compat with the native impl
4914
4915
4916               Object.defineProperty(_assertThisInitialized(_this2), 'aborted', {
4917                 value: false,
4918                 writable: true,
4919                 configurable: true
4920               });
4921               Object.defineProperty(_assertThisInitialized(_this2), 'onabort', {
4922                 value: null,
4923                 writable: true,
4924                 configurable: true
4925               });
4926               return _this2;
4927             }
4928
4929             _createClass(AbortSignal, [{
4930               key: "toString",
4931               value: function toString() {
4932                 return '[object AbortSignal]';
4933               }
4934             }, {
4935               key: "dispatchEvent",
4936               value: function dispatchEvent(event) {
4937                 if (event.type === 'abort') {
4938                   this.aborted = true;
4939
4940                   if (typeof this.onabort === 'function') {
4941                     this.onabort.call(this, event);
4942                   }
4943                 }
4944
4945                 _get(_getPrototypeOf(AbortSignal.prototype), "dispatchEvent", this).call(this, event);
4946               }
4947             }]);
4948
4949             return AbortSignal;
4950           }(Emitter);
4951           var AbortController =
4952           /*#__PURE__*/
4953           function () {
4954             function AbortController() {
4955               _classCallCheck(this, AbortController);
4956
4957               // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
4958               // we want Object.keys(new AbortController()) to be [] for compat with the native impl
4959               Object.defineProperty(this, 'signal', {
4960                 value: new AbortSignal(),
4961                 writable: true,
4962                 configurable: true
4963               });
4964             }
4965
4966             _createClass(AbortController, [{
4967               key: "abort",
4968               value: function abort() {
4969                 var event;
4970
4971                 try {
4972                   event = new Event('abort');
4973                 } catch (e) {
4974                   if (typeof document !== 'undefined') {
4975                     if (!document.createEvent) {
4976                       // For Internet Explorer 8:
4977                       event = document.createEventObject();
4978                       event.type = 'abort';
4979                     } else {
4980                       // For Internet Explorer 11:
4981                       event = document.createEvent('Event');
4982                       event.initEvent('abort', false, false);
4983                     }
4984                   } else {
4985                     // Fallback where document isn't available:
4986                     event = {
4987                       type: 'abort',
4988                       bubbles: false,
4989                       cancelable: false
4990                     };
4991                   }
4992                 }
4993
4994                 this.signal.dispatchEvent(event);
4995               }
4996             }, {
4997               key: "toString",
4998               value: function toString() {
4999                 return '[object AbortController]';
5000               }
5001             }]);
5002
5003             return AbortController;
5004           }();
5005
5006           if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
5007             // These are necessary to make sure that we get correct output for:
5008             // Object.prototype.toString.call(new AbortController())
5009             AbortController.prototype[Symbol.toStringTag] = 'AbortController';
5010             AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';
5011           }
5012
5013           function polyfillNeeded(self) {
5014             if (self.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
5015               console.log('__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill');
5016               return true;
5017             } // Note that the "unfetch" minimal fetch polyfill defines fetch() without
5018             // defining window.Request, and this polyfill need to work on top of unfetch
5019             // so the below feature detection needs the !self.AbortController part.
5020             // The Request.prototype check is also needed because Safari versions 11.1.2
5021             // up to and including 12.1.x has a window.AbortController present but still
5022             // does NOT correctly implement abortable fetch:
5023             // https://bugs.webkit.org/show_bug.cgi?id=174980#c2
5024
5025
5026             return typeof self.Request === 'function' && !self.Request.prototype.hasOwnProperty('signal') || !self.AbortController;
5027           }
5028
5029           /**
5030            * Note: the "fetch.Request" default value is available for fetch imported from
5031            * the "node-fetch" package and not in browsers. This is OK since browsers
5032            * will be importing umd-polyfill.js from that path "self" is passed the
5033            * decorator so the default value will not be used (because browsers that define
5034            * fetch also has Request). One quirky setup where self.fetch exists but
5035            * self.Request does not is when the "unfetch" minimal fetch polyfill is used
5036            * on top of IE11; for this case the browser will try to use the fetch.Request
5037            * default value which in turn will be undefined but then then "if (Request)"
5038            * will ensure that you get a patched fetch but still no Request (as expected).
5039            * @param {fetch, Request = fetch.Request}
5040            * @returns {fetch: abortableFetch, Request: AbortableRequest}
5041            */
5042
5043           function abortableFetchDecorator(patchTargets) {
5044             if ('function' === typeof patchTargets) {
5045               patchTargets = {
5046                 fetch: patchTargets
5047               };
5048             }
5049
5050             var _patchTargets = patchTargets,
5051                 fetch = _patchTargets.fetch,
5052                 _patchTargets$Request = _patchTargets.Request,
5053                 NativeRequest = _patchTargets$Request === void 0 ? fetch.Request : _patchTargets$Request,
5054                 NativeAbortController = _patchTargets.AbortController,
5055                 _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,
5056                 __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;
5057
5058             if (!polyfillNeeded({
5059               fetch: fetch,
5060               Request: NativeRequest,
5061               AbortController: NativeAbortController,
5062               __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL: __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL
5063             })) {
5064               return {
5065                 fetch: fetch,
5066                 Request: Request
5067               };
5068             }
5069
5070             var Request = NativeRequest; // Note that the "unfetch" minimal fetch polyfill defines fetch() without
5071             // defining window.Request, and this polyfill need to work on top of unfetch
5072             // hence we only patch it if it's available. Also we don't patch it if signal
5073             // is already available on the Request prototype because in this case support
5074             // is present and the patching below can cause a crash since it assigns to
5075             // request.signal which is technically a read-only property. This latter error
5076             // happens when you run the main5.js node-fetch example in the repo
5077             // "abortcontroller-polyfill-examples". The exact error is:
5078             //   request.signal = init.signal;
5079             //   ^
5080             // TypeError: Cannot set property signal of #<Request> which has only a getter
5081
5082             if (Request && !Request.prototype.hasOwnProperty('signal') || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
5083               Request = function Request(input, init) {
5084                 var signal;
5085
5086                 if (init && init.signal) {
5087                   signal = init.signal; // Never pass init.signal to the native Request implementation when the polyfill has
5088                   // been installed because if we're running on top of a browser with a
5089                   // working native AbortController (i.e. the polyfill was installed due to
5090                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
5091                   // fake AbortSignal to the native fetch will trigger:
5092                   // TypeError: Failed to construct 'Request': member signal is not of type AbortSignal.
5093
5094                   delete init.signal;
5095                 }
5096
5097                 var request = new NativeRequest(input, init);
5098
5099                 if (signal) {
5100                   Object.defineProperty(request, 'signal', {
5101                     writable: false,
5102                     enumerable: false,
5103                     configurable: true,
5104                     value: signal
5105                   });
5106                 }
5107
5108                 return request;
5109               };
5110
5111               Request.prototype = NativeRequest.prototype;
5112             }
5113
5114             var realFetch = fetch;
5115
5116             var abortableFetch = function abortableFetch(input, init) {
5117               var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init ? init.signal : undefined;
5118
5119               if (signal) {
5120                 var abortError;
5121
5122                 try {
5123                   abortError = new DOMException('Aborted', 'AbortError');
5124                 } catch (err) {
5125                   // IE 11 does not support calling the DOMException constructor, use a
5126                   // regular error object on it instead.
5127                   abortError = new Error('Aborted');
5128                   abortError.name = 'AbortError';
5129                 } // Return early if already aborted, thus avoiding making an HTTP request
5130
5131
5132                 if (signal.aborted) {
5133                   return Promise.reject(abortError);
5134                 } // Turn an event into a promise, reject it once `abort` is dispatched
5135
5136
5137                 var cancellation = new Promise(function (_, reject) {
5138                   signal.addEventListener('abort', function () {
5139                     return reject(abortError);
5140                   }, {
5141                     once: true
5142                   });
5143                 });
5144
5145                 if (init && init.signal) {
5146                   // Never pass .signal to the native implementation when the polyfill has
5147                   // been installed because if we're running on top of a browser with a
5148                   // working native AbortController (i.e. the polyfill was installed due to
5149                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
5150                   // fake AbortSignal to the native fetch will trigger:
5151                   // TypeError: Failed to execute 'fetch' on 'Window': member signal is not of type AbortSignal.
5152                   delete init.signal;
5153                 } // Return the fastest promise (don't need to wait for request to finish)
5154
5155
5156                 return Promise.race([cancellation, realFetch(input, init)]);
5157               }
5158
5159               return realFetch(input, init);
5160             };
5161
5162             return {
5163               fetch: abortableFetch,
5164               Request: Request
5165             };
5166           }
5167
5168           (function (self) {
5169
5170             if (!polyfillNeeded(self)) {
5171               return;
5172             }
5173
5174             if (!self.fetch) {
5175               console.warn('fetch() is not available, cannot install abortcontroller-polyfill');
5176               return;
5177             }
5178
5179             var _abortableFetch = abortableFetchDecorator(self),
5180                 fetch = _abortableFetch.fetch,
5181                 Request = _abortableFetch.Request;
5182
5183             self.fetch = fetch;
5184             self.Request = Request;
5185             Object.defineProperty(self, 'AbortController', {
5186               writable: true,
5187               enumerable: false,
5188               configurable: true,
5189               value: AbortController
5190             });
5191             Object.defineProperty(self, 'AbortSignal', {
5192               writable: true,
5193               enumerable: false,
5194               configurable: true,
5195               value: AbortSignal
5196             });
5197           })(typeof self !== 'undefined' ? self : commonjsGlobal);
5198
5199         }));
5200
5201         var version = "5.9.2";
5202
5203         function d3_ascending(a, b) {
5204           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
5205         }
5206
5207         function d3_bisector(compare) {
5208           if (compare.length === 1) compare = ascendingComparator(compare);
5209           return {
5210             left: function(a, x, lo, hi) {
5211               if (lo == null) lo = 0;
5212               if (hi == null) hi = a.length;
5213               while (lo < hi) {
5214                 var mid = lo + hi >>> 1;
5215                 if (compare(a[mid], x) < 0) lo = mid + 1;
5216                 else hi = mid;
5217               }
5218               return lo;
5219             },
5220             right: function(a, x, lo, hi) {
5221               if (lo == null) lo = 0;
5222               if (hi == null) hi = a.length;
5223               while (lo < hi) {
5224                 var mid = lo + hi >>> 1;
5225                 if (compare(a[mid], x) > 0) hi = mid;
5226                 else lo = mid + 1;
5227               }
5228               return lo;
5229             }
5230           };
5231         }
5232
5233         function ascendingComparator(f) {
5234           return function(d, x) {
5235             return d3_ascending(f(d), x);
5236           };
5237         }
5238
5239         var ascendingBisect = d3_bisector(d3_ascending);
5240         var bisectRight = ascendingBisect.right;
5241         var bisectLeft = ascendingBisect.left;
5242
5243         function pairs(array, f) {
5244           if (f == null) f = pair;
5245           var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
5246           while (i < n) pairs[i] = f(p, p = array[++i]);
5247           return pairs;
5248         }
5249
5250         function pair(a, b) {
5251           return [a, b];
5252         }
5253
5254         function cross(values0, values1, reduce) {
5255           var n0 = values0.length,
5256               n1 = values1.length,
5257               values = new Array(n0 * n1),
5258               i0,
5259               i1,
5260               i,
5261               value0;
5262
5263           if (reduce == null) reduce = pair;
5264
5265           for (i0 = i = 0; i0 < n0; ++i0) {
5266             for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {
5267               values[i] = reduce(value0, values1[i1]);
5268             }
5269           }
5270
5271           return values;
5272         }
5273
5274         function d3_descending(a, b) {
5275           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
5276         }
5277
5278         function number(x) {
5279           return x === null ? NaN : +x;
5280         }
5281
5282         function variance(values, valueof) {
5283           var n = values.length,
5284               m = 0,
5285               i = -1,
5286               mean = 0,
5287               value,
5288               delta,
5289               sum = 0;
5290
5291           if (valueof == null) {
5292             while (++i < n) {
5293               if (!isNaN(value = number(values[i]))) {
5294                 delta = value - mean;
5295                 mean += delta / ++m;
5296                 sum += delta * (value - mean);
5297               }
5298             }
5299           }
5300
5301           else {
5302             while (++i < n) {
5303               if (!isNaN(value = number(valueof(values[i], i, values)))) {
5304                 delta = value - mean;
5305                 mean += delta / ++m;
5306                 sum += delta * (value - mean);
5307               }
5308             }
5309           }
5310
5311           if (m > 1) return sum / (m - 1);
5312         }
5313
5314         function deviation(array, f) {
5315           var v = variance(array, f);
5316           return v ? Math.sqrt(v) : v;
5317         }
5318
5319         function extent(values, valueof) {
5320           var n = values.length,
5321               i = -1,
5322               value,
5323               min,
5324               max;
5325
5326           if (valueof == null) {
5327             while (++i < n) { // Find the first comparable value.
5328               if ((value = values[i]) != null && value >= value) {
5329                 min = max = value;
5330                 while (++i < n) { // Compare the remaining values.
5331                   if ((value = values[i]) != null) {
5332                     if (min > value) min = value;
5333                     if (max < value) max = value;
5334                   }
5335                 }
5336               }
5337             }
5338           }
5339
5340           else {
5341             while (++i < n) { // Find the first comparable value.
5342               if ((value = valueof(values[i], i, values)) != null && value >= value) {
5343                 min = max = value;
5344                 while (++i < n) { // Compare the remaining values.
5345                   if ((value = valueof(values[i], i, values)) != null) {
5346                     if (min > value) min = value;
5347                     if (max < value) max = value;
5348                   }
5349                 }
5350               }
5351             }
5352           }
5353
5354           return [min, max];
5355         }
5356
5357         var array$1 = Array.prototype;
5358
5359         var slice$4 = array$1.slice;
5360         var map$2 = array$1.map;
5361
5362         function constant(x) {
5363           return function() {
5364             return x;
5365           };
5366         }
5367
5368         function identity(x) {
5369           return x;
5370         }
5371
5372         function d3_range(start, stop, step) {
5373           start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
5374
5375           var i = -1,
5376               n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
5377               range = new Array(n);
5378
5379           while (++i < n) {
5380             range[i] = start + i * step;
5381           }
5382
5383           return range;
5384         }
5385
5386         var e10 = Math.sqrt(50),
5387             e5 = Math.sqrt(10),
5388             e2 = Math.sqrt(2);
5389
5390         function ticks(start, stop, count) {
5391           var reverse,
5392               i = -1,
5393               n,
5394               ticks,
5395               step;
5396
5397           stop = +stop, start = +start, count = +count;
5398           if (start === stop && count > 0) return [start];
5399           if (reverse = stop < start) n = start, start = stop, stop = n;
5400           if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
5401
5402           if (step > 0) {
5403             start = Math.ceil(start / step);
5404             stop = Math.floor(stop / step);
5405             ticks = new Array(n = Math.ceil(stop - start + 1));
5406             while (++i < n) ticks[i] = (start + i) * step;
5407           } else {
5408             start = Math.floor(start * step);
5409             stop = Math.ceil(stop * step);
5410             ticks = new Array(n = Math.ceil(start - stop + 1));
5411             while (++i < n) ticks[i] = (start - i) / step;
5412           }
5413
5414           if (reverse) ticks.reverse();
5415
5416           return ticks;
5417         }
5418
5419         function tickIncrement(start, stop, count) {
5420           var step = (stop - start) / Math.max(0, count),
5421               power = Math.floor(Math.log(step) / Math.LN10),
5422               error = step / Math.pow(10, power);
5423           return power >= 0
5424               ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
5425               : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
5426         }
5427
5428         function tickStep(start, stop, count) {
5429           var step0 = Math.abs(stop - start) / Math.max(0, count),
5430               step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
5431               error = step0 / step1;
5432           if (error >= e10) step1 *= 10;
5433           else if (error >= e5) step1 *= 5;
5434           else if (error >= e2) step1 *= 2;
5435           return stop < start ? -step1 : step1;
5436         }
5437
5438         function thresholdSturges(values) {
5439           return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
5440         }
5441
5442         function histogram() {
5443           var value = identity,
5444               domain = extent,
5445               threshold = thresholdSturges;
5446
5447           function histogram(data) {
5448             var i,
5449                 n = data.length,
5450                 x,
5451                 values = new Array(n);
5452
5453             for (i = 0; i < n; ++i) {
5454               values[i] = value(data[i], i, data);
5455             }
5456
5457             var xz = domain(values),
5458                 x0 = xz[0],
5459                 x1 = xz[1],
5460                 tz = threshold(values, x0, x1);
5461
5462             // Convert number of thresholds into uniform thresholds.
5463             if (!Array.isArray(tz)) {
5464               tz = tickStep(x0, x1, tz);
5465               tz = d3_range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive
5466             }
5467
5468             // Remove any thresholds outside the domain.
5469             var m = tz.length;
5470             while (tz[0] <= x0) tz.shift(), --m;
5471             while (tz[m - 1] > x1) tz.pop(), --m;
5472
5473             var bins = new Array(m + 1),
5474                 bin;
5475
5476             // Initialize bins.
5477             for (i = 0; i <= m; ++i) {
5478               bin = bins[i] = [];
5479               bin.x0 = i > 0 ? tz[i - 1] : x0;
5480               bin.x1 = i < m ? tz[i] : x1;
5481             }
5482
5483             // Assign data to bins by value, ignoring any outside the domain.
5484             for (i = 0; i < n; ++i) {
5485               x = values[i];
5486               if (x0 <= x && x <= x1) {
5487                 bins[bisectRight(tz, x, 0, m)].push(data[i]);
5488               }
5489             }
5490
5491             return bins;
5492           }
5493
5494           histogram.value = function(_) {
5495             return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
5496           };
5497
5498           histogram.domain = function(_) {
5499             return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
5500           };
5501
5502           histogram.thresholds = function(_) {
5503             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice$4.call(_)) : constant(_), histogram) : threshold;
5504           };
5505
5506           return histogram;
5507         }
5508
5509         function threshold(values, p, valueof) {
5510           if (valueof == null) valueof = number;
5511           if (!(n = values.length)) return;
5512           if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);
5513           if (p >= 1) return +valueof(values[n - 1], n - 1, values);
5514           var n,
5515               i = (n - 1) * p,
5516               i0 = Math.floor(i),
5517               value0 = +valueof(values[i0], i0, values),
5518               value1 = +valueof(values[i0 + 1], i0 + 1, values);
5519           return value0 + (value1 - value0) * (i - i0);
5520         }
5521
5522         function freedmanDiaconis(values, min, max) {
5523           values = map$2.call(values, number).sort(d3_ascending);
5524           return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
5525         }
5526
5527         function scott(values, min, max) {
5528           return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
5529         }
5530
5531         function max$2(values, valueof) {
5532           var n = values.length,
5533               i = -1,
5534               value,
5535               max;
5536
5537           if (valueof == null) {
5538             while (++i < n) { // Find the first comparable value.
5539               if ((value = values[i]) != null && value >= value) {
5540                 max = value;
5541                 while (++i < n) { // Compare the remaining values.
5542                   if ((value = values[i]) != null && value > max) {
5543                     max = value;
5544                   }
5545                 }
5546               }
5547             }
5548           }
5549
5550           else {
5551             while (++i < n) { // Find the first comparable value.
5552               if ((value = valueof(values[i], i, values)) != null && value >= value) {
5553                 max = value;
5554                 while (++i < n) { // Compare the remaining values.
5555                   if ((value = valueof(values[i], i, values)) != null && value > max) {
5556                     max = value;
5557                   }
5558                 }
5559               }
5560             }
5561           }
5562
5563           return max;
5564         }
5565
5566         function mean(values, valueof) {
5567           var n = values.length,
5568               m = n,
5569               i = -1,
5570               value,
5571               sum = 0;
5572
5573           if (valueof == null) {
5574             while (++i < n) {
5575               if (!isNaN(value = number(values[i]))) sum += value;
5576               else --m;
5577             }
5578           }
5579
5580           else {
5581             while (++i < n) {
5582               if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;
5583               else --m;
5584             }
5585           }
5586
5587           if (m) return sum / m;
5588         }
5589
5590         function d3_median(values, valueof) {
5591           var n = values.length,
5592               i = -1,
5593               value,
5594               numbers = [];
5595
5596           if (valueof == null) {
5597             while (++i < n) {
5598               if (!isNaN(value = number(values[i]))) {
5599                 numbers.push(value);
5600               }
5601             }
5602           }
5603
5604           else {
5605             while (++i < n) {
5606               if (!isNaN(value = number(valueof(values[i], i, values)))) {
5607                 numbers.push(value);
5608               }
5609             }
5610           }
5611
5612           return threshold(numbers.sort(d3_ascending), 0.5);
5613         }
5614
5615         function merge(arrays) {
5616           var n = arrays.length,
5617               m,
5618               i = -1,
5619               j = 0,
5620               merged,
5621               array;
5622
5623           while (++i < n) j += arrays[i].length;
5624           merged = new Array(j);
5625
5626           while (--n >= 0) {
5627             array = arrays[n];
5628             m = array.length;
5629             while (--m >= 0) {
5630               merged[--j] = array[m];
5631             }
5632           }
5633
5634           return merged;
5635         }
5636
5637         function min(values, valueof) {
5638           var n = values.length,
5639               i = -1,
5640               value,
5641               min;
5642
5643           if (valueof == null) {
5644             while (++i < n) { // Find the first comparable value.
5645               if ((value = values[i]) != null && value >= value) {
5646                 min = value;
5647                 while (++i < n) { // Compare the remaining values.
5648                   if ((value = values[i]) != null && min > value) {
5649                     min = value;
5650                   }
5651                 }
5652               }
5653             }
5654           }
5655
5656           else {
5657             while (++i < n) { // Find the first comparable value.
5658               if ((value = valueof(values[i], i, values)) != null && value >= value) {
5659                 min = value;
5660                 while (++i < n) { // Compare the remaining values.
5661                   if ((value = valueof(values[i], i, values)) != null && min > value) {
5662                     min = value;
5663                   }
5664                 }
5665               }
5666             }
5667           }
5668
5669           return min;
5670         }
5671
5672         function permute(array, indexes) {
5673           var i = indexes.length, permutes = new Array(i);
5674           while (i--) permutes[i] = array[indexes[i]];
5675           return permutes;
5676         }
5677
5678         function scan(values, compare) {
5679           if (!(n = values.length)) return;
5680           var n,
5681               i = 0,
5682               j = 0,
5683               xi,
5684               xj = values[j];
5685
5686           if (compare == null) compare = d3_ascending;
5687
5688           while (++i < n) {
5689             if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {
5690               xj = xi, j = i;
5691             }
5692           }
5693
5694           if (compare(xj, xj) === 0) return j;
5695         }
5696
5697         function shuffle(array, i0, i1) {
5698           var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
5699               t,
5700               i;
5701
5702           while (m) {
5703             i = Math.random() * m-- | 0;
5704             t = array[m + i0];
5705             array[m + i0] = array[i + i0];
5706             array[i + i0] = t;
5707           }
5708
5709           return array;
5710         }
5711
5712         function sum(values, valueof) {
5713           var n = values.length,
5714               i = -1,
5715               value,
5716               sum = 0;
5717
5718           if (valueof == null) {
5719             while (++i < n) {
5720               if (value = +values[i]) sum += value; // Note: zero and null are equivalent.
5721             }
5722           }
5723
5724           else {
5725             while (++i < n) {
5726               if (value = +valueof(values[i], i, values)) sum += value;
5727             }
5728           }
5729
5730           return sum;
5731         }
5732
5733         function transpose(matrix) {
5734           if (!(n = matrix.length)) return [];
5735           for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
5736             for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
5737               row[j] = matrix[j][i];
5738             }
5739           }
5740           return transpose;
5741         }
5742
5743         function length(d) {
5744           return d.length;
5745         }
5746
5747         function zip() {
5748           return transpose(arguments);
5749         }
5750
5751         var slice$5 = Array.prototype.slice;
5752
5753         function identity$1(x) {
5754           return x;
5755         }
5756
5757         var top = 1,
5758             right = 2,
5759             bottom = 3,
5760             left = 4,
5761             epsilon = 1e-6;
5762
5763         function translateX(x) {
5764           return "translate(" + (x + 0.5) + ",0)";
5765         }
5766
5767         function translateY(y) {
5768           return "translate(0," + (y + 0.5) + ")";
5769         }
5770
5771         function number$1(scale) {
5772           return function(d) {
5773             return +scale(d);
5774           };
5775         }
5776
5777         function center(scale) {
5778           var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.
5779           if (scale.round()) offset = Math.round(offset);
5780           return function(d) {
5781             return +scale(d) + offset;
5782           };
5783         }
5784
5785         function entering() {
5786           return !this.__axis;
5787         }
5788
5789         function axis(orient, scale) {
5790           var tickArguments = [],
5791               tickValues = null,
5792               tickFormat = null,
5793               tickSizeInner = 6,
5794               tickSizeOuter = 6,
5795               tickPadding = 3,
5796               k = orient === top || orient === left ? -1 : 1,
5797               x = orient === left || orient === right ? "x" : "y",
5798               transform = orient === top || orient === bottom ? translateX : translateY;
5799
5800           function axis(context) {
5801             var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
5802                 format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
5803                 spacing = Math.max(tickSizeInner, 0) + tickPadding,
5804                 range = scale.range(),
5805                 range0 = +range[0] + 0.5,
5806                 range1 = +range[range.length - 1] + 0.5,
5807                 position = (scale.bandwidth ? center : number$1)(scale.copy()),
5808                 selection = context.selection ? context.selection() : context,
5809                 path = selection.selectAll(".domain").data([null]),
5810                 tick = selection.selectAll(".tick").data(values, scale).order(),
5811                 tickExit = tick.exit(),
5812                 tickEnter = tick.enter().append("g").attr("class", "tick"),
5813                 line = tick.select("line"),
5814                 text = tick.select("text");
5815
5816             path = path.merge(path.enter().insert("path", ".tick")
5817                 .attr("class", "domain")
5818                 .attr("stroke", "currentColor"));
5819
5820             tick = tick.merge(tickEnter);
5821
5822             line = line.merge(tickEnter.append("line")
5823                 .attr("stroke", "currentColor")
5824                 .attr(x + "2", k * tickSizeInner));
5825
5826             text = text.merge(tickEnter.append("text")
5827                 .attr("fill", "currentColor")
5828                 .attr(x, k * spacing)
5829                 .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
5830
5831             if (context !== selection) {
5832               path = path.transition(context);
5833               tick = tick.transition(context);
5834               line = line.transition(context);
5835               text = text.transition(context);
5836
5837               tickExit = tickExit.transition(context)
5838                   .attr("opacity", epsilon)
5839                   .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
5840
5841               tickEnter
5842                   .attr("opacity", epsilon)
5843                   .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
5844             }
5845
5846             tickExit.remove();
5847
5848             path
5849                 .attr("d", orient === left || orient == right
5850                     ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1)
5851                     : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1));
5852
5853             tick
5854                 .attr("opacity", 1)
5855                 .attr("transform", function(d) { return transform(position(d)); });
5856
5857             line
5858                 .attr(x + "2", k * tickSizeInner);
5859
5860             text
5861                 .attr(x, k * spacing)
5862                 .text(format);
5863
5864             selection.filter(entering)
5865                 .attr("fill", "none")
5866                 .attr("font-size", 10)
5867                 .attr("font-family", "sans-serif")
5868                 .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
5869
5870             selection
5871                 .each(function() { this.__axis = position; });
5872           }
5873
5874           axis.scale = function(_) {
5875             return arguments.length ? (scale = _, axis) : scale;
5876           };
5877
5878           axis.ticks = function() {
5879             return tickArguments = slice$5.call(arguments), axis;
5880           };
5881
5882           axis.tickArguments = function(_) {
5883             return arguments.length ? (tickArguments = _ == null ? [] : slice$5.call(_), axis) : tickArguments.slice();
5884           };
5885
5886           axis.tickValues = function(_) {
5887             return arguments.length ? (tickValues = _ == null ? null : slice$5.call(_), axis) : tickValues && tickValues.slice();
5888           };
5889
5890           axis.tickFormat = function(_) {
5891             return arguments.length ? (tickFormat = _, axis) : tickFormat;
5892           };
5893
5894           axis.tickSize = function(_) {
5895             return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
5896           };
5897
5898           axis.tickSizeInner = function(_) {
5899             return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
5900           };
5901
5902           axis.tickSizeOuter = function(_) {
5903             return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
5904           };
5905
5906           axis.tickPadding = function(_) {
5907             return arguments.length ? (tickPadding = +_, axis) : tickPadding;
5908           };
5909
5910           return axis;
5911         }
5912
5913         function axisTop(scale) {
5914           return axis(top, scale);
5915         }
5916
5917         function axisRight(scale) {
5918           return axis(right, scale);
5919         }
5920
5921         function axisBottom(scale) {
5922           return axis(bottom, scale);
5923         }
5924
5925         function axisLeft(scale) {
5926           return axis(left, scale);
5927         }
5928
5929         var noop$2 = {value: function() {}};
5930
5931         function dispatch() {
5932           for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
5933             if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
5934             _[t] = [];
5935           }
5936           return new Dispatch(_);
5937         }
5938
5939         function Dispatch(_) {
5940           this._ = _;
5941         }
5942
5943         function parseTypenames(typenames, types) {
5944           return typenames.trim().split(/^|\s+/).map(function(t) {
5945             var name = "", i = t.indexOf(".");
5946             if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
5947             if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
5948             return {type: t, name: name};
5949           });
5950         }
5951
5952         Dispatch.prototype = dispatch.prototype = {
5953           constructor: Dispatch,
5954           on: function(typename, callback) {
5955             var _ = this._,
5956                 T = parseTypenames(typename + "", _),
5957                 t,
5958                 i = -1,
5959                 n = T.length;
5960
5961             // If no callback was specified, return the callback of the given type and name.
5962             if (arguments.length < 2) {
5963               while (++i < n) if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) return t;
5964               return;
5965             }
5966
5967             // If a type was specified, set the callback for the given type and name.
5968             // Otherwise, if a null callback was specified, remove callbacks of the given name.
5969             if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
5970             while (++i < n) {
5971               if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
5972               else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
5973             }
5974
5975             return this;
5976           },
5977           copy: function() {
5978             var copy = {}, _ = this._;
5979             for (var t in _) copy[t] = _[t].slice();
5980             return new Dispatch(copy);
5981           },
5982           call: function(type, that) {
5983             if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
5984             if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
5985             for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
5986           },
5987           apply: function(type, that, args) {
5988             if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
5989             for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
5990           }
5991         };
5992
5993         function get$1(type, name) {
5994           for (var i = 0, n = type.length, c; i < n; ++i) {
5995             if ((c = type[i]).name === name) {
5996               return c.value;
5997             }
5998           }
5999         }
6000
6001         function set(type, name, callback) {
6002           for (var i = 0, n = type.length; i < n; ++i) {
6003             if (type[i].name === name) {
6004               type[i] = noop$2, type = type.slice(0, i).concat(type.slice(i + 1));
6005               break;
6006             }
6007           }
6008           if (callback != null) type.push({name: name, value: callback});
6009           return type;
6010         }
6011
6012         var xhtml = "http://www.w3.org/1999/xhtml";
6013
6014         var namespaces = {
6015           svg: "http://www.w3.org/2000/svg",
6016           xhtml: xhtml,
6017           xlink: "http://www.w3.org/1999/xlink",
6018           xml: "http://www.w3.org/XML/1998/namespace",
6019           xmlns: "http://www.w3.org/2000/xmlns/"
6020         };
6021
6022         function namespace(name) {
6023           var prefix = name += "", i = prefix.indexOf(":");
6024           if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
6025           return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
6026         }
6027
6028         function creatorInherit(name) {
6029           return function() {
6030             var document = this.ownerDocument,
6031                 uri = this.namespaceURI;
6032             return uri === xhtml && document.documentElement.namespaceURI === xhtml
6033                 ? document.createElement(name)
6034                 : document.createElementNS(uri, name);
6035           };
6036         }
6037
6038         function creatorFixed(fullname) {
6039           return function() {
6040             return this.ownerDocument.createElementNS(fullname.space, fullname.local);
6041           };
6042         }
6043
6044         function creator(name) {
6045           var fullname = namespace(name);
6046           return (fullname.local
6047               ? creatorFixed
6048               : creatorInherit)(fullname);
6049         }
6050
6051         function none() {}
6052
6053         function selector(selector) {
6054           return selector == null ? none : function() {
6055             return this.querySelector(selector);
6056           };
6057         }
6058
6059         function selection_select(select) {
6060           if (typeof select !== "function") select = selector(select);
6061
6062           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
6063             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
6064               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
6065                 if ("__data__" in node) subnode.__data__ = node.__data__;
6066                 subgroup[i] = subnode;
6067               }
6068             }
6069           }
6070
6071           return new Selection(subgroups, this._parents);
6072         }
6073
6074         function empty() {
6075           return [];
6076         }
6077
6078         function selectorAll(selector) {
6079           return selector == null ? empty : function() {
6080             return this.querySelectorAll(selector);
6081           };
6082         }
6083
6084         function selection_selectAll(select) {
6085           if (typeof select !== "function") select = selectorAll(select);
6086
6087           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
6088             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
6089               if (node = group[i]) {
6090                 subgroups.push(select.call(node, node.__data__, i, group));
6091                 parents.push(node);
6092               }
6093             }
6094           }
6095
6096           return new Selection(subgroups, parents);
6097         }
6098
6099         function matcher(selector) {
6100           return function() {
6101             return this.matches(selector);
6102           };
6103         }
6104
6105         function selection_filter(match) {
6106           if (typeof match !== "function") match = matcher(match);
6107
6108           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
6109             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
6110               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
6111                 subgroup.push(node);
6112               }
6113             }
6114           }
6115
6116           return new Selection(subgroups, this._parents);
6117         }
6118
6119         function sparse(update) {
6120           return new Array(update.length);
6121         }
6122
6123         function selection_enter() {
6124           return new Selection(this._enter || this._groups.map(sparse), this._parents);
6125         }
6126
6127         function EnterNode(parent, datum) {
6128           this.ownerDocument = parent.ownerDocument;
6129           this.namespaceURI = parent.namespaceURI;
6130           this._next = null;
6131           this._parent = parent;
6132           this.__data__ = datum;
6133         }
6134
6135         EnterNode.prototype = {
6136           constructor: EnterNode,
6137           appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
6138           insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
6139           querySelector: function(selector) { return this._parent.querySelector(selector); },
6140           querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
6141         };
6142
6143         function constant$1(x) {
6144           return function() {
6145             return x;
6146           };
6147         }
6148
6149         var keyPrefix = "$"; // Protect against keys like “__proto__”.
6150
6151         function bindIndex(parent, group, enter, update, exit, data) {
6152           var i = 0,
6153               node,
6154               groupLength = group.length,
6155               dataLength = data.length;
6156
6157           // Put any non-null nodes that fit into update.
6158           // Put any null nodes into enter.
6159           // Put any remaining data into enter.
6160           for (; i < dataLength; ++i) {
6161             if (node = group[i]) {
6162               node.__data__ = data[i];
6163               update[i] = node;
6164             } else {
6165               enter[i] = new EnterNode(parent, data[i]);
6166             }
6167           }
6168
6169           // Put any non-null nodes that don’t fit into exit.
6170           for (; i < groupLength; ++i) {
6171             if (node = group[i]) {
6172               exit[i] = node;
6173             }
6174           }
6175         }
6176
6177         function bindKey(parent, group, enter, update, exit, data, key) {
6178           var i,
6179               node,
6180               nodeByKeyValue = {},
6181               groupLength = group.length,
6182               dataLength = data.length,
6183               keyValues = new Array(groupLength),
6184               keyValue;
6185
6186           // Compute the key for each node.
6187           // If multiple nodes have the same key, the duplicates are added to exit.
6188           for (i = 0; i < groupLength; ++i) {
6189             if (node = group[i]) {
6190               keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
6191               if (keyValue in nodeByKeyValue) {
6192                 exit[i] = node;
6193               } else {
6194                 nodeByKeyValue[keyValue] = node;
6195               }
6196             }
6197           }
6198
6199           // Compute the key for each datum.
6200           // If there a node associated with this key, join and add it to update.
6201           // If there is not (or the key is a duplicate), add it to enter.
6202           for (i = 0; i < dataLength; ++i) {
6203             keyValue = keyPrefix + key.call(parent, data[i], i, data);
6204             if (node = nodeByKeyValue[keyValue]) {
6205               update[i] = node;
6206               node.__data__ = data[i];
6207               nodeByKeyValue[keyValue] = null;
6208             } else {
6209               enter[i] = new EnterNode(parent, data[i]);
6210             }
6211           }
6212
6213           // Add any remaining nodes that were not bound to data to exit.
6214           for (i = 0; i < groupLength; ++i) {
6215             if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
6216               exit[i] = node;
6217             }
6218           }
6219         }
6220
6221         function selection_data(value, key) {
6222           if (!value) {
6223             data = new Array(this.size()), j = -1;
6224             this.each(function(d) { data[++j] = d; });
6225             return data;
6226           }
6227
6228           var bind = key ? bindKey : bindIndex,
6229               parents = this._parents,
6230               groups = this._groups;
6231
6232           if (typeof value !== "function") value = constant$1(value);
6233
6234           for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
6235             var parent = parents[j],
6236                 group = groups[j],
6237                 groupLength = group.length,
6238                 data = value.call(parent, parent && parent.__data__, j, parents),
6239                 dataLength = data.length,
6240                 enterGroup = enter[j] = new Array(dataLength),
6241                 updateGroup = update[j] = new Array(dataLength),
6242                 exitGroup = exit[j] = new Array(groupLength);
6243
6244             bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
6245
6246             // Now connect the enter nodes to their following update node, such that
6247             // appendChild can insert the materialized enter node before this node,
6248             // rather than at the end of the parent node.
6249             for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
6250               if (previous = enterGroup[i0]) {
6251                 if (i0 >= i1) i1 = i0 + 1;
6252                 while (!(next = updateGroup[i1]) && ++i1 < dataLength);
6253                 previous._next = next || null;
6254               }
6255             }
6256           }
6257
6258           update = new Selection(update, parents);
6259           update._enter = enter;
6260           update._exit = exit;
6261           return update;
6262         }
6263
6264         function selection_exit() {
6265           return new Selection(this._exit || this._groups.map(sparse), this._parents);
6266         }
6267
6268         function selection_join(onenter, onupdate, onexit) {
6269           var enter = this.enter(), update = this, exit = this.exit();
6270           enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");
6271           if (onupdate != null) update = onupdate(update);
6272           if (onexit == null) exit.remove(); else onexit(exit);
6273           return enter && update ? enter.merge(update).order() : update;
6274         }
6275
6276         function selection_merge(selection) {
6277
6278           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) {
6279             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
6280               if (node = group0[i] || group1[i]) {
6281                 merge[i] = node;
6282               }
6283             }
6284           }
6285
6286           for (; j < m0; ++j) {
6287             merges[j] = groups0[j];
6288           }
6289
6290           return new Selection(merges, this._parents);
6291         }
6292
6293         function selection_order() {
6294
6295           for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
6296             for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
6297               if (node = group[i]) {
6298                 if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
6299                 next = node;
6300               }
6301             }
6302           }
6303
6304           return this;
6305         }
6306
6307         function selection_sort(compare) {
6308           if (!compare) compare = ascending;
6309
6310           function compareNode(a, b) {
6311             return a && b ? compare(a.__data__, b.__data__) : !a - !b;
6312           }
6313
6314           for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
6315             for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
6316               if (node = group[i]) {
6317                 sortgroup[i] = node;
6318               }
6319             }
6320             sortgroup.sort(compareNode);
6321           }
6322
6323           return new Selection(sortgroups, this._parents).order();
6324         }
6325
6326         function ascending(a, b) {
6327           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
6328         }
6329
6330         function selection_call() {
6331           var callback = arguments[0];
6332           arguments[0] = this;
6333           callback.apply(null, arguments);
6334           return this;
6335         }
6336
6337         function selection_nodes() {
6338           var nodes = new Array(this.size()), i = -1;
6339           this.each(function() { nodes[++i] = this; });
6340           return nodes;
6341         }
6342
6343         function selection_node() {
6344
6345           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
6346             for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
6347               var node = group[i];
6348               if (node) return node;
6349             }
6350           }
6351
6352           return null;
6353         }
6354
6355         function selection_size() {
6356           var size = 0;
6357           this.each(function() { ++size; });
6358           return size;
6359         }
6360
6361         function selection_empty() {
6362           return !this.node();
6363         }
6364
6365         function selection_each(callback) {
6366
6367           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
6368             for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
6369               if (node = group[i]) callback.call(node, node.__data__, i, group);
6370             }
6371           }
6372
6373           return this;
6374         }
6375
6376         function attrRemove(name) {
6377           return function() {
6378             this.removeAttribute(name);
6379           };
6380         }
6381
6382         function attrRemoveNS(fullname) {
6383           return function() {
6384             this.removeAttributeNS(fullname.space, fullname.local);
6385           };
6386         }
6387
6388         function attrConstant(name, value) {
6389           return function() {
6390             this.setAttribute(name, value);
6391           };
6392         }
6393
6394         function attrConstantNS(fullname, value) {
6395           return function() {
6396             this.setAttributeNS(fullname.space, fullname.local, value);
6397           };
6398         }
6399
6400         function attrFunction(name, value) {
6401           return function() {
6402             var v = value.apply(this, arguments);
6403             if (v == null) this.removeAttribute(name);
6404             else this.setAttribute(name, v);
6405           };
6406         }
6407
6408         function attrFunctionNS(fullname, value) {
6409           return function() {
6410             var v = value.apply(this, arguments);
6411             if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
6412             else this.setAttributeNS(fullname.space, fullname.local, v);
6413           };
6414         }
6415
6416         function selection_attr(name, value) {
6417           var fullname = namespace(name);
6418
6419           if (arguments.length < 2) {
6420             var node = this.node();
6421             return fullname.local
6422                 ? node.getAttributeNS(fullname.space, fullname.local)
6423                 : node.getAttribute(fullname);
6424           }
6425
6426           return this.each((value == null
6427               ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
6428               ? (fullname.local ? attrFunctionNS : attrFunction)
6429               : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
6430         }
6431
6432         function defaultView(node) {
6433           return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
6434               || (node.document && node) // node is a Window
6435               || node.defaultView; // node is a Document
6436         }
6437
6438         function styleRemove(name) {
6439           return function() {
6440             this.style.removeProperty(name);
6441           };
6442         }
6443
6444         function styleConstant(name, value, priority) {
6445           return function() {
6446             this.style.setProperty(name, value, priority);
6447           };
6448         }
6449
6450         function styleFunction(name, value, priority) {
6451           return function() {
6452             var v = value.apply(this, arguments);
6453             if (v == null) this.style.removeProperty(name);
6454             else this.style.setProperty(name, v, priority);
6455           };
6456         }
6457
6458         function selection_style(name, value, priority) {
6459           return arguments.length > 1
6460               ? this.each((value == null
6461                     ? styleRemove : typeof value === "function"
6462                     ? styleFunction
6463                     : styleConstant)(name, value, priority == null ? "" : priority))
6464               : styleValue(this.node(), name);
6465         }
6466
6467         function styleValue(node, name) {
6468           return node.style.getPropertyValue(name)
6469               || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
6470         }
6471
6472         function propertyRemove(name) {
6473           return function() {
6474             delete this[name];
6475           };
6476         }
6477
6478         function propertyConstant(name, value) {
6479           return function() {
6480             this[name] = value;
6481           };
6482         }
6483
6484         function propertyFunction(name, value) {
6485           return function() {
6486             var v = value.apply(this, arguments);
6487             if (v == null) delete this[name];
6488             else this[name] = v;
6489           };
6490         }
6491
6492         function selection_property(name, value) {
6493           return arguments.length > 1
6494               ? this.each((value == null
6495                   ? propertyRemove : typeof value === "function"
6496                   ? propertyFunction
6497                   : propertyConstant)(name, value))
6498               : this.node()[name];
6499         }
6500
6501         function classArray(string) {
6502           return string.trim().split(/^|\s+/);
6503         }
6504
6505         function classList(node) {
6506           return node.classList || new ClassList(node);
6507         }
6508
6509         function ClassList(node) {
6510           this._node = node;
6511           this._names = classArray(node.getAttribute("class") || "");
6512         }
6513
6514         ClassList.prototype = {
6515           add: function(name) {
6516             var i = this._names.indexOf(name);
6517             if (i < 0) {
6518               this._names.push(name);
6519               this._node.setAttribute("class", this._names.join(" "));
6520             }
6521           },
6522           remove: function(name) {
6523             var i = this._names.indexOf(name);
6524             if (i >= 0) {
6525               this._names.splice(i, 1);
6526               this._node.setAttribute("class", this._names.join(" "));
6527             }
6528           },
6529           contains: function(name) {
6530             return this._names.indexOf(name) >= 0;
6531           }
6532         };
6533
6534         function classedAdd(node, names) {
6535           var list = classList(node), i = -1, n = names.length;
6536           while (++i < n) list.add(names[i]);
6537         }
6538
6539         function classedRemove(node, names) {
6540           var list = classList(node), i = -1, n = names.length;
6541           while (++i < n) list.remove(names[i]);
6542         }
6543
6544         function classedTrue(names) {
6545           return function() {
6546             classedAdd(this, names);
6547           };
6548         }
6549
6550         function classedFalse(names) {
6551           return function() {
6552             classedRemove(this, names);
6553           };
6554         }
6555
6556         function classedFunction(names, value) {
6557           return function() {
6558             (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
6559           };
6560         }
6561
6562         function selection_classed(name, value) {
6563           var names = classArray(name + "");
6564
6565           if (arguments.length < 2) {
6566             var list = classList(this.node()), i = -1, n = names.length;
6567             while (++i < n) if (!list.contains(names[i])) return false;
6568             return true;
6569           }
6570
6571           return this.each((typeof value === "function"
6572               ? classedFunction : value
6573               ? classedTrue
6574               : classedFalse)(names, value));
6575         }
6576
6577         function textRemove() {
6578           this.textContent = "";
6579         }
6580
6581         function textConstant(value) {
6582           return function() {
6583             this.textContent = value;
6584           };
6585         }
6586
6587         function textFunction(value) {
6588           return function() {
6589             var v = value.apply(this, arguments);
6590             this.textContent = v == null ? "" : v;
6591           };
6592         }
6593
6594         function selection_text(value) {
6595           return arguments.length
6596               ? this.each(value == null
6597                   ? textRemove : (typeof value === "function"
6598                   ? textFunction
6599                   : textConstant)(value))
6600               : this.node().textContent;
6601         }
6602
6603         function htmlRemove() {
6604           this.innerHTML = "";
6605         }
6606
6607         function htmlConstant(value) {
6608           return function() {
6609             this.innerHTML = value;
6610           };
6611         }
6612
6613         function htmlFunction(value) {
6614           return function() {
6615             var v = value.apply(this, arguments);
6616             this.innerHTML = v == null ? "" : v;
6617           };
6618         }
6619
6620         function selection_html(value) {
6621           return arguments.length
6622               ? this.each(value == null
6623                   ? htmlRemove : (typeof value === "function"
6624                   ? htmlFunction
6625                   : htmlConstant)(value))
6626               : this.node().innerHTML;
6627         }
6628
6629         function raise() {
6630           if (this.nextSibling) this.parentNode.appendChild(this);
6631         }
6632
6633         function selection_raise() {
6634           return this.each(raise);
6635         }
6636
6637         function lower() {
6638           if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
6639         }
6640
6641         function selection_lower() {
6642           return this.each(lower);
6643         }
6644
6645         function selection_append(name) {
6646           var create = typeof name === "function" ? name : creator(name);
6647           return this.select(function() {
6648             return this.appendChild(create.apply(this, arguments));
6649           });
6650         }
6651
6652         function constantNull() {
6653           return null;
6654         }
6655
6656         function selection_insert(name, before) {
6657           var create = typeof name === "function" ? name : creator(name),
6658               select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
6659           return this.select(function() {
6660             return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
6661           });
6662         }
6663
6664         function remove() {
6665           var parent = this.parentNode;
6666           if (parent) parent.removeChild(this);
6667         }
6668
6669         function selection_remove() {
6670           return this.each(remove);
6671         }
6672
6673         function selection_cloneShallow() {
6674           return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);
6675         }
6676
6677         function selection_cloneDeep() {
6678           return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);
6679         }
6680
6681         function selection_clone(deep) {
6682           return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
6683         }
6684
6685         function selection_datum(value) {
6686           return arguments.length
6687               ? this.property("__data__", value)
6688               : this.node().__data__;
6689         }
6690
6691         var filterEvents = {};
6692
6693         var event = null;
6694
6695         if (typeof document !== "undefined") {
6696           var element = document.documentElement;
6697           if (!("onmouseenter" in element)) {
6698             filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
6699           }
6700         }
6701
6702         function filterContextListener(listener, index, group) {
6703           listener = contextListener(listener, index, group);
6704           return function(event) {
6705             var related = event.relatedTarget;
6706             if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
6707               listener.call(this, event);
6708             }
6709           };
6710         }
6711
6712         function contextListener(listener, index, group) {
6713           return function(event1) {
6714             var event0 = event; // Events can be reentrant (e.g., focus).
6715             event = event1;
6716             try {
6717               listener.call(this, this.__data__, index, group);
6718             } finally {
6719               event = event0;
6720             }
6721           };
6722         }
6723
6724         function parseTypenames$1(typenames) {
6725           return typenames.trim().split(/^|\s+/).map(function(t) {
6726             var name = "", i = t.indexOf(".");
6727             if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
6728             return {type: t, name: name};
6729           });
6730         }
6731
6732         function onRemove(typename) {
6733           return function() {
6734             var on = this.__on;
6735             if (!on) return;
6736             for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
6737               if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
6738                 this.removeEventListener(o.type, o.listener, o.capture);
6739               } else {
6740                 on[++i] = o;
6741               }
6742             }
6743             if (++i) on.length = i;
6744             else delete this.__on;
6745           };
6746         }
6747
6748         function onAdd(typename, value, capture) {
6749           var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
6750           return function(d, i, group) {
6751             var on = this.__on, o, listener = wrap(value, i, group);
6752             if (on) for (var j = 0, m = on.length; j < m; ++j) {
6753               if ((o = on[j]).type === typename.type && o.name === typename.name) {
6754                 this.removeEventListener(o.type, o.listener, o.capture);
6755                 this.addEventListener(o.type, o.listener = listener, o.capture = capture);
6756                 o.value = value;
6757                 return;
6758               }
6759             }
6760             this.addEventListener(typename.type, listener, capture);
6761             o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
6762             if (!on) this.__on = [o];
6763             else on.push(o);
6764           };
6765         }
6766
6767         function selection_on(typename, value, capture) {
6768           var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
6769
6770           if (arguments.length < 2) {
6771             var on = this.node().__on;
6772             if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
6773               for (i = 0, o = on[j]; i < n; ++i) {
6774                 if ((t = typenames[i]).type === o.type && t.name === o.name) {
6775                   return o.value;
6776                 }
6777               }
6778             }
6779             return;
6780           }
6781
6782           on = value ? onAdd : onRemove;
6783           if (capture == null) capture = false;
6784           for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
6785           return this;
6786         }
6787
6788         function customEvent(event1, listener, that, args) {
6789           var event0 = event;
6790           event1.sourceEvent = event;
6791           event = event1;
6792           try {
6793             return listener.apply(that, args);
6794           } finally {
6795             event = event0;
6796           }
6797         }
6798
6799         function dispatchEvent(node, type, params) {
6800           var window = defaultView(node),
6801               event = window.CustomEvent;
6802
6803           if (typeof event === "function") {
6804             event = new event(type, params);
6805           } else {
6806             event = window.document.createEvent("Event");
6807             if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
6808             else event.initEvent(type, false, false);
6809           }
6810
6811           node.dispatchEvent(event);
6812         }
6813
6814         function dispatchConstant(type, params) {
6815           return function() {
6816             return dispatchEvent(this, type, params);
6817           };
6818         }
6819
6820         function dispatchFunction(type, params) {
6821           return function() {
6822             return dispatchEvent(this, type, params.apply(this, arguments));
6823           };
6824         }
6825
6826         function selection_dispatch(type, params) {
6827           return this.each((typeof params === "function"
6828               ? dispatchFunction
6829               : dispatchConstant)(type, params));
6830         }
6831
6832         var root$1 = [null];
6833
6834         function Selection(groups, parents) {
6835           this._groups = groups;
6836           this._parents = parents;
6837         }
6838
6839         function selection() {
6840           return new Selection([[document.documentElement]], root$1);
6841         }
6842
6843         Selection.prototype = selection.prototype = {
6844           constructor: Selection,
6845           select: selection_select,
6846           selectAll: selection_selectAll,
6847           filter: selection_filter,
6848           data: selection_data,
6849           enter: selection_enter,
6850           exit: selection_exit,
6851           join: selection_join,
6852           merge: selection_merge,
6853           order: selection_order,
6854           sort: selection_sort,
6855           call: selection_call,
6856           nodes: selection_nodes,
6857           node: selection_node,
6858           size: selection_size,
6859           empty: selection_empty,
6860           each: selection_each,
6861           attr: selection_attr,
6862           style: selection_style,
6863           property: selection_property,
6864           classed: selection_classed,
6865           text: selection_text,
6866           html: selection_html,
6867           raise: selection_raise,
6868           lower: selection_lower,
6869           append: selection_append,
6870           insert: selection_insert,
6871           remove: selection_remove,
6872           clone: selection_clone,
6873           datum: selection_datum,
6874           on: selection_on,
6875           dispatch: selection_dispatch
6876         };
6877
6878         function d3_select(selector) {
6879           return typeof selector === "string"
6880               ? new Selection([[document.querySelector(selector)]], [document.documentElement])
6881               : new Selection([[selector]], root$1);
6882         }
6883
6884         function create$5(name) {
6885           return d3_select(creator(name).call(document.documentElement));
6886         }
6887
6888         var nextId = 0;
6889
6890         function local() {
6891           return new Local;
6892         }
6893
6894         function Local() {
6895           this._ = "@" + (++nextId).toString(36);
6896         }
6897
6898         Local.prototype = local.prototype = {
6899           constructor: Local,
6900           get: function(node) {
6901             var id = this._;
6902             while (!(id in node)) if (!(node = node.parentNode)) return;
6903             return node[id];
6904           },
6905           set: function(node, value) {
6906             return node[this._] = value;
6907           },
6908           remove: function(node) {
6909             return this._ in node && delete node[this._];
6910           },
6911           toString: function() {
6912             return this._;
6913           }
6914         };
6915
6916         function sourceEvent() {
6917           var current = event, source;
6918           while (source = current.sourceEvent) current = source;
6919           return current;
6920         }
6921
6922         function point(node, event) {
6923           var svg = node.ownerSVGElement || node;
6924
6925           if (svg.createSVGPoint) {
6926             var point = svg.createSVGPoint();
6927             point.x = event.clientX, point.y = event.clientY;
6928             point = point.matrixTransform(node.getScreenCTM().inverse());
6929             return [point.x, point.y];
6930           }
6931
6932           var rect = node.getBoundingClientRect();
6933           return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
6934         }
6935
6936         function d3_mouse(node) {
6937           var event = sourceEvent();
6938           if (event.changedTouches) event = event.changedTouches[0];
6939           return point(node, event);
6940         }
6941
6942         function d3_selectAll(selector) {
6943           return typeof selector === "string"
6944               ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
6945               : new Selection([selector == null ? [] : selector], root$1);
6946         }
6947
6948         function touch(node, touches, identifier) {
6949           if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
6950
6951           for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
6952             if ((touch = touches[i]).identifier === identifier) {
6953               return point(node, touch);
6954             }
6955           }
6956
6957           return null;
6958         }
6959
6960         function d3_touches(node, touches) {
6961           if (touches == null) touches = sourceEvent().touches;
6962
6963           for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
6964             points[i] = point(node, touches[i]);
6965           }
6966
6967           return points;
6968         }
6969
6970         function nopropagation() {
6971           event.stopImmediatePropagation();
6972         }
6973
6974         function noevent() {
6975           event.preventDefault();
6976           event.stopImmediatePropagation();
6977         }
6978
6979         function dragDisable(view) {
6980           var root = view.document.documentElement,
6981               selection = d3_select(view).on("dragstart.drag", noevent, true);
6982           if ("onselectstart" in root) {
6983             selection.on("selectstart.drag", noevent, true);
6984           } else {
6985             root.__noselect = root.style.MozUserSelect;
6986             root.style.MozUserSelect = "none";
6987           }
6988         }
6989
6990         function yesdrag(view, noclick) {
6991           var root = view.document.documentElement,
6992               selection = d3_select(view).on("dragstart.drag", null);
6993           if (noclick) {
6994             selection.on("click.drag", noevent, true);
6995             setTimeout(function() { selection.on("click.drag", null); }, 0);
6996           }
6997           if ("onselectstart" in root) {
6998             selection.on("selectstart.drag", null);
6999           } else {
7000             root.style.MozUserSelect = root.__noselect;
7001             delete root.__noselect;
7002           }
7003         }
7004
7005         function constant$2(x) {
7006           return function() {
7007             return x;
7008           };
7009         }
7010
7011         function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
7012           this.target = target;
7013           this.type = type;
7014           this.subject = subject;
7015           this.identifier = id;
7016           this.active = active;
7017           this.x = x;
7018           this.y = y;
7019           this.dx = dx;
7020           this.dy = dy;
7021           this._ = dispatch;
7022         }
7023
7024         DragEvent.prototype.on = function() {
7025           var value = this._.on.apply(this._, arguments);
7026           return value === this._ ? this : value;
7027         };
7028
7029         // Ignore right-click, since that should open the context menu.
7030         function defaultFilter() {
7031           return !event.button;
7032         }
7033
7034         function defaultContainer() {
7035           return this.parentNode;
7036         }
7037
7038         function defaultSubject(d) {
7039           return d == null ? {x: event.x, y: event.y} : d;
7040         }
7041
7042         function defaultTouchable() {
7043           return "ontouchstart" in this;
7044         }
7045
7046         function d3_drag() {
7047           var filter = defaultFilter,
7048               container = defaultContainer,
7049               subject = defaultSubject,
7050               touchable = defaultTouchable,
7051               gestures = {},
7052               listeners = dispatch("start", "drag", "end"),
7053               active = 0,
7054               mousedownx,
7055               mousedowny,
7056               mousemoving,
7057               touchending,
7058               clickDistance2 = 0;
7059
7060           function drag(selection) {
7061             selection
7062                 .on("mousedown.drag", mousedowned)
7063               .filter(touchable)
7064                 .on("touchstart.drag", touchstarted)
7065                 .on("touchmove.drag", touchmoved)
7066                 .on("touchend.drag touchcancel.drag", touchended)
7067                 .style("touch-action", "none")
7068                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
7069           }
7070
7071           function mousedowned() {
7072             if (touchending || !filter.apply(this, arguments)) return;
7073             var gesture = beforestart("mouse", container.apply(this, arguments), d3_mouse, this, arguments);
7074             if (!gesture) return;
7075             d3_select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
7076             dragDisable(event.view);
7077             nopropagation();
7078             mousemoving = false;
7079             mousedownx = event.clientX;
7080             mousedowny = event.clientY;
7081             gesture("start");
7082           }
7083
7084           function mousemoved() {
7085             noevent();
7086             if (!mousemoving) {
7087               var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
7088               mousemoving = dx * dx + dy * dy > clickDistance2;
7089             }
7090             gestures.mouse("drag");
7091           }
7092
7093           function mouseupped() {
7094             d3_select(event.view).on("mousemove.drag mouseup.drag", null);
7095             yesdrag(event.view, mousemoving);
7096             noevent();
7097             gestures.mouse("end");
7098           }
7099
7100           function touchstarted() {
7101             if (!filter.apply(this, arguments)) return;
7102             var touches = event.changedTouches,
7103                 c = container.apply(this, arguments),
7104                 n = touches.length, i, gesture;
7105
7106             for (i = 0; i < n; ++i) {
7107               if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {
7108                 nopropagation();
7109                 gesture("start");
7110               }
7111             }
7112           }
7113
7114           function touchmoved() {
7115             var touches = event.changedTouches,
7116                 n = touches.length, i, gesture;
7117
7118             for (i = 0; i < n; ++i) {
7119               if (gesture = gestures[touches[i].identifier]) {
7120                 noevent();
7121                 gesture("drag");
7122               }
7123             }
7124           }
7125
7126           function touchended() {
7127             var touches = event.changedTouches,
7128                 n = touches.length, i, gesture;
7129
7130             if (touchending) clearTimeout(touchending);
7131             touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
7132             for (i = 0; i < n; ++i) {
7133               if (gesture = gestures[touches[i].identifier]) {
7134                 nopropagation();
7135                 gesture("end");
7136               }
7137             }
7138           }
7139
7140           function beforestart(id, container, point, that, args) {
7141             var p = point(container, id), s, dx, dy,
7142                 sublisteners = listeners.copy();
7143
7144             if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
7145               if ((event.subject = s = subject.apply(that, args)) == null) return false;
7146               dx = s.x - p[0] || 0;
7147               dy = s.y - p[1] || 0;
7148               return true;
7149             })) return;
7150
7151             return function gesture(type) {
7152               var p0 = p, n;
7153               switch (type) {
7154                 case "start": gestures[id] = gesture, n = active++; break;
7155                 case "end": delete gestures[id], --active; // nobreak
7156                 case "drag": p = point(container, id), n = active; break;
7157               }
7158               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]);
7159             };
7160           }
7161
7162           drag.filter = function(_) {
7163             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter;
7164           };
7165
7166           drag.container = function(_) {
7167             return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container;
7168           };
7169
7170           drag.subject = function(_) {
7171             return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject;
7172           };
7173
7174           drag.touchable = function(_) {
7175             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable;
7176           };
7177
7178           drag.on = function() {
7179             var value = listeners.on.apply(listeners, arguments);
7180             return value === listeners ? drag : value;
7181           };
7182
7183           drag.clickDistance = function(_) {
7184             return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);
7185           };
7186
7187           return drag;
7188         }
7189
7190         function define$1(constructor, factory, prototype) {
7191           constructor.prototype = factory.prototype = prototype;
7192           prototype.constructor = constructor;
7193         }
7194
7195         function extend(parent, definition) {
7196           var prototype = Object.create(parent.prototype);
7197           for (var key in definition) prototype[key] = definition[key];
7198           return prototype;
7199         }
7200
7201         function Color() {}
7202
7203         var darker = 0.7;
7204         var brighter = 1 / darker;
7205
7206         var reI = "\\s*([+-]?\\d+)\\s*",
7207             reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
7208             reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
7209             reHex3 = /^#([0-9a-f]{3})$/,
7210             reHex6 = /^#([0-9a-f]{6})$/,
7211             reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
7212             reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
7213             reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
7214             reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
7215             reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
7216             reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
7217
7218         var named = {
7219           aliceblue: 0xf0f8ff,
7220           antiquewhite: 0xfaebd7,
7221           aqua: 0x00ffff,
7222           aquamarine: 0x7fffd4,
7223           azure: 0xf0ffff,
7224           beige: 0xf5f5dc,
7225           bisque: 0xffe4c4,
7226           black: 0x000000,
7227           blanchedalmond: 0xffebcd,
7228           blue: 0x0000ff,
7229           blueviolet: 0x8a2be2,
7230           brown: 0xa52a2a,
7231           burlywood: 0xdeb887,
7232           cadetblue: 0x5f9ea0,
7233           chartreuse: 0x7fff00,
7234           chocolate: 0xd2691e,
7235           coral: 0xff7f50,
7236           cornflowerblue: 0x6495ed,
7237           cornsilk: 0xfff8dc,
7238           crimson: 0xdc143c,
7239           cyan: 0x00ffff,
7240           darkblue: 0x00008b,
7241           darkcyan: 0x008b8b,
7242           darkgoldenrod: 0xb8860b,
7243           darkgray: 0xa9a9a9,
7244           darkgreen: 0x006400,
7245           darkgrey: 0xa9a9a9,
7246           darkkhaki: 0xbdb76b,
7247           darkmagenta: 0x8b008b,
7248           darkolivegreen: 0x556b2f,
7249           darkorange: 0xff8c00,
7250           darkorchid: 0x9932cc,
7251           darkred: 0x8b0000,
7252           darksalmon: 0xe9967a,
7253           darkseagreen: 0x8fbc8f,
7254           darkslateblue: 0x483d8b,
7255           darkslategray: 0x2f4f4f,
7256           darkslategrey: 0x2f4f4f,
7257           darkturquoise: 0x00ced1,
7258           darkviolet: 0x9400d3,
7259           deeppink: 0xff1493,
7260           deepskyblue: 0x00bfff,
7261           dimgray: 0x696969,
7262           dimgrey: 0x696969,
7263           dodgerblue: 0x1e90ff,
7264           firebrick: 0xb22222,
7265           floralwhite: 0xfffaf0,
7266           forestgreen: 0x228b22,
7267           fuchsia: 0xff00ff,
7268           gainsboro: 0xdcdcdc,
7269           ghostwhite: 0xf8f8ff,
7270           gold: 0xffd700,
7271           goldenrod: 0xdaa520,
7272           gray: 0x808080,
7273           green: 0x008000,
7274           greenyellow: 0xadff2f,
7275           grey: 0x808080,
7276           honeydew: 0xf0fff0,
7277           hotpink: 0xff69b4,
7278           indianred: 0xcd5c5c,
7279           indigo: 0x4b0082,
7280           ivory: 0xfffff0,
7281           khaki: 0xf0e68c,
7282           lavender: 0xe6e6fa,
7283           lavenderblush: 0xfff0f5,
7284           lawngreen: 0x7cfc00,
7285           lemonchiffon: 0xfffacd,
7286           lightblue: 0xadd8e6,
7287           lightcoral: 0xf08080,
7288           lightcyan: 0xe0ffff,
7289           lightgoldenrodyellow: 0xfafad2,
7290           lightgray: 0xd3d3d3,
7291           lightgreen: 0x90ee90,
7292           lightgrey: 0xd3d3d3,
7293           lightpink: 0xffb6c1,
7294           lightsalmon: 0xffa07a,
7295           lightseagreen: 0x20b2aa,
7296           lightskyblue: 0x87cefa,
7297           lightslategray: 0x778899,
7298           lightslategrey: 0x778899,
7299           lightsteelblue: 0xb0c4de,
7300           lightyellow: 0xffffe0,
7301           lime: 0x00ff00,
7302           limegreen: 0x32cd32,
7303           linen: 0xfaf0e6,
7304           magenta: 0xff00ff,
7305           maroon: 0x800000,
7306           mediumaquamarine: 0x66cdaa,
7307           mediumblue: 0x0000cd,
7308           mediumorchid: 0xba55d3,
7309           mediumpurple: 0x9370db,
7310           mediumseagreen: 0x3cb371,
7311           mediumslateblue: 0x7b68ee,
7312           mediumspringgreen: 0x00fa9a,
7313           mediumturquoise: 0x48d1cc,
7314           mediumvioletred: 0xc71585,
7315           midnightblue: 0x191970,
7316           mintcream: 0xf5fffa,
7317           mistyrose: 0xffe4e1,
7318           moccasin: 0xffe4b5,
7319           navajowhite: 0xffdead,
7320           navy: 0x000080,
7321           oldlace: 0xfdf5e6,
7322           olive: 0x808000,
7323           olivedrab: 0x6b8e23,
7324           orange: 0xffa500,
7325           orangered: 0xff4500,
7326           orchid: 0xda70d6,
7327           palegoldenrod: 0xeee8aa,
7328           palegreen: 0x98fb98,
7329           paleturquoise: 0xafeeee,
7330           palevioletred: 0xdb7093,
7331           papayawhip: 0xffefd5,
7332           peachpuff: 0xffdab9,
7333           peru: 0xcd853f,
7334           pink: 0xffc0cb,
7335           plum: 0xdda0dd,
7336           powderblue: 0xb0e0e6,
7337           purple: 0x800080,
7338           rebeccapurple: 0x663399,
7339           red: 0xff0000,
7340           rosybrown: 0xbc8f8f,
7341           royalblue: 0x4169e1,
7342           saddlebrown: 0x8b4513,
7343           salmon: 0xfa8072,
7344           sandybrown: 0xf4a460,
7345           seagreen: 0x2e8b57,
7346           seashell: 0xfff5ee,
7347           sienna: 0xa0522d,
7348           silver: 0xc0c0c0,
7349           skyblue: 0x87ceeb,
7350           slateblue: 0x6a5acd,
7351           slategray: 0x708090,
7352           slategrey: 0x708090,
7353           snow: 0xfffafa,
7354           springgreen: 0x00ff7f,
7355           steelblue: 0x4682b4,
7356           tan: 0xd2b48c,
7357           teal: 0x008080,
7358           thistle: 0xd8bfd8,
7359           tomato: 0xff6347,
7360           turquoise: 0x40e0d0,
7361           violet: 0xee82ee,
7362           wheat: 0xf5deb3,
7363           white: 0xffffff,
7364           whitesmoke: 0xf5f5f5,
7365           yellow: 0xffff00,
7366           yellowgreen: 0x9acd32
7367         };
7368
7369         define$1(Color, color, {
7370           displayable: function() {
7371             return this.rgb().displayable();
7372           },
7373           hex: function() {
7374             return this.rgb().hex();
7375           },
7376           toString: function() {
7377             return this.rgb() + "";
7378           }
7379         });
7380
7381         function color(format) {
7382           var m;
7383           format = (format + "").trim().toLowerCase();
7384           return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
7385               : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
7386               : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
7387               : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
7388               : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
7389               : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
7390               : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
7391               : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
7392               : named.hasOwnProperty(format) ? rgbn(named[format])
7393               : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
7394               : null;
7395         }
7396
7397         function rgbn(n) {
7398           return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
7399         }
7400
7401         function rgba(r, g, b, a) {
7402           if (a <= 0) r = g = b = NaN;
7403           return new Rgb(r, g, b, a);
7404         }
7405
7406         function rgbConvert(o) {
7407           if (!(o instanceof Color)) o = color(o);
7408           if (!o) return new Rgb;
7409           o = o.rgb();
7410           return new Rgb(o.r, o.g, o.b, o.opacity);
7411         }
7412
7413         function rgb(r, g, b, opacity) {
7414           return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
7415         }
7416
7417         function Rgb(r, g, b, opacity) {
7418           this.r = +r;
7419           this.g = +g;
7420           this.b = +b;
7421           this.opacity = +opacity;
7422         }
7423
7424         define$1(Rgb, rgb, extend(Color, {
7425           brighter: function(k) {
7426             k = k == null ? brighter : Math.pow(brighter, k);
7427             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
7428           },
7429           darker: function(k) {
7430             k = k == null ? darker : Math.pow(darker, k);
7431             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
7432           },
7433           rgb: function() {
7434             return this;
7435           },
7436           displayable: function() {
7437             return (0 <= this.r && this.r <= 255)
7438                 && (0 <= this.g && this.g <= 255)
7439                 && (0 <= this.b && this.b <= 255)
7440                 && (0 <= this.opacity && this.opacity <= 1);
7441           },
7442           hex: function() {
7443             return "#" + hex$1(this.r) + hex$1(this.g) + hex$1(this.b);
7444           },
7445           toString: function() {
7446             var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
7447             return (a === 1 ? "rgb(" : "rgba(")
7448                 + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
7449                 + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
7450                 + Math.max(0, Math.min(255, Math.round(this.b) || 0))
7451                 + (a === 1 ? ")" : ", " + a + ")");
7452           }
7453         }));
7454
7455         function hex$1(value) {
7456           value = Math.max(0, Math.min(255, Math.round(value) || 0));
7457           return (value < 16 ? "0" : "") + value.toString(16);
7458         }
7459
7460         function hsla(h, s, l, a) {
7461           if (a <= 0) h = s = l = NaN;
7462           else if (l <= 0 || l >= 1) h = s = NaN;
7463           else if (s <= 0) h = NaN;
7464           return new Hsl(h, s, l, a);
7465         }
7466
7467         function hslConvert(o) {
7468           if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
7469           if (!(o instanceof Color)) o = color(o);
7470           if (!o) return new Hsl;
7471           if (o instanceof Hsl) return o;
7472           o = o.rgb();
7473           var r = o.r / 255,
7474               g = o.g / 255,
7475               b = o.b / 255,
7476               min = Math.min(r, g, b),
7477               max = Math.max(r, g, b),
7478               h = NaN,
7479               s = max - min,
7480               l = (max + min) / 2;
7481           if (s) {
7482             if (r === max) h = (g - b) / s + (g < b) * 6;
7483             else if (g === max) h = (b - r) / s + 2;
7484             else h = (r - g) / s + 4;
7485             s /= l < 0.5 ? max + min : 2 - max - min;
7486             h *= 60;
7487           } else {
7488             s = l > 0 && l < 1 ? 0 : h;
7489           }
7490           return new Hsl(h, s, l, o.opacity);
7491         }
7492
7493         function hsl(h, s, l, opacity) {
7494           return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
7495         }
7496
7497         function Hsl(h, s, l, opacity) {
7498           this.h = +h;
7499           this.s = +s;
7500           this.l = +l;
7501           this.opacity = +opacity;
7502         }
7503
7504         define$1(Hsl, hsl, extend(Color, {
7505           brighter: function(k) {
7506             k = k == null ? brighter : Math.pow(brighter, k);
7507             return new Hsl(this.h, this.s, this.l * k, this.opacity);
7508           },
7509           darker: function(k) {
7510             k = k == null ? darker : Math.pow(darker, k);
7511             return new Hsl(this.h, this.s, this.l * k, this.opacity);
7512           },
7513           rgb: function() {
7514             var h = this.h % 360 + (this.h < 0) * 360,
7515                 s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
7516                 l = this.l,
7517                 m2 = l + (l < 0.5 ? l : 1 - l) * s,
7518                 m1 = 2 * l - m2;
7519             return new Rgb(
7520               hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
7521               hsl2rgb(h, m1, m2),
7522               hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
7523               this.opacity
7524             );
7525           },
7526           displayable: function() {
7527             return (0 <= this.s && this.s <= 1 || isNaN(this.s))
7528                 && (0 <= this.l && this.l <= 1)
7529                 && (0 <= this.opacity && this.opacity <= 1);
7530           }
7531         }));
7532
7533         /* From FvD 13.37, CSS Color Module Level 3 */
7534         function hsl2rgb(h, m1, m2) {
7535           return (h < 60 ? m1 + (m2 - m1) * h / 60
7536               : h < 180 ? m2
7537               : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
7538               : m1) * 255;
7539         }
7540
7541         var deg2rad = Math.PI / 180;
7542         var rad2deg = 180 / Math.PI;
7543
7544         // https://beta.observablehq.com/@mbostock/lab-and-rgb
7545         var K = 18,
7546             Xn = 0.96422,
7547             Yn = 1,
7548             Zn = 0.82521,
7549             t0 = 4 / 29,
7550             t1 = 6 / 29,
7551             t2 = 3 * t1 * t1,
7552             t3 = t1 * t1 * t1;
7553
7554         function labConvert(o) {
7555           if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
7556           if (o instanceof Hcl) {
7557             if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
7558             var h = o.h * deg2rad;
7559             return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
7560           }
7561           if (!(o instanceof Rgb)) o = rgbConvert(o);
7562           var r = rgb2lrgb(o.r),
7563               g = rgb2lrgb(o.g),
7564               b = rgb2lrgb(o.b),
7565               y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
7566           if (r === g && g === b) x = z = y; else {
7567             x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
7568             z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
7569           }
7570           return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
7571         }
7572
7573         function gray(l, opacity) {
7574           return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
7575         }
7576
7577         function lab(l, a, b, opacity) {
7578           return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
7579         }
7580
7581         function Lab(l, a, b, opacity) {
7582           this.l = +l;
7583           this.a = +a;
7584           this.b = +b;
7585           this.opacity = +opacity;
7586         }
7587
7588         define$1(Lab, lab, extend(Color, {
7589           brighter: function(k) {
7590             return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
7591           },
7592           darker: function(k) {
7593             return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
7594           },
7595           rgb: function() {
7596             var y = (this.l + 16) / 116,
7597                 x = isNaN(this.a) ? y : y + this.a / 500,
7598                 z = isNaN(this.b) ? y : y - this.b / 200;
7599             x = Xn * lab2xyz(x);
7600             y = Yn * lab2xyz(y);
7601             z = Zn * lab2xyz(z);
7602             return new Rgb(
7603               lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
7604               lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
7605               lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
7606               this.opacity
7607             );
7608           }
7609         }));
7610
7611         function xyz2lab(t) {
7612           return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
7613         }
7614
7615         function lab2xyz(t) {
7616           return t > t1 ? t * t * t : t2 * (t - t0);
7617         }
7618
7619         function lrgb2rgb(x) {
7620           return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
7621         }
7622
7623         function rgb2lrgb(x) {
7624           return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
7625         }
7626
7627         function hclConvert(o) {
7628           if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
7629           if (!(o instanceof Lab)) o = labConvert(o);
7630           if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);
7631           var h = Math.atan2(o.b, o.a) * rad2deg;
7632           return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
7633         }
7634
7635         function lch(l, c, h, opacity) {
7636           return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
7637         }
7638
7639         function hcl(h, c, l, opacity) {
7640           return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
7641         }
7642
7643         function Hcl(h, c, l, opacity) {
7644           this.h = +h;
7645           this.c = +c;
7646           this.l = +l;
7647           this.opacity = +opacity;
7648         }
7649
7650         define$1(Hcl, hcl, extend(Color, {
7651           brighter: function(k) {
7652             return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
7653           },
7654           darker: function(k) {
7655             return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
7656           },
7657           rgb: function() {
7658             return labConvert(this).rgb();
7659           }
7660         }));
7661
7662         var A = -0.14861,
7663             B = +1.78277,
7664             C = -0.29227,
7665             D = -0.90649,
7666             E = +1.97294,
7667             ED = E * D,
7668             EB = E * B,
7669             BC_DA = B * C - D * A;
7670
7671         function cubehelixConvert(o) {
7672           if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
7673           if (!(o instanceof Rgb)) o = rgbConvert(o);
7674           var r = o.r / 255,
7675               g = o.g / 255,
7676               b = o.b / 255,
7677               l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
7678               bl = b - l,
7679               k = (E * (g - l) - C * bl) / D,
7680               s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
7681               h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
7682           return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
7683         }
7684
7685         function cubehelix(h, s, l, opacity) {
7686           return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
7687         }
7688
7689         function Cubehelix(h, s, l, opacity) {
7690           this.h = +h;
7691           this.s = +s;
7692           this.l = +l;
7693           this.opacity = +opacity;
7694         }
7695
7696         define$1(Cubehelix, cubehelix, extend(Color, {
7697           brighter: function(k) {
7698             k = k == null ? brighter : Math.pow(brighter, k);
7699             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
7700           },
7701           darker: function(k) {
7702             k = k == null ? darker : Math.pow(darker, k);
7703             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
7704           },
7705           rgb: function() {
7706             var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
7707                 l = +this.l,
7708                 a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
7709                 cosh = Math.cos(h),
7710                 sinh = Math.sin(h);
7711             return new Rgb(
7712               255 * (l + a * (A * cosh + B * sinh)),
7713               255 * (l + a * (C * cosh + D * sinh)),
7714               255 * (l + a * (E * cosh)),
7715               this.opacity
7716             );
7717           }
7718         }));
7719
7720         function basis(t1, v0, v1, v2, v3) {
7721           var t2 = t1 * t1, t3 = t2 * t1;
7722           return ((1 - 3 * t1 + 3 * t2 - t3) * v0
7723               + (4 - 6 * t2 + 3 * t3) * v1
7724               + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
7725               + t3 * v3) / 6;
7726         }
7727
7728         function basis$1(values) {
7729           var n = values.length - 1;
7730           return function(t) {
7731             var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
7732                 v1 = values[i],
7733                 v2 = values[i + 1],
7734                 v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
7735                 v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
7736             return basis((t - i / n) * n, v0, v1, v2, v3);
7737           };
7738         }
7739
7740         function basisClosed(values) {
7741           var n = values.length;
7742           return function(t) {
7743             var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
7744                 v0 = values[(i + n - 1) % n],
7745                 v1 = values[i % n],
7746                 v2 = values[(i + 1) % n],
7747                 v3 = values[(i + 2) % n];
7748             return basis((t - i / n) * n, v0, v1, v2, v3);
7749           };
7750         }
7751
7752         function constant$3(x) {
7753           return function() {
7754             return x;
7755           };
7756         }
7757
7758         function linear(a, d) {
7759           return function(t) {
7760             return a + t * d;
7761           };
7762         }
7763
7764         function exponential(a, b, y) {
7765           return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
7766             return Math.pow(a + t * b, y);
7767           };
7768         }
7769
7770         function hue(a, b) {
7771           var d = b - a;
7772           return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
7773         }
7774
7775         function gamma(y) {
7776           return (y = +y) === 1 ? nogamma : function(a, b) {
7777             return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);
7778           };
7779         }
7780
7781         function nogamma(a, b) {
7782           var d = b - a;
7783           return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
7784         }
7785
7786         var d3_interpolateRgb = (function rgbGamma(y) {
7787           var color = gamma(y);
7788
7789           function rgb$1(start, end) {
7790             var r = color((start = rgb(start)).r, (end = rgb(end)).r),
7791                 g = color(start.g, end.g),
7792                 b = color(start.b, end.b),
7793                 opacity = nogamma(start.opacity, end.opacity);
7794             return function(t) {
7795               start.r = r(t);
7796               start.g = g(t);
7797               start.b = b(t);
7798               start.opacity = opacity(t);
7799               return start + "";
7800             };
7801           }
7802
7803           rgb$1.gamma = rgbGamma;
7804
7805           return rgb$1;
7806         })(1);
7807
7808         function rgbSpline(spline) {
7809           return function(colors) {
7810             var n = colors.length,
7811                 r = new Array(n),
7812                 g = new Array(n),
7813                 b = new Array(n),
7814                 i, color;
7815             for (i = 0; i < n; ++i) {
7816               color = rgb(colors[i]);
7817               r[i] = color.r || 0;
7818               g[i] = color.g || 0;
7819               b[i] = color.b || 0;
7820             }
7821             r = spline(r);
7822             g = spline(g);
7823             b = spline(b);
7824             color.opacity = 1;
7825             return function(t) {
7826               color.r = r(t);
7827               color.g = g(t);
7828               color.b = b(t);
7829               return color + "";
7830             };
7831           };
7832         }
7833
7834         var rgbBasis = rgbSpline(basis$1);
7835         var rgbBasisClosed = rgbSpline(basisClosed);
7836
7837         function array$2(a, b) {
7838           var nb = b ? b.length : 0,
7839               na = a ? Math.min(nb, a.length) : 0,
7840               x = new Array(na),
7841               c = new Array(nb),
7842               i;
7843
7844           for (i = 0; i < na; ++i) x[i] = d3_interpolate(a[i], b[i]);
7845           for (; i < nb; ++i) c[i] = b[i];
7846
7847           return function(t) {
7848             for (i = 0; i < na; ++i) c[i] = x[i](t);
7849             return c;
7850           };
7851         }
7852
7853         function date(a, b) {
7854           var d = new Date;
7855           return a = +a, b -= a, function(t) {
7856             return d.setTime(a + b * t), d;
7857           };
7858         }
7859
7860         function d3_interpolateNumber(a, b) {
7861           return a = +a, b -= a, function(t) {
7862             return a + b * t;
7863           };
7864         }
7865
7866         function object(a, b) {
7867           var i = {},
7868               c = {},
7869               k;
7870
7871           if (a === null || typeof a !== "object") a = {};
7872           if (b === null || typeof b !== "object") b = {};
7873
7874           for (k in b) {
7875             if (k in a) {
7876               i[k] = d3_interpolate(a[k], b[k]);
7877             } else {
7878               c[k] = b[k];
7879             }
7880           }
7881
7882           return function(t) {
7883             for (k in i) c[k] = i[k](t);
7884             return c;
7885           };
7886         }
7887
7888         var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
7889             reB = new RegExp(reA.source, "g");
7890
7891         function zero(b) {
7892           return function() {
7893             return b;
7894           };
7895         }
7896
7897         function one(b) {
7898           return function(t) {
7899             return b(t) + "";
7900           };
7901         }
7902
7903         function interpolateString(a, b) {
7904           var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
7905               am, // current match in a
7906               bm, // current match in b
7907               bs, // string preceding current number in b, if any
7908               i = -1, // index in s
7909               s = [], // string constants and placeholders
7910               q = []; // number interpolators
7911
7912           // Coerce inputs to strings.
7913           a = a + "", b = b + "";
7914
7915           // Interpolate pairs of numbers in a & b.
7916           while ((am = reA.exec(a))
7917               && (bm = reB.exec(b))) {
7918             if ((bs = bm.index) > bi) { // a string precedes the next number in b
7919               bs = b.slice(bi, bs);
7920               if (s[i]) s[i] += bs; // coalesce with previous string
7921               else s[++i] = bs;
7922             }
7923             if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
7924               if (s[i]) s[i] += bm; // coalesce with previous string
7925               else s[++i] = bm;
7926             } else { // interpolate non-matching numbers
7927               s[++i] = null;
7928               q.push({i: i, x: d3_interpolateNumber(am, bm)});
7929             }
7930             bi = reB.lastIndex;
7931           }
7932
7933           // Add remains of b.
7934           if (bi < b.length) {
7935             bs = b.slice(bi);
7936             if (s[i]) s[i] += bs; // coalesce with previous string
7937             else s[++i] = bs;
7938           }
7939
7940           // Special optimization for only a single match.
7941           // Otherwise, interpolate each of the numbers and rejoin the string.
7942           return s.length < 2 ? (q[0]
7943               ? one(q[0].x)
7944               : zero(b))
7945               : (b = q.length, function(t) {
7946                   for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
7947                   return s.join("");
7948                 });
7949         }
7950
7951         function d3_interpolate(a, b) {
7952           var t = typeof b, c;
7953           return b == null || t === "boolean" ? constant$3(b)
7954               : (t === "number" ? d3_interpolateNumber
7955               : t === "string" ? ((c = color(b)) ? (b = c, d3_interpolateRgb) : interpolateString)
7956               : b instanceof color ? d3_interpolateRgb
7957               : b instanceof Date ? date
7958               : Array.isArray(b) ? array$2
7959               : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
7960               : d3_interpolateNumber)(a, b);
7961         }
7962
7963         function discrete(range) {
7964           var n = range.length;
7965           return function(t) {
7966             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
7967           };
7968         }
7969
7970         function hue$1(a, b) {
7971           var i = hue(+a, +b);
7972           return function(t) {
7973             var x = i(t);
7974             return x - 360 * Math.floor(x / 360);
7975           };
7976         }
7977
7978         function interpolateRound(a, b) {
7979           return a = +a, b -= a, function(t) {
7980             return Math.round(a + b * t);
7981           };
7982         }
7983
7984         var degrees = 180 / Math.PI;
7985
7986         var identity$2 = {
7987           translateX: 0,
7988           translateY: 0,
7989           rotate: 0,
7990           skewX: 0,
7991           scaleX: 1,
7992           scaleY: 1
7993         };
7994
7995         function decompose(a, b, c, d, e, f) {
7996           var scaleX, scaleY, skewX;
7997           if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
7998           if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
7999           if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
8000           if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
8001           return {
8002             translateX: e,
8003             translateY: f,
8004             rotate: Math.atan2(b, a) * degrees,
8005             skewX: Math.atan(skewX) * degrees,
8006             scaleX: scaleX,
8007             scaleY: scaleY
8008           };
8009         }
8010
8011         var cssNode,
8012             cssRoot,
8013             cssView,
8014             svgNode;
8015
8016         function parseCss(value) {
8017           if (value === "none") return identity$2;
8018           if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
8019           cssNode.style.transform = value;
8020           value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
8021           cssRoot.removeChild(cssNode);
8022           value = value.slice(7, -1).split(",");
8023           return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
8024         }
8025
8026         function parseSvg(value) {
8027           if (value == null) return identity$2;
8028           if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
8029           svgNode.setAttribute("transform", value);
8030           if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
8031           value = value.matrix;
8032           return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
8033         }
8034
8035         function interpolateTransform(parse, pxComma, pxParen, degParen) {
8036
8037           function pop(s) {
8038             return s.length ? s.pop() + " " : "";
8039           }
8040
8041           function translate(xa, ya, xb, yb, s, q) {
8042             if (xa !== xb || ya !== yb) {
8043               var i = s.push("translate(", null, pxComma, null, pxParen);
8044               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
8045             } else if (xb || yb) {
8046               s.push("translate(" + xb + pxComma + yb + pxParen);
8047             }
8048           }
8049
8050           function rotate(a, b, s, q) {
8051             if (a !== b) {
8052               if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
8053               q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
8054             } else if (b) {
8055               s.push(pop(s) + "rotate(" + b + degParen);
8056             }
8057           }
8058
8059           function skewX(a, b, s, q) {
8060             if (a !== b) {
8061               q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
8062             } else if (b) {
8063               s.push(pop(s) + "skewX(" + b + degParen);
8064             }
8065           }
8066
8067           function scale(xa, ya, xb, yb, s, q) {
8068             if (xa !== xb || ya !== yb) {
8069               var i = s.push(pop(s) + "scale(", null, ",", null, ")");
8070               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
8071             } else if (xb !== 1 || yb !== 1) {
8072               s.push(pop(s) + "scale(" + xb + "," + yb + ")");
8073             }
8074           }
8075
8076           return function(a, b) {
8077             var s = [], // string constants and placeholders
8078                 q = []; // number interpolators
8079             a = parse(a), b = parse(b);
8080             translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
8081             rotate(a.rotate, b.rotate, s, q);
8082             skewX(a.skewX, b.skewX, s, q);
8083             scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
8084             a = b = null; // gc
8085             return function(t) {
8086               var i = -1, n = q.length, o;
8087               while (++i < n) s[(o = q[i]).i] = o.x(t);
8088               return s.join("");
8089             };
8090           };
8091         }
8092
8093         var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
8094         var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
8095
8096         var rho = Math.SQRT2,
8097             rho2 = 2,
8098             rho4 = 4,
8099             epsilon2 = 1e-12;
8100
8101         function cosh(x) {
8102           return ((x = Math.exp(x)) + 1 / x) / 2;
8103         }
8104
8105         function sinh(x) {
8106           return ((x = Math.exp(x)) - 1 / x) / 2;
8107         }
8108
8109         function tanh(x) {
8110           return ((x = Math.exp(2 * x)) - 1) / (x + 1);
8111         }
8112
8113         // p0 = [ux0, uy0, w0]
8114         // p1 = [ux1, uy1, w1]
8115         function interpolateZoom(p0, p1) {
8116           var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
8117               ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
8118               dx = ux1 - ux0,
8119               dy = uy1 - uy0,
8120               d2 = dx * dx + dy * dy,
8121               i,
8122               S;
8123
8124           // Special case for u0 ≅ u1.
8125           if (d2 < epsilon2) {
8126             S = Math.log(w1 / w0) / rho;
8127             i = function(t) {
8128               return [
8129                 ux0 + t * dx,
8130                 uy0 + t * dy,
8131                 w0 * Math.exp(rho * t * S)
8132               ];
8133             };
8134           }
8135
8136           // General case.
8137           else {
8138             var d1 = Math.sqrt(d2),
8139                 b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
8140                 b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
8141                 r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
8142                 r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
8143             S = (r1 - r0) / rho;
8144             i = function(t) {
8145               var s = t * S,
8146                   coshr0 = cosh(r0),
8147                   u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
8148               return [
8149                 ux0 + u * dx,
8150                 uy0 + u * dy,
8151                 w0 * coshr0 / cosh(rho * s + r0)
8152               ];
8153             };
8154           }
8155
8156           i.duration = S * 1000;
8157
8158           return i;
8159         }
8160
8161         function hsl$1(hue) {
8162           return function(start, end) {
8163             var h = hue((start = hsl(start)).h, (end = hsl(end)).h),
8164                 s = nogamma(start.s, end.s),
8165                 l = nogamma(start.l, end.l),
8166                 opacity = nogamma(start.opacity, end.opacity);
8167             return function(t) {
8168               start.h = h(t);
8169               start.s = s(t);
8170               start.l = l(t);
8171               start.opacity = opacity(t);
8172               return start + "";
8173             };
8174           }
8175         }
8176
8177         var hsl$2 = hsl$1(hue);
8178         var hslLong = hsl$1(nogamma);
8179
8180         function lab$1(start, end) {
8181           var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
8182               a = nogamma(start.a, end.a),
8183               b = nogamma(start.b, end.b),
8184               opacity = nogamma(start.opacity, end.opacity);
8185           return function(t) {
8186             start.l = l(t);
8187             start.a = a(t);
8188             start.b = b(t);
8189             start.opacity = opacity(t);
8190             return start + "";
8191           };
8192         }
8193
8194         function hcl$1(hue) {
8195           return function(start, end) {
8196             var h = hue((start = hcl(start)).h, (end = hcl(end)).h),
8197                 c = nogamma(start.c, end.c),
8198                 l = nogamma(start.l, end.l),
8199                 opacity = nogamma(start.opacity, end.opacity);
8200             return function(t) {
8201               start.h = h(t);
8202               start.c = c(t);
8203               start.l = l(t);
8204               start.opacity = opacity(t);
8205               return start + "";
8206             };
8207           }
8208         }
8209
8210         var hcl$2 = hcl$1(hue);
8211         var hclLong = hcl$1(nogamma);
8212
8213         function cubehelix$1(hue) {
8214           return (function cubehelixGamma(y) {
8215             y = +y;
8216
8217             function cubehelix$1(start, end) {
8218               var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),
8219                   s = nogamma(start.s, end.s),
8220                   l = nogamma(start.l, end.l),
8221                   opacity = nogamma(start.opacity, end.opacity);
8222               return function(t) {
8223                 start.h = h(t);
8224                 start.s = s(t);
8225                 start.l = l(Math.pow(t, y));
8226                 start.opacity = opacity(t);
8227                 return start + "";
8228               };
8229             }
8230
8231             cubehelix$1.gamma = cubehelixGamma;
8232
8233             return cubehelix$1;
8234           })(1);
8235         }
8236
8237         var cubehelix$2 = cubehelix$1(hue);
8238         var cubehelixLong = cubehelix$1(nogamma);
8239
8240         function piecewise(interpolate, values) {
8241           var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);
8242           while (i < n) I[i] = interpolate(v, v = values[++i]);
8243           return function(t) {
8244             var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
8245             return I[i](t - i);
8246           };
8247         }
8248
8249         function d3_quantize(interpolator, n) {
8250           var samples = new Array(n);
8251           for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
8252           return samples;
8253         }
8254
8255         var frame = 0, // is an animation frame pending?
8256             timeout = 0, // is a timeout pending?
8257             interval = 0, // are any timers active?
8258             pokeDelay = 1000, // how frequently we check for clock skew
8259             taskHead,
8260             taskTail,
8261             clockLast = 0,
8262             clockNow = 0,
8263             clockSkew = 0,
8264             clock = typeof performance === "object" && performance.now ? performance : Date,
8265             setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
8266
8267         function now() {
8268           return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
8269         }
8270
8271         function clearNow() {
8272           clockNow = 0;
8273         }
8274
8275         function Timer() {
8276           this._call =
8277           this._time =
8278           this._next = null;
8279         }
8280
8281         Timer.prototype = timer.prototype = {
8282           constructor: Timer,
8283           restart: function(callback, delay, time) {
8284             if (typeof callback !== "function") throw new TypeError("callback is not a function");
8285             time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
8286             if (!this._next && taskTail !== this) {
8287               if (taskTail) taskTail._next = this;
8288               else taskHead = this;
8289               taskTail = this;
8290             }
8291             this._call = callback;
8292             this._time = time;
8293             sleep();
8294           },
8295           stop: function() {
8296             if (this._call) {
8297               this._call = null;
8298               this._time = Infinity;
8299               sleep();
8300             }
8301           }
8302         };
8303
8304         function timer(callback, delay, time) {
8305           var t = new Timer;
8306           t.restart(callback, delay, time);
8307           return t;
8308         }
8309
8310         function timerFlush() {
8311           now(); // Get the current time, if not already set.
8312           ++frame; // Pretend we’ve set an alarm, if we haven’t already.
8313           var t = taskHead, e;
8314           while (t) {
8315             if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
8316             t = t._next;
8317           }
8318           --frame;
8319         }
8320
8321         function wake() {
8322           clockNow = (clockLast = clock.now()) + clockSkew;
8323           frame = timeout = 0;
8324           try {
8325             timerFlush();
8326           } finally {
8327             frame = 0;
8328             nap();
8329             clockNow = 0;
8330           }
8331         }
8332
8333         function poke() {
8334           var now = clock.now(), delay = now - clockLast;
8335           if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
8336         }
8337
8338         function nap() {
8339           var t0, t1 = taskHead, t2, time = Infinity;
8340           while (t1) {
8341             if (t1._call) {
8342               if (time > t1._time) time = t1._time;
8343               t0 = t1, t1 = t1._next;
8344             } else {
8345               t2 = t1._next, t1._next = null;
8346               t1 = t0 ? t0._next = t2 : taskHead = t2;
8347             }
8348           }
8349           taskTail = t0;
8350           sleep(time);
8351         }
8352
8353         function sleep(time) {
8354           if (frame) return; // Soonest alarm already set, or will be.
8355           if (timeout) timeout = clearTimeout(timeout);
8356           var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
8357           if (delay > 24) {
8358             if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
8359             if (interval) interval = clearInterval(interval);
8360           } else {
8361             if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
8362             frame = 1, setFrame(wake);
8363           }
8364         }
8365
8366         function d3_timeout(callback, delay, time) {
8367           var t = new Timer;
8368           delay = delay == null ? 0 : +delay;
8369           t.restart(function(elapsed) {
8370             t.stop();
8371             callback(elapsed + delay);
8372           }, delay, time);
8373           return t;
8374         }
8375
8376         function interval$1(callback, delay, time) {
8377           var t = new Timer, total = delay;
8378           if (delay == null) return t.restart(callback, delay, time), t;
8379           delay = +delay, time = time == null ? now() : +time;
8380           t.restart(function tick(elapsed) {
8381             elapsed += total;
8382             t.restart(tick, total += delay, time);
8383             callback(elapsed);
8384           }, delay, time);
8385           return t;
8386         }
8387
8388         var emptyOn = dispatch("start", "end", "cancel", "interrupt");
8389         var emptyTween = [];
8390
8391         var CREATED = 0;
8392         var SCHEDULED = 1;
8393         var STARTING = 2;
8394         var STARTED = 3;
8395         var RUNNING = 4;
8396         var ENDING = 5;
8397         var ENDED = 6;
8398
8399         function schedule(node, name, id, index, group, timing) {
8400           var schedules = node.__transition;
8401           if (!schedules) node.__transition = {};
8402           else if (id in schedules) return;
8403           create$6(node, id, {
8404             name: name,
8405             index: index, // For context during callback.
8406             group: group, // For context during callback.
8407             on: emptyOn,
8408             tween: emptyTween,
8409             time: timing.time,
8410             delay: timing.delay,
8411             duration: timing.duration,
8412             ease: timing.ease,
8413             timer: null,
8414             state: CREATED
8415           });
8416         }
8417
8418         function init(node, id) {
8419           var schedule = get$2(node, id);
8420           if (schedule.state > CREATED) throw new Error("too late; already scheduled");
8421           return schedule;
8422         }
8423
8424         function set$1(node, id) {
8425           var schedule = get$2(node, id);
8426           if (schedule.state > STARTED) throw new Error("too late; already running");
8427           return schedule;
8428         }
8429
8430         function get$2(node, id) {
8431           var schedule = node.__transition;
8432           if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found");
8433           return schedule;
8434         }
8435
8436         function create$6(node, id, self) {
8437           var schedules = node.__transition,
8438               tween;
8439
8440           // Initialize the self timer when the transition is created.
8441           // Note the actual delay is not known until the first callback!
8442           schedules[id] = self;
8443           self.timer = timer(schedule, 0, self.time);
8444
8445           function schedule(elapsed) {
8446             self.state = SCHEDULED;
8447             self.timer.restart(start, self.delay, self.time);
8448
8449             // If the elapsed delay is less than our first sleep, start immediately.
8450             if (self.delay <= elapsed) start(elapsed - self.delay);
8451           }
8452
8453           function start(elapsed) {
8454             var i, j, n, o;
8455
8456             // If the state is not SCHEDULED, then we previously errored on start.
8457             if (self.state !== SCHEDULED) return stop();
8458
8459             for (i in schedules) {
8460               o = schedules[i];
8461               if (o.name !== self.name) continue;
8462
8463               // While this element already has a starting transition during this frame,
8464               // defer starting an interrupting transition until that transition has a
8465               // chance to tick (and possibly end); see d3/d3-transition#54!
8466               if (o.state === STARTED) return d3_timeout(start);
8467
8468               // Interrupt the active transition, if any.
8469               if (o.state === RUNNING) {
8470                 o.state = ENDED;
8471                 o.timer.stop();
8472                 o.on.call("interrupt", node, node.__data__, o.index, o.group);
8473                 delete schedules[i];
8474               }
8475
8476               // Cancel any pre-empted transitions.
8477               else if (+i < id) {
8478                 o.state = ENDED;
8479                 o.timer.stop();
8480                 o.on.call("cancel", node, node.__data__, o.index, o.group);
8481                 delete schedules[i];
8482               }
8483             }
8484
8485             // Defer the first tick to end of the current frame; see d3/d3#1576.
8486             // Note the transition may be canceled after start and before the first tick!
8487             // Note this must be scheduled before the start event; see d3/d3-transition#16!
8488             // Assuming this is successful, subsequent callbacks go straight to tick.
8489             d3_timeout(function() {
8490               if (self.state === STARTED) {
8491                 self.state = RUNNING;
8492                 self.timer.restart(tick, self.delay, self.time);
8493                 tick(elapsed);
8494               }
8495             });
8496
8497             // Dispatch the start event.
8498             // Note this must be done before the tween are initialized.
8499             self.state = STARTING;
8500             self.on.call("start", node, node.__data__, self.index, self.group);
8501             if (self.state !== STARTING) return; // interrupted
8502             self.state = STARTED;
8503
8504             // Initialize the tween, deleting null tween.
8505             tween = new Array(n = self.tween.length);
8506             for (i = 0, j = -1; i < n; ++i) {
8507               if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
8508                 tween[++j] = o;
8509               }
8510             }
8511             tween.length = j + 1;
8512           }
8513
8514           function tick(elapsed) {
8515             var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
8516                 i = -1,
8517                 n = tween.length;
8518
8519             while (++i < n) {
8520               tween[i].call(node, t);
8521             }
8522
8523             // Dispatch the end event.
8524             if (self.state === ENDING) {
8525               self.on.call("end", node, node.__data__, self.index, self.group);
8526               stop();
8527             }
8528           }
8529
8530           function stop() {
8531             self.state = ENDED;
8532             self.timer.stop();
8533             delete schedules[id];
8534             for (var i in schedules) return; // eslint-disable-line no-unused-vars
8535             delete node.__transition;
8536           }
8537         }
8538
8539         function interrupt(node, name) {
8540           var schedules = node.__transition,
8541               schedule,
8542               active,
8543               empty = true,
8544               i;
8545
8546           if (!schedules) return;
8547
8548           name = name == null ? null : name + "";
8549
8550           for (i in schedules) {
8551             if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
8552             active = schedule.state > STARTING && schedule.state < ENDING;
8553             schedule.state = ENDED;
8554             schedule.timer.stop();
8555             schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
8556             delete schedules[i];
8557           }
8558
8559           if (empty) delete node.__transition;
8560         }
8561
8562         function selection_interrupt(name) {
8563           return this.each(function() {
8564             interrupt(this, name);
8565           });
8566         }
8567
8568         function tweenRemove(id, name) {
8569           var tween0, tween1;
8570           return function() {
8571             var schedule = set$1(this, id),
8572                 tween = schedule.tween;
8573
8574             // If this node shared tween with the previous node,
8575             // just assign the updated shared tween and we’re done!
8576             // Otherwise, copy-on-write.
8577             if (tween !== tween0) {
8578               tween1 = tween0 = tween;
8579               for (var i = 0, n = tween1.length; i < n; ++i) {
8580                 if (tween1[i].name === name) {
8581                   tween1 = tween1.slice();
8582                   tween1.splice(i, 1);
8583                   break;
8584                 }
8585               }
8586             }
8587
8588             schedule.tween = tween1;
8589           };
8590         }
8591
8592         function tweenFunction(id, name, value) {
8593           var tween0, tween1;
8594           if (typeof value !== "function") throw new Error;
8595           return function() {
8596             var schedule = set$1(this, id),
8597                 tween = schedule.tween;
8598
8599             // If this node shared tween with the previous node,
8600             // just assign the updated shared tween and we’re done!
8601             // Otherwise, copy-on-write.
8602             if (tween !== tween0) {
8603               tween1 = (tween0 = tween).slice();
8604               for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
8605                 if (tween1[i].name === name) {
8606                   tween1[i] = t;
8607                   break;
8608                 }
8609               }
8610               if (i === n) tween1.push(t);
8611             }
8612
8613             schedule.tween = tween1;
8614           };
8615         }
8616
8617         function transition_tween(name, value) {
8618           var id = this._id;
8619
8620           name += "";
8621
8622           if (arguments.length < 2) {
8623             var tween = get$2(this.node(), id).tween;
8624             for (var i = 0, n = tween.length, t; i < n; ++i) {
8625               if ((t = tween[i]).name === name) {
8626                 return t.value;
8627               }
8628             }
8629             return null;
8630           }
8631
8632           return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
8633         }
8634
8635         function tweenValue(transition, name, value) {
8636           var id = transition._id;
8637
8638           transition.each(function() {
8639             var schedule = set$1(this, id);
8640             (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
8641           });
8642
8643           return function(node) {
8644             return get$2(node, id).value[name];
8645           };
8646         }
8647
8648         function interpolate(a, b) {
8649           var c;
8650           return (typeof b === "number" ? d3_interpolateNumber
8651               : b instanceof color ? d3_interpolateRgb
8652               : (c = color(b)) ? (b = c, d3_interpolateRgb)
8653               : interpolateString)(a, b);
8654         }
8655
8656         function attrRemove$1(name) {
8657           return function() {
8658             this.removeAttribute(name);
8659           };
8660         }
8661
8662         function attrRemoveNS$1(fullname) {
8663           return function() {
8664             this.removeAttributeNS(fullname.space, fullname.local);
8665           };
8666         }
8667
8668         function attrConstant$1(name, interpolate, value1) {
8669           var string00,
8670               string1 = value1 + "",
8671               interpolate0;
8672           return function() {
8673             var string0 = this.getAttribute(name);
8674             return string0 === string1 ? null
8675                 : string0 === string00 ? interpolate0
8676                 : interpolate0 = interpolate(string00 = string0, value1);
8677           };
8678         }
8679
8680         function attrConstantNS$1(fullname, interpolate, value1) {
8681           var string00,
8682               string1 = value1 + "",
8683               interpolate0;
8684           return function() {
8685             var string0 = this.getAttributeNS(fullname.space, fullname.local);
8686             return string0 === string1 ? null
8687                 : string0 === string00 ? interpolate0
8688                 : interpolate0 = interpolate(string00 = string0, value1);
8689           };
8690         }
8691
8692         function attrFunction$1(name, interpolate, value) {
8693           var string00,
8694               string10,
8695               interpolate0;
8696           return function() {
8697             var string0, value1 = value(this), string1;
8698             if (value1 == null) return void this.removeAttribute(name);
8699             string0 = this.getAttribute(name);
8700             string1 = value1 + "";
8701             return string0 === string1 ? null
8702                 : string0 === string00 && string1 === string10 ? interpolate0
8703                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
8704           };
8705         }
8706
8707         function attrFunctionNS$1(fullname, interpolate, value) {
8708           var string00,
8709               string10,
8710               interpolate0;
8711           return function() {
8712             var string0, value1 = value(this), string1;
8713             if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
8714             string0 = this.getAttributeNS(fullname.space, fullname.local);
8715             string1 = value1 + "";
8716             return string0 === string1 ? null
8717                 : string0 === string00 && string1 === string10 ? interpolate0
8718                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
8719           };
8720         }
8721
8722         function transition_attr(name, value) {
8723           var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
8724           return this.attrTween(name, typeof value === "function"
8725               ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
8726               : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
8727               : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
8728         }
8729
8730         function attrInterpolate(name, i) {
8731           return function(t) {
8732             this.setAttribute(name, i(t));
8733           };
8734         }
8735
8736         function attrInterpolateNS(fullname, i) {
8737           return function(t) {
8738             this.setAttributeNS(fullname.space, fullname.local, i(t));
8739           };
8740         }
8741
8742         function attrTweenNS(fullname, value) {
8743           var t0, i0;
8744           function tween() {
8745             var i = value.apply(this, arguments);
8746             if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);
8747             return t0;
8748           }
8749           tween._value = value;
8750           return tween;
8751         }
8752
8753         function attrTween(name, value) {
8754           var t0, i0;
8755           function tween() {
8756             var i = value.apply(this, arguments);
8757             if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);
8758             return t0;
8759           }
8760           tween._value = value;
8761           return tween;
8762         }
8763
8764         function transition_attrTween(name, value) {
8765           var key = "attr." + name;
8766           if (arguments.length < 2) return (key = this.tween(key)) && key._value;
8767           if (value == null) return this.tween(key, null);
8768           if (typeof value !== "function") throw new Error;
8769           var fullname = namespace(name);
8770           return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
8771         }
8772
8773         function delayFunction(id, value) {
8774           return function() {
8775             init(this, id).delay = +value.apply(this, arguments);
8776           };
8777         }
8778
8779         function delayConstant(id, value) {
8780           return value = +value, function() {
8781             init(this, id).delay = value;
8782           };
8783         }
8784
8785         function transition_delay(value) {
8786           var id = this._id;
8787
8788           return arguments.length
8789               ? this.each((typeof value === "function"
8790                   ? delayFunction
8791                   : delayConstant)(id, value))
8792               : get$2(this.node(), id).delay;
8793         }
8794
8795         function durationFunction(id, value) {
8796           return function() {
8797             set$1(this, id).duration = +value.apply(this, arguments);
8798           };
8799         }
8800
8801         function durationConstant(id, value) {
8802           return value = +value, function() {
8803             set$1(this, id).duration = value;
8804           };
8805         }
8806
8807         function transition_duration(value) {
8808           var id = this._id;
8809
8810           return arguments.length
8811               ? this.each((typeof value === "function"
8812                   ? durationFunction
8813                   : durationConstant)(id, value))
8814               : get$2(this.node(), id).duration;
8815         }
8816
8817         function easeConstant(id, value) {
8818           if (typeof value !== "function") throw new Error;
8819           return function() {
8820             set$1(this, id).ease = value;
8821           };
8822         }
8823
8824         function transition_ease(value) {
8825           var id = this._id;
8826
8827           return arguments.length
8828               ? this.each(easeConstant(id, value))
8829               : get$2(this.node(), id).ease;
8830         }
8831
8832         function transition_filter(match) {
8833           if (typeof match !== "function") match = matcher(match);
8834
8835           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
8836             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
8837               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
8838                 subgroup.push(node);
8839               }
8840             }
8841           }
8842
8843           return new Transition(subgroups, this._parents, this._name, this._id);
8844         }
8845
8846         function transition_merge(transition) {
8847           if (transition._id !== this._id) throw new Error;
8848
8849           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) {
8850             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
8851               if (node = group0[i] || group1[i]) {
8852                 merge[i] = node;
8853               }
8854             }
8855           }
8856
8857           for (; j < m0; ++j) {
8858             merges[j] = groups0[j];
8859           }
8860
8861           return new Transition(merges, this._parents, this._name, this._id);
8862         }
8863
8864         function start(name) {
8865           return (name + "").trim().split(/^|\s+/).every(function(t) {
8866             var i = t.indexOf(".");
8867             if (i >= 0) t = t.slice(0, i);
8868             return !t || t === "start";
8869           });
8870         }
8871
8872         function onFunction(id, name, listener) {
8873           var on0, on1, sit = start(name) ? init : set$1;
8874           return function() {
8875             var schedule = sit(this, id),
8876                 on = schedule.on;
8877
8878             // If this node shared a dispatch with the previous node,
8879             // just assign the updated shared dispatch and we’re done!
8880             // Otherwise, copy-on-write.
8881             if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
8882
8883             schedule.on = on1;
8884           };
8885         }
8886
8887         function transition_on(name, listener) {
8888           var id = this._id;
8889
8890           return arguments.length < 2
8891               ? get$2(this.node(), id).on.on(name)
8892               : this.each(onFunction(id, name, listener));
8893         }
8894
8895         function removeFunction(id) {
8896           return function() {
8897             var parent = this.parentNode;
8898             for (var i in this.__transition) if (+i !== id) return;
8899             if (parent) parent.removeChild(this);
8900           };
8901         }
8902
8903         function transition_remove() {
8904           return this.on("end.remove", removeFunction(this._id));
8905         }
8906
8907         function transition_select(select) {
8908           var name = this._name,
8909               id = this._id;
8910
8911           if (typeof select !== "function") select = selector(select);
8912
8913           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
8914             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
8915               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
8916                 if ("__data__" in node) subnode.__data__ = node.__data__;
8917                 subgroup[i] = subnode;
8918                 schedule(subgroup[i], name, id, i, subgroup, get$2(node, id));
8919               }
8920             }
8921           }
8922
8923           return new Transition(subgroups, this._parents, name, id);
8924         }
8925
8926         function transition_selectAll(select) {
8927           var name = this._name,
8928               id = this._id;
8929
8930           if (typeof select !== "function") select = selectorAll(select);
8931
8932           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
8933             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
8934               if (node = group[i]) {
8935                 for (var children = select.call(node, node.__data__, i, group), child, inherit = get$2(node, id), k = 0, l = children.length; k < l; ++k) {
8936                   if (child = children[k]) {
8937                     schedule(child, name, id, k, children, inherit);
8938                   }
8939                 }
8940                 subgroups.push(children);
8941                 parents.push(node);
8942               }
8943             }
8944           }
8945
8946           return new Transition(subgroups, parents, name, id);
8947         }
8948
8949         var Selection$1 = selection.prototype.constructor;
8950
8951         function transition_selection() {
8952           return new Selection$1(this._groups, this._parents);
8953         }
8954
8955         function styleNull(name, interpolate) {
8956           var string00,
8957               string10,
8958               interpolate0;
8959           return function() {
8960             var string0 = styleValue(this, name),
8961                 string1 = (this.style.removeProperty(name), styleValue(this, name));
8962             return string0 === string1 ? null
8963                 : string0 === string00 && string1 === string10 ? interpolate0
8964                 : interpolate0 = interpolate(string00 = string0, string10 = string1);
8965           };
8966         }
8967
8968         function styleRemove$1(name) {
8969           return function() {
8970             this.style.removeProperty(name);
8971           };
8972         }
8973
8974         function styleConstant$1(name, interpolate, value1) {
8975           var string00,
8976               string1 = value1 + "",
8977               interpolate0;
8978           return function() {
8979             var string0 = styleValue(this, name);
8980             return string0 === string1 ? null
8981                 : string0 === string00 ? interpolate0
8982                 : interpolate0 = interpolate(string00 = string0, value1);
8983           };
8984         }
8985
8986         function styleFunction$1(name, interpolate, value) {
8987           var string00,
8988               string10,
8989               interpolate0;
8990           return function() {
8991             var string0 = styleValue(this, name),
8992                 value1 = value(this),
8993                 string1 = value1 + "";
8994             if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));
8995             return string0 === string1 ? null
8996                 : string0 === string00 && string1 === string10 ? interpolate0
8997                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
8998           };
8999         }
9000
9001         function styleMaybeRemove(id, name) {
9002           var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;
9003           return function() {
9004             var schedule = set$1(this, id),
9005                 on = schedule.on,
9006                 listener = schedule.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined;
9007
9008             // If this node shared a dispatch with the previous node,
9009             // just assign the updated shared dispatch and we’re done!
9010             // Otherwise, copy-on-write.
9011             if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);
9012
9013             schedule.on = on1;
9014           };
9015         }
9016
9017         function transition_style(name, value, priority) {
9018           var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
9019           return value == null ? this
9020               .styleTween(name, styleNull(name, i))
9021               .on("end.style." + name, styleRemove$1(name))
9022             : typeof value === "function" ? this
9023               .styleTween(name, styleFunction$1(name, i, tweenValue(this, "style." + name, value)))
9024               .each(styleMaybeRemove(this._id, name))
9025             : this
9026               .styleTween(name, styleConstant$1(name, i, value), priority)
9027               .on("end.style." + name, null);
9028         }
9029
9030         function styleInterpolate(name, i, priority) {
9031           return function(t) {
9032             this.style.setProperty(name, i(t), priority);
9033           };
9034         }
9035
9036         function styleTween(name, value, priority) {
9037           var t, i0;
9038           function tween() {
9039             var i = value.apply(this, arguments);
9040             if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);
9041             return t;
9042           }
9043           tween._value = value;
9044           return tween;
9045         }
9046
9047         function transition_styleTween(name, value, priority) {
9048           var key = "style." + (name += "");
9049           if (arguments.length < 2) return (key = this.tween(key)) && key._value;
9050           if (value == null) return this.tween(key, null);
9051           if (typeof value !== "function") throw new Error;
9052           return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
9053         }
9054
9055         function textConstant$1(value) {
9056           return function() {
9057             this.textContent = value;
9058           };
9059         }
9060
9061         function textFunction$1(value) {
9062           return function() {
9063             var value1 = value(this);
9064             this.textContent = value1 == null ? "" : value1;
9065           };
9066         }
9067
9068         function transition_text(value) {
9069           return this.tween("text", typeof value === "function"
9070               ? textFunction$1(tweenValue(this, "text", value))
9071               : textConstant$1(value == null ? "" : value + ""));
9072         }
9073
9074         function transition_transition() {
9075           var name = this._name,
9076               id0 = this._id,
9077               id1 = newId();
9078
9079           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
9080             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
9081               if (node = group[i]) {
9082                 var inherit = get$2(node, id0);
9083                 schedule(node, name, id1, i, group, {
9084                   time: inherit.time + inherit.delay + inherit.duration,
9085                   delay: 0,
9086                   duration: inherit.duration,
9087                   ease: inherit.ease
9088                 });
9089               }
9090             }
9091           }
9092
9093           return new Transition(groups, this._parents, name, id1);
9094         }
9095
9096         function transition_end() {
9097           var on0, on1, that = this, id = that._id, size = that.size();
9098           return new Promise(function(resolve, reject) {
9099             var cancel = {value: reject},
9100                 end = {value: function() { if (--size === 0) resolve(); }};
9101
9102             that.each(function() {
9103               var schedule = set$1(this, id),
9104                   on = schedule.on;
9105
9106               // If this node shared a dispatch with the previous node,
9107               // just assign the updated shared dispatch and we’re done!
9108               // Otherwise, copy-on-write.
9109               if (on !== on0) {
9110                 on1 = (on0 = on).copy();
9111                 on1._.cancel.push(cancel);
9112                 on1._.interrupt.push(cancel);
9113                 on1._.end.push(end);
9114               }
9115
9116               schedule.on = on1;
9117             });
9118           });
9119         }
9120
9121         var id$4 = 0;
9122
9123         function Transition(groups, parents, name, id) {
9124           this._groups = groups;
9125           this._parents = parents;
9126           this._name = name;
9127           this._id = id;
9128         }
9129
9130         function transition(name) {
9131           return selection().transition(name);
9132         }
9133
9134         function newId() {
9135           return ++id$4;
9136         }
9137
9138         var selection_prototype = selection.prototype;
9139
9140         Transition.prototype = transition.prototype = {
9141           constructor: Transition,
9142           select: transition_select,
9143           selectAll: transition_selectAll,
9144           filter: transition_filter,
9145           merge: transition_merge,
9146           selection: transition_selection,
9147           transition: transition_transition,
9148           call: selection_prototype.call,
9149           nodes: selection_prototype.nodes,
9150           node: selection_prototype.node,
9151           size: selection_prototype.size,
9152           empty: selection_prototype.empty,
9153           each: selection_prototype.each,
9154           on: transition_on,
9155           attr: transition_attr,
9156           attrTween: transition_attrTween,
9157           style: transition_style,
9158           styleTween: transition_styleTween,
9159           text: transition_text,
9160           remove: transition_remove,
9161           tween: transition_tween,
9162           delay: transition_delay,
9163           duration: transition_duration,
9164           ease: transition_ease,
9165           end: transition_end
9166         };
9167
9168         function linear$1(t) {
9169           return +t;
9170         }
9171
9172         function quadIn(t) {
9173           return t * t;
9174         }
9175
9176         function quadOut(t) {
9177           return t * (2 - t);
9178         }
9179
9180         function quadInOut(t) {
9181           return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
9182         }
9183
9184         function cubicIn(t) {
9185           return t * t * t;
9186         }
9187
9188         function cubicOut(t) {
9189           return --t * t * t + 1;
9190         }
9191
9192         function cubicInOut(t) {
9193           return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
9194         }
9195
9196         var exponent = 3;
9197
9198         var polyIn = (function custom(e) {
9199           e = +e;
9200
9201           function polyIn(t) {
9202             return Math.pow(t, e);
9203           }
9204
9205           polyIn.exponent = custom;
9206
9207           return polyIn;
9208         })(exponent);
9209
9210         var polyOut = (function custom(e) {
9211           e = +e;
9212
9213           function polyOut(t) {
9214             return 1 - Math.pow(1 - t, e);
9215           }
9216
9217           polyOut.exponent = custom;
9218
9219           return polyOut;
9220         })(exponent);
9221
9222         var polyInOut = (function custom(e) {
9223           e = +e;
9224
9225           function polyInOut(t) {
9226             return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
9227           }
9228
9229           polyInOut.exponent = custom;
9230
9231           return polyInOut;
9232         })(exponent);
9233
9234         var pi = Math.PI,
9235             halfPi = pi / 2;
9236
9237         function sinIn(t) {
9238           return 1 - Math.cos(t * halfPi);
9239         }
9240
9241         function sinOut(t) {
9242           return Math.sin(t * halfPi);
9243         }
9244
9245         function sinInOut(t) {
9246           return (1 - Math.cos(pi * t)) / 2;
9247         }
9248
9249         function expIn(t) {
9250           return Math.pow(2, 10 * t - 10);
9251         }
9252
9253         function expOut(t) {
9254           return 1 - Math.pow(2, -10 * t);
9255         }
9256
9257         function expInOut(t) {
9258           return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
9259         }
9260
9261         function circleIn(t) {
9262           return 1 - Math.sqrt(1 - t * t);
9263         }
9264
9265         function circleOut(t) {
9266           return Math.sqrt(1 - --t * t);
9267         }
9268
9269         function circleInOut(t) {
9270           return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
9271         }
9272
9273         var b1 = 4 / 11,
9274             b2 = 6 / 11,
9275             b3 = 8 / 11,
9276             b4 = 3 / 4,
9277             b5 = 9 / 11,
9278             b6 = 10 / 11,
9279             b7 = 15 / 16,
9280             b8 = 21 / 22,
9281             b9 = 63 / 64,
9282             b0 = 1 / b1 / b1;
9283
9284         function bounceIn(t) {
9285           return 1 - bounceOut(1 - t);
9286         }
9287
9288         function bounceOut(t) {
9289           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;
9290         }
9291
9292         function bounceInOut(t) {
9293           return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
9294         }
9295
9296         var overshoot = 1.70158;
9297
9298         var backIn = (function custom(s) {
9299           s = +s;
9300
9301           function backIn(t) {
9302             return t * t * ((s + 1) * t - s);
9303           }
9304
9305           backIn.overshoot = custom;
9306
9307           return backIn;
9308         })(overshoot);
9309
9310         var backOut = (function custom(s) {
9311           s = +s;
9312
9313           function backOut(t) {
9314             return --t * t * ((s + 1) * t + s) + 1;
9315           }
9316
9317           backOut.overshoot = custom;
9318
9319           return backOut;
9320         })(overshoot);
9321
9322         var backInOut = (function custom(s) {
9323           s = +s;
9324
9325           function backInOut(t) {
9326             return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
9327           }
9328
9329           backInOut.overshoot = custom;
9330
9331           return backInOut;
9332         })(overshoot);
9333
9334         var tau = 2 * Math.PI,
9335             amplitude = 1,
9336             period = 0.3;
9337
9338         var elasticIn = (function custom(a, p) {
9339           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
9340
9341           function elasticIn(t) {
9342             return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
9343           }
9344
9345           elasticIn.amplitude = function(a) { return custom(a, p * tau); };
9346           elasticIn.period = function(p) { return custom(a, p); };
9347
9348           return elasticIn;
9349         })(amplitude, period);
9350
9351         var elasticOut = (function custom(a, p) {
9352           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
9353
9354           function elasticOut(t) {
9355             return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
9356           }
9357
9358           elasticOut.amplitude = function(a) { return custom(a, p * tau); };
9359           elasticOut.period = function(p) { return custom(a, p); };
9360
9361           return elasticOut;
9362         })(amplitude, period);
9363
9364         var elasticInOut = (function custom(a, p) {
9365           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
9366
9367           function elasticInOut(t) {
9368             return ((t = t * 2 - 1) < 0
9369                 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
9370                 : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
9371           }
9372
9373           elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
9374           elasticInOut.period = function(p) { return custom(a, p); };
9375
9376           return elasticInOut;
9377         })(amplitude, period);
9378
9379         var defaultTiming = {
9380           time: null, // Set on use.
9381           delay: 0,
9382           duration: 250,
9383           ease: cubicInOut
9384         };
9385
9386         function inherit(node, id) {
9387           var timing;
9388           while (!(timing = node.__transition) || !(timing = timing[id])) {
9389             if (!(node = node.parentNode)) {
9390               return defaultTiming.time = now(), defaultTiming;
9391             }
9392           }
9393           return timing;
9394         }
9395
9396         function selection_transition(name) {
9397           var id,
9398               timing;
9399
9400           if (name instanceof Transition) {
9401             id = name._id, name = name._name;
9402           } else {
9403             id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
9404           }
9405
9406           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
9407             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
9408               if (node = group[i]) {
9409                 schedule(node, name, id, i, group, timing || inherit(node, id));
9410               }
9411             }
9412           }
9413
9414           return new Transition(groups, this._parents, name, id);
9415         }
9416
9417         selection.prototype.interrupt = selection_interrupt;
9418         selection.prototype.transition = selection_transition;
9419
9420         var root$2 = [null];
9421
9422         function active(node, name) {
9423           var schedules = node.__transition,
9424               schedule,
9425               i;
9426
9427           if (schedules) {
9428             name = name == null ? null : name + "";
9429             for (i in schedules) {
9430               if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
9431                 return new Transition([[node]], root$2, name, +i);
9432               }
9433             }
9434           }
9435
9436           return null;
9437         }
9438
9439         function constant$4(x) {
9440           return function() {
9441             return x;
9442           };
9443         }
9444
9445         function BrushEvent(target, type, selection) {
9446           this.target = target;
9447           this.type = type;
9448           this.selection = selection;
9449         }
9450
9451         function nopropagation$1() {
9452           event.stopImmediatePropagation();
9453         }
9454
9455         function noevent$1() {
9456           event.preventDefault();
9457           event.stopImmediatePropagation();
9458         }
9459
9460         var MODE_DRAG = {name: "drag"},
9461             MODE_SPACE = {name: "space"},
9462             MODE_HANDLE = {name: "handle"},
9463             MODE_CENTER = {name: "center"};
9464
9465         var X = {
9466           name: "x",
9467           handles: ["e", "w"].map(type),
9468           input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
9469           output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
9470         };
9471
9472         var Y = {
9473           name: "y",
9474           handles: ["n", "s"].map(type),
9475           input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
9476           output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
9477         };
9478
9479         var XY = {
9480           name: "xy",
9481           handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type),
9482           input: function(xy) { return xy; },
9483           output: function(xy) { return xy; }
9484         };
9485
9486         var cursors = {
9487           overlay: "crosshair",
9488           selection: "move",
9489           n: "ns-resize",
9490           e: "ew-resize",
9491           s: "ns-resize",
9492           w: "ew-resize",
9493           nw: "nwse-resize",
9494           ne: "nesw-resize",
9495           se: "nwse-resize",
9496           sw: "nesw-resize"
9497         };
9498
9499         var flipX = {
9500           e: "w",
9501           w: "e",
9502           nw: "ne",
9503           ne: "nw",
9504           se: "sw",
9505           sw: "se"
9506         };
9507
9508         var flipY = {
9509           n: "s",
9510           s: "n",
9511           nw: "sw",
9512           ne: "se",
9513           se: "ne",
9514           sw: "nw"
9515         };
9516
9517         var signsX = {
9518           overlay: +1,
9519           selection: +1,
9520           n: null,
9521           e: +1,
9522           s: null,
9523           w: -1,
9524           nw: -1,
9525           ne: +1,
9526           se: +1,
9527           sw: -1
9528         };
9529
9530         var signsY = {
9531           overlay: +1,
9532           selection: +1,
9533           n: -1,
9534           e: null,
9535           s: +1,
9536           w: null,
9537           nw: -1,
9538           ne: -1,
9539           se: +1,
9540           sw: +1
9541         };
9542
9543         function type(t) {
9544           return {type: t};
9545         }
9546
9547         // Ignore right-click, since that should open the context menu.
9548         function defaultFilter$1() {
9549           return !event.button;
9550         }
9551
9552         function defaultExtent() {
9553           var svg = this.ownerSVGElement || this;
9554           return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
9555         }
9556
9557         // Like d3.local, but with the name “__brush” rather than auto-generated.
9558         function local$1(node) {
9559           while (!node.__brush) if (!(node = node.parentNode)) return;
9560           return node.__brush;
9561         }
9562
9563         function empty$1(extent) {
9564           return extent[0][0] === extent[1][0]
9565               || extent[0][1] === extent[1][1];
9566         }
9567
9568         function brushSelection(node) {
9569           var state = node.__brush;
9570           return state ? state.dim.output(state.selection) : null;
9571         }
9572
9573         function brushX() {
9574           return brush$1(X);
9575         }
9576
9577         function brushY() {
9578           return brush$1(Y);
9579         }
9580
9581         function brush() {
9582           return brush$1(XY);
9583         }
9584
9585         function brush$1(dim) {
9586           var extent = defaultExtent,
9587               filter = defaultFilter$1,
9588               listeners = dispatch(brush, "start", "brush", "end"),
9589               handleSize = 6,
9590               touchending;
9591
9592           function brush(group) {
9593             var overlay = group
9594                 .property("__brush", initialize)
9595               .selectAll(".overlay")
9596               .data([type("overlay")]);
9597
9598             overlay.enter().append("rect")
9599                 .attr("class", "overlay")
9600                 .attr("pointer-events", "all")
9601                 .attr("cursor", cursors.overlay)
9602               .merge(overlay)
9603                 .each(function() {
9604                   var extent = local$1(this).extent;
9605                   d3_select(this)
9606                       .attr("x", extent[0][0])
9607                       .attr("y", extent[0][1])
9608                       .attr("width", extent[1][0] - extent[0][0])
9609                       .attr("height", extent[1][1] - extent[0][1]);
9610                 });
9611
9612             group.selectAll(".selection")
9613               .data([type("selection")])
9614               .enter().append("rect")
9615                 .attr("class", "selection")
9616                 .attr("cursor", cursors.selection)
9617                 .attr("fill", "#777")
9618                 .attr("fill-opacity", 0.3)
9619                 .attr("stroke", "#fff")
9620                 .attr("shape-rendering", "crispEdges");
9621
9622             var handle = group.selectAll(".handle")
9623               .data(dim.handles, function(d) { return d.type; });
9624
9625             handle.exit().remove();
9626
9627             handle.enter().append("rect")
9628                 .attr("class", function(d) { return "handle handle--" + d.type; })
9629                 .attr("cursor", function(d) { return cursors[d.type]; });
9630
9631             group
9632                 .each(redraw)
9633                 .attr("fill", "none")
9634                 .attr("pointer-events", "all")
9635                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
9636                 .on("mousedown.brush touchstart.brush", started);
9637           }
9638
9639           brush.move = function(group, selection) {
9640             if (group.selection) {
9641               group
9642                   .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
9643                   .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
9644                   .tween("brush", function() {
9645                     var that = this,
9646                         state = that.__brush,
9647                         emit = emitter(that, arguments),
9648                         selection0 = state.selection,
9649                         selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
9650                         i = d3_interpolate(selection0, selection1);
9651
9652                     function tween(t) {
9653                       state.selection = t === 1 && empty$1(selection1) ? null : i(t);
9654                       redraw.call(that);
9655                       emit.brush();
9656                     }
9657
9658                     return selection0 && selection1 ? tween : tween(1);
9659                   });
9660             } else {
9661               group
9662                   .each(function() {
9663                     var that = this,
9664                         args = arguments,
9665                         state = that.__brush,
9666                         selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
9667                         emit = emitter(that, args).beforestart();
9668
9669                     interrupt(that);
9670                     state.selection = selection1 == null || empty$1(selection1) ? null : selection1;
9671                     redraw.call(that);
9672                     emit.start().brush().end();
9673                   });
9674             }
9675           };
9676
9677           function redraw() {
9678             var group = d3_select(this),
9679                 selection = local$1(this).selection;
9680
9681             if (selection) {
9682               group.selectAll(".selection")
9683                   .style("display", null)
9684                   .attr("x", selection[0][0])
9685                   .attr("y", selection[0][1])
9686                   .attr("width", selection[1][0] - selection[0][0])
9687                   .attr("height", selection[1][1] - selection[0][1]);
9688
9689               group.selectAll(".handle")
9690                   .style("display", null)
9691                   .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
9692                   .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
9693                   .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
9694                   .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
9695             }
9696
9697             else {
9698               group.selectAll(".selection,.handle")
9699                   .style("display", "none")
9700                   .attr("x", null)
9701                   .attr("y", null)
9702                   .attr("width", null)
9703                   .attr("height", null);
9704             }
9705           }
9706
9707           function emitter(that, args) {
9708             return that.__brush.emitter || new Emitter(that, args);
9709           }
9710
9711           function Emitter(that, args) {
9712             this.that = that;
9713             this.args = args;
9714             this.state = that.__brush;
9715             this.active = 0;
9716           }
9717
9718           Emitter.prototype = {
9719             beforestart: function() {
9720               if (++this.active === 1) this.state.emitter = this, this.starting = true;
9721               return this;
9722             },
9723             start: function() {
9724               if (this.starting) this.starting = false, this.emit("start");
9725               return this;
9726             },
9727             brush: function() {
9728               this.emit("brush");
9729               return this;
9730             },
9731             end: function() {
9732               if (--this.active === 0) delete this.state.emitter, this.emit("end");
9733               return this;
9734             },
9735             emit: function(type) {
9736               customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
9737             }
9738           };
9739
9740           function started() {
9741             if (event.touches) { if (event.changedTouches.length < event.touches.length) return noevent$1(); }
9742             else if (touchending) return;
9743             if (!filter.apply(this, arguments)) return;
9744
9745             var that = this,
9746                 type = event.target.__data__.type,
9747                 mode = (event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (event.altKey ? MODE_CENTER : MODE_HANDLE),
9748                 signX = dim === Y ? null : signsX[type],
9749                 signY = dim === X ? null : signsY[type],
9750                 state = local$1(that),
9751                 extent = state.extent,
9752                 selection = state.selection,
9753                 W = extent[0][0], w0, w1,
9754                 N = extent[0][1], n0, n1,
9755                 E = extent[1][0], e0, e1,
9756                 S = extent[1][1], s0, s1,
9757                 dx,
9758                 dy,
9759                 moving,
9760                 shifting = signX && signY && event.shiftKey,
9761                 lockX,
9762                 lockY,
9763                 point0 = d3_mouse(that),
9764                 point = point0,
9765                 emit = emitter(that, arguments).beforestart();
9766
9767             if (type === "overlay") {
9768               state.selection = selection = [
9769                 [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
9770                 [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
9771               ];
9772             } else {
9773               w0 = selection[0][0];
9774               n0 = selection[0][1];
9775               e0 = selection[1][0];
9776               s0 = selection[1][1];
9777             }
9778
9779             w1 = w0;
9780             n1 = n0;
9781             e1 = e0;
9782             s1 = s0;
9783
9784             var group = d3_select(that)
9785                 .attr("pointer-events", "none");
9786
9787             var overlay = group.selectAll(".overlay")
9788                 .attr("cursor", cursors[type]);
9789
9790             if (event.touches) {
9791               group
9792                   .on("touchmove.brush", moved, true)
9793                   .on("touchend.brush touchcancel.brush", ended, true);
9794             } else {
9795               var view = d3_select(event.view)
9796                   .on("keydown.brush", keydowned, true)
9797                   .on("keyup.brush", keyupped, true)
9798                   .on("mousemove.brush", moved, true)
9799                   .on("mouseup.brush", ended, true);
9800
9801               dragDisable(event.view);
9802             }
9803
9804             nopropagation$1();
9805             interrupt(that);
9806             redraw.call(that);
9807             emit.start();
9808
9809             function moved() {
9810               var point1 = d3_mouse(that);
9811               if (shifting && !lockX && !lockY) {
9812                 if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
9813                 else lockX = true;
9814               }
9815               point = point1;
9816               moving = true;
9817               noevent$1();
9818               move();
9819             }
9820
9821             function move() {
9822               var t;
9823
9824               dx = point[0] - point0[0];
9825               dy = point[1] - point0[1];
9826
9827               switch (mode) {
9828                 case MODE_SPACE:
9829                 case MODE_DRAG: {
9830                   if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
9831                   if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
9832                   break;
9833                 }
9834                 case MODE_HANDLE: {
9835                   if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
9836                   else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
9837                   if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
9838                   else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
9839                   break;
9840                 }
9841                 case MODE_CENTER: {
9842                   if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
9843                   if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
9844                   break;
9845                 }
9846               }
9847
9848               if (e1 < w1) {
9849                 signX *= -1;
9850                 t = w0, w0 = e0, e0 = t;
9851                 t = w1, w1 = e1, e1 = t;
9852                 if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
9853               }
9854
9855               if (s1 < n1) {
9856                 signY *= -1;
9857                 t = n0, n0 = s0, s0 = t;
9858                 t = n1, n1 = s1, s1 = t;
9859                 if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
9860               }
9861
9862               if (state.selection) selection = state.selection; // May be set by brush.move!
9863               if (lockX) w1 = selection[0][0], e1 = selection[1][0];
9864               if (lockY) n1 = selection[0][1], s1 = selection[1][1];
9865
9866               if (selection[0][0] !== w1
9867                   || selection[0][1] !== n1
9868                   || selection[1][0] !== e1
9869                   || selection[1][1] !== s1) {
9870                 state.selection = [[w1, n1], [e1, s1]];
9871                 redraw.call(that);
9872                 emit.brush();
9873               }
9874             }
9875
9876             function ended() {
9877               nopropagation$1();
9878               if (event.touches) {
9879                 if (event.touches.length) return;
9880                 if (touchending) clearTimeout(touchending);
9881                 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
9882                 group.on("touchmove.brush touchend.brush touchcancel.brush", null);
9883               } else {
9884                 yesdrag(event.view, moving);
9885                 view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
9886               }
9887               group.attr("pointer-events", "all");
9888               overlay.attr("cursor", cursors.overlay);
9889               if (state.selection) selection = state.selection; // May be set by brush.move (on start)!
9890               if (empty$1(selection)) state.selection = null, redraw.call(that);
9891               emit.end();
9892             }
9893
9894             function keydowned() {
9895               switch (event.keyCode) {
9896                 case 16: { // SHIFT
9897                   shifting = signX && signY;
9898                   break;
9899                 }
9900                 case 18: { // ALT
9901                   if (mode === MODE_HANDLE) {
9902                     if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
9903                     if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
9904                     mode = MODE_CENTER;
9905                     move();
9906                   }
9907                   break;
9908                 }
9909                 case 32: { // SPACE; takes priority over ALT
9910                   if (mode === MODE_HANDLE || mode === MODE_CENTER) {
9911                     if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
9912                     if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
9913                     mode = MODE_SPACE;
9914                     overlay.attr("cursor", cursors.selection);
9915                     move();
9916                   }
9917                   break;
9918                 }
9919                 default: return;
9920               }
9921               noevent$1();
9922             }
9923
9924             function keyupped() {
9925               switch (event.keyCode) {
9926                 case 16: { // SHIFT
9927                   if (shifting) {
9928                     lockX = lockY = shifting = false;
9929                     move();
9930                   }
9931                   break;
9932                 }
9933                 case 18: { // ALT
9934                   if (mode === MODE_CENTER) {
9935                     if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
9936                     if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
9937                     mode = MODE_HANDLE;
9938                     move();
9939                   }
9940                   break;
9941                 }
9942                 case 32: { // SPACE
9943                   if (mode === MODE_SPACE) {
9944                     if (event.altKey) {
9945                       if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
9946                       if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
9947                       mode = MODE_CENTER;
9948                     } else {
9949                       if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
9950                       if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
9951                       mode = MODE_HANDLE;
9952                     }
9953                     overlay.attr("cursor", cursors[type]);
9954                     move();
9955                   }
9956                   break;
9957                 }
9958                 default: return;
9959               }
9960               noevent$1();
9961             }
9962           }
9963
9964           function initialize() {
9965             var state = this.__brush || {selection: null};
9966             state.extent = extent.apply(this, arguments);
9967             state.dim = dim;
9968             return state;
9969           }
9970
9971           brush.extent = function(_) {
9972             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
9973           };
9974
9975           brush.filter = function(_) {
9976             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter;
9977           };
9978
9979           brush.handleSize = function(_) {
9980             return arguments.length ? (handleSize = +_, brush) : handleSize;
9981           };
9982
9983           brush.on = function() {
9984             var value = listeners.on.apply(listeners, arguments);
9985             return value === listeners ? brush : value;
9986           };
9987
9988           return brush;
9989         }
9990
9991         var cos = Math.cos;
9992         var sin = Math.sin;
9993         var pi$1 = Math.PI;
9994         var halfPi$1 = pi$1 / 2;
9995         var tau$1 = pi$1 * 2;
9996         var max$3 = Math.max;
9997
9998         function compareValue(compare) {
9999           return function(a, b) {
10000             return compare(
10001               a.source.value + a.target.value,
10002               b.source.value + b.target.value
10003             );
10004           };
10005         }
10006
10007         function chord() {
10008           var padAngle = 0,
10009               sortGroups = null,
10010               sortSubgroups = null,
10011               sortChords = null;
10012
10013           function chord(matrix) {
10014             var n = matrix.length,
10015                 groupSums = [],
10016                 groupIndex = d3_range(n),
10017                 subgroupIndex = [],
10018                 chords = [],
10019                 groups = chords.groups = new Array(n),
10020                 subgroups = new Array(n * n),
10021                 k,
10022                 x,
10023                 x0,
10024                 dx,
10025                 i,
10026                 j;
10027
10028             // Compute the sum.
10029             k = 0, i = -1; while (++i < n) {
10030               x = 0, j = -1; while (++j < n) {
10031                 x += matrix[i][j];
10032               }
10033               groupSums.push(x);
10034               subgroupIndex.push(d3_range(n));
10035               k += x;
10036             }
10037
10038             // Sort groups…
10039             if (sortGroups) groupIndex.sort(function(a, b) {
10040               return sortGroups(groupSums[a], groupSums[b]);
10041             });
10042
10043             // Sort subgroups…
10044             if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
10045               d.sort(function(a, b) {
10046                 return sortSubgroups(matrix[i][a], matrix[i][b]);
10047               });
10048             });
10049
10050             // Convert the sum to scaling factor for [0, 2pi].
10051             // TODO Allow start and end angle to be specified?
10052             // TODO Allow padding to be specified as percentage?
10053             k = max$3(0, tau$1 - padAngle * n) / k;
10054             dx = k ? padAngle : tau$1 / n;
10055
10056             // Compute the start and end angle for each group and subgroup.
10057             // Note: Opera has a bug reordering object literal properties!
10058             x = 0, i = -1; while (++i < n) {
10059               x0 = x, j = -1; while (++j < n) {
10060                 var di = groupIndex[i],
10061                     dj = subgroupIndex[di][j],
10062                     v = matrix[di][dj],
10063                     a0 = x,
10064                     a1 = x += v * k;
10065                 subgroups[dj * n + di] = {
10066                   index: di,
10067                   subindex: dj,
10068                   startAngle: a0,
10069                   endAngle: a1,
10070                   value: v
10071                 };
10072               }
10073               groups[di] = {
10074                 index: di,
10075                 startAngle: x0,
10076                 endAngle: x,
10077                 value: groupSums[di]
10078               };
10079               x += dx;
10080             }
10081
10082             // Generate chords for each (non-empty) subgroup-subgroup link.
10083             i = -1; while (++i < n) {
10084               j = i - 1; while (++j < n) {
10085                 var source = subgroups[j * n + i],
10086                     target = subgroups[i * n + j];
10087                 if (source.value || target.value) {
10088                   chords.push(source.value < target.value
10089                       ? {source: target, target: source}
10090                       : {source: source, target: target});
10091                 }
10092               }
10093             }
10094
10095             return sortChords ? chords.sort(sortChords) : chords;
10096           }
10097
10098           chord.padAngle = function(_) {
10099             return arguments.length ? (padAngle = max$3(0, _), chord) : padAngle;
10100           };
10101
10102           chord.sortGroups = function(_) {
10103             return arguments.length ? (sortGroups = _, chord) : sortGroups;
10104           };
10105
10106           chord.sortSubgroups = function(_) {
10107             return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
10108           };
10109
10110           chord.sortChords = function(_) {
10111             return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
10112           };
10113
10114           return chord;
10115         }
10116
10117         var slice$6 = Array.prototype.slice;
10118
10119         function constant$5(x) {
10120           return function() {
10121             return x;
10122           };
10123         }
10124
10125         var pi$2 = Math.PI,
10126             tau$2 = 2 * pi$2,
10127             epsilon$1 = 1e-6,
10128             tauEpsilon = tau$2 - epsilon$1;
10129
10130         function Path() {
10131           this._x0 = this._y0 = // start of current subpath
10132           this._x1 = this._y1 = null; // end of current subpath
10133           this._ = "";
10134         }
10135
10136         function path() {
10137           return new Path;
10138         }
10139
10140         Path.prototype = path.prototype = {
10141           constructor: Path,
10142           moveTo: function(x, y) {
10143             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
10144           },
10145           closePath: function() {
10146             if (this._x1 !== null) {
10147               this._x1 = this._x0, this._y1 = this._y0;
10148               this._ += "Z";
10149             }
10150           },
10151           lineTo: function(x, y) {
10152             this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
10153           },
10154           quadraticCurveTo: function(x1, y1, x, y) {
10155             this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
10156           },
10157           bezierCurveTo: function(x1, y1, x2, y2, x, y) {
10158             this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
10159           },
10160           arcTo: function(x1, y1, x2, y2, r) {
10161             x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
10162             var x0 = this._x1,
10163                 y0 = this._y1,
10164                 x21 = x2 - x1,
10165                 y21 = y2 - y1,
10166                 x01 = x0 - x1,
10167                 y01 = y0 - y1,
10168                 l01_2 = x01 * x01 + y01 * y01;
10169
10170             // Is the radius negative? Error.
10171             if (r < 0) throw new Error("negative radius: " + r);
10172
10173             // Is this path empty? Move to (x1,y1).
10174             if (this._x1 === null) {
10175               this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
10176             }
10177
10178             // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
10179             else if (!(l01_2 > epsilon$1));
10180
10181             // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
10182             // Equivalently, is (x1,y1) coincident with (x2,y2)?
10183             // Or, is the radius zero? Line to (x1,y1).
10184             else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {
10185               this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
10186             }
10187
10188             // Otherwise, draw an arc!
10189             else {
10190               var x20 = x2 - x0,
10191                   y20 = y2 - y0,
10192                   l21_2 = x21 * x21 + y21 * y21,
10193                   l20_2 = x20 * x20 + y20 * y20,
10194                   l21 = Math.sqrt(l21_2),
10195                   l01 = Math.sqrt(l01_2),
10196                   l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
10197                   t01 = l / l01,
10198                   t21 = l / l21;
10199
10200               // If the start tangent is not coincident with (x0,y0), line to.
10201               if (Math.abs(t01 - 1) > epsilon$1) {
10202                 this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
10203               }
10204
10205               this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
10206             }
10207           },
10208           arc: function(x, y, r, a0, a1, ccw) {
10209             x = +x, y = +y, r = +r;
10210             var dx = r * Math.cos(a0),
10211                 dy = r * Math.sin(a0),
10212                 x0 = x + dx,
10213                 y0 = y + dy,
10214                 cw = 1 ^ ccw,
10215                 da = ccw ? a0 - a1 : a1 - a0;
10216
10217             // Is the radius negative? Error.
10218             if (r < 0) throw new Error("negative radius: " + r);
10219
10220             // Is this path empty? Move to (x0,y0).
10221             if (this._x1 === null) {
10222               this._ += "M" + x0 + "," + y0;
10223             }
10224
10225             // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
10226             else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {
10227               this._ += "L" + x0 + "," + y0;
10228             }
10229
10230             // Is this arc empty? We’re done.
10231             if (!r) return;
10232
10233             // Does the angle go the wrong way? Flip the direction.
10234             if (da < 0) da = da % tau$2 + tau$2;
10235
10236             // Is this a complete circle? Draw two arcs to complete the circle.
10237             if (da > tauEpsilon) {
10238               this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
10239             }
10240
10241             // Is this arc non-empty? Draw an arc!
10242             else if (da > epsilon$1) {
10243               this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
10244             }
10245           },
10246           rect: function(x, y, w, h) {
10247             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";
10248           },
10249           toString: function() {
10250             return this._;
10251           }
10252         };
10253
10254         function defaultSource(d) {
10255           return d.source;
10256         }
10257
10258         function defaultTarget(d) {
10259           return d.target;
10260         }
10261
10262         function defaultRadius(d) {
10263           return d.radius;
10264         }
10265
10266         function defaultStartAngle(d) {
10267           return d.startAngle;
10268         }
10269
10270         function defaultEndAngle(d) {
10271           return d.endAngle;
10272         }
10273
10274         function ribbon() {
10275           var source = defaultSource,
10276               target = defaultTarget,
10277               radius = defaultRadius,
10278               startAngle = defaultStartAngle,
10279               endAngle = defaultEndAngle,
10280               context = null;
10281
10282           function ribbon() {
10283             var buffer,
10284                 argv = slice$6.call(arguments),
10285                 s = source.apply(this, argv),
10286                 t = target.apply(this, argv),
10287                 sr = +radius.apply(this, (argv[0] = s, argv)),
10288                 sa0 = startAngle.apply(this, argv) - halfPi$1,
10289                 sa1 = endAngle.apply(this, argv) - halfPi$1,
10290                 sx0 = sr * cos(sa0),
10291                 sy0 = sr * sin(sa0),
10292                 tr = +radius.apply(this, (argv[0] = t, argv)),
10293                 ta0 = startAngle.apply(this, argv) - halfPi$1,
10294                 ta1 = endAngle.apply(this, argv) - halfPi$1;
10295
10296             if (!context) context = buffer = path();
10297
10298             context.moveTo(sx0, sy0);
10299             context.arc(0, 0, sr, sa0, sa1);
10300             if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
10301               context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
10302               context.arc(0, 0, tr, ta0, ta1);
10303             }
10304             context.quadraticCurveTo(0, 0, sx0, sy0);
10305             context.closePath();
10306
10307             if (buffer) return context = null, buffer + "" || null;
10308           }
10309
10310           ribbon.radius = function(_) {
10311             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius;
10312           };
10313
10314           ribbon.startAngle = function(_) {
10315             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle;
10316           };
10317
10318           ribbon.endAngle = function(_) {
10319             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle;
10320           };
10321
10322           ribbon.source = function(_) {
10323             return arguments.length ? (source = _, ribbon) : source;
10324           };
10325
10326           ribbon.target = function(_) {
10327             return arguments.length ? (target = _, ribbon) : target;
10328           };
10329
10330           ribbon.context = function(_) {
10331             return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
10332           };
10333
10334           return ribbon;
10335         }
10336
10337         var prefix = "$";
10338
10339         function Map$1() {}
10340
10341         Map$1.prototype = map$3.prototype = {
10342           constructor: Map$1,
10343           has: function(key) {
10344             return (prefix + key) in this;
10345           },
10346           get: function(key) {
10347             return this[prefix + key];
10348           },
10349           set: function(key, value) {
10350             this[prefix + key] = value;
10351             return this;
10352           },
10353           remove: function(key) {
10354             var property = prefix + key;
10355             return property in this && delete this[property];
10356           },
10357           clear: function() {
10358             for (var property in this) if (property[0] === prefix) delete this[property];
10359           },
10360           keys: function() {
10361             var keys = [];
10362             for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
10363             return keys;
10364           },
10365           values: function() {
10366             var values = [];
10367             for (var property in this) if (property[0] === prefix) values.push(this[property]);
10368             return values;
10369           },
10370           entries: function() {
10371             var entries = [];
10372             for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
10373             return entries;
10374           },
10375           size: function() {
10376             var size = 0;
10377             for (var property in this) if (property[0] === prefix) ++size;
10378             return size;
10379           },
10380           empty: function() {
10381             for (var property in this) if (property[0] === prefix) return false;
10382             return true;
10383           },
10384           each: function(f) {
10385             for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
10386           }
10387         };
10388
10389         function map$3(object, f) {
10390           var map = new Map$1;
10391
10392           // Copy constructor.
10393           if (object instanceof Map$1) object.each(function(value, key) { map.set(key, value); });
10394
10395           // Index array by numeric index or specified key function.
10396           else if (Array.isArray(object)) {
10397             var i = -1,
10398                 n = object.length,
10399                 o;
10400
10401             if (f == null) while (++i < n) map.set(i, object[i]);
10402             else while (++i < n) map.set(f(o = object[i], i, object), o);
10403           }
10404
10405           // Convert object to map.
10406           else if (object) for (var key in object) map.set(key, object[key]);
10407
10408           return map;
10409         }
10410
10411         function nest() {
10412           var keys = [],
10413               sortKeys = [],
10414               sortValues,
10415               rollup,
10416               nest;
10417
10418           function apply(array, depth, createResult, setResult) {
10419             if (depth >= keys.length) {
10420               if (sortValues != null) array.sort(sortValues);
10421               return rollup != null ? rollup(array) : array;
10422             }
10423
10424             var i = -1,
10425                 n = array.length,
10426                 key = keys[depth++],
10427                 keyValue,
10428                 value,
10429                 valuesByKey = map$3(),
10430                 values,
10431                 result = createResult();
10432
10433             while (++i < n) {
10434               if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
10435                 values.push(value);
10436               } else {
10437                 valuesByKey.set(keyValue, [value]);
10438               }
10439             }
10440
10441             valuesByKey.each(function(values, key) {
10442               setResult(result, key, apply(values, depth, createResult, setResult));
10443             });
10444
10445             return result;
10446           }
10447
10448           function entries(map, depth) {
10449             if (++depth > keys.length) return map;
10450             var array, sortKey = sortKeys[depth - 1];
10451             if (rollup != null && depth >= keys.length) array = map.entries();
10452             else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
10453             return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
10454           }
10455
10456           return nest = {
10457             object: function(array) { return apply(array, 0, createObject, setObject); },
10458             map: function(array) { return apply(array, 0, createMap, setMap); },
10459             entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
10460             key: function(d) { keys.push(d); return nest; },
10461             sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
10462             sortValues: function(order) { sortValues = order; return nest; },
10463             rollup: function(f) { rollup = f; return nest; }
10464           };
10465         }
10466
10467         function createObject() {
10468           return {};
10469         }
10470
10471         function setObject(object, key, value) {
10472           object[key] = value;
10473         }
10474
10475         function createMap() {
10476           return map$3();
10477         }
10478
10479         function setMap(map, key, value) {
10480           map.set(key, value);
10481         }
10482
10483         function Set$1() {}
10484
10485         var proto = map$3.prototype;
10486
10487         Set$1.prototype = set$2.prototype = {
10488           constructor: Set$1,
10489           has: proto.has,
10490           add: function(value) {
10491             value += "";
10492             this[prefix + value] = value;
10493             return this;
10494           },
10495           remove: proto.remove,
10496           clear: proto.clear,
10497           values: proto.keys,
10498           size: proto.size,
10499           empty: proto.empty,
10500           each: proto.each
10501         };
10502
10503         function set$2(object, f) {
10504           var set = new Set$1;
10505
10506           // Copy constructor.
10507           if (object instanceof Set$1) object.each(function(value) { set.add(value); });
10508
10509           // Otherwise, assume it’s an array.
10510           else if (object) {
10511             var i = -1, n = object.length;
10512             if (f == null) while (++i < n) set.add(object[i]);
10513             else while (++i < n) set.add(f(object[i], i, object));
10514           }
10515
10516           return set;
10517         }
10518
10519         function keys$3(map) {
10520           var keys = [];
10521           for (var key in map) keys.push(key);
10522           return keys;
10523         }
10524
10525         function values(map) {
10526           var values = [];
10527           for (var key in map) values.push(map[key]);
10528           return values;
10529         }
10530
10531         function entries(map) {
10532           var entries = [];
10533           for (var key in map) entries.push({key: key, value: map[key]});
10534           return entries;
10535         }
10536
10537         var array$3 = Array.prototype;
10538
10539         var slice$7 = array$3.slice;
10540
10541         function ascending$1(a, b) {
10542           return a - b;
10543         }
10544
10545         function area(ring) {
10546           var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];
10547           while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];
10548           return area;
10549         }
10550
10551         function constant$6(x) {
10552           return function() {
10553             return x;
10554           };
10555         }
10556
10557         function contains$1(ring, hole) {
10558           var i = -1, n = hole.length, c;
10559           while (++i < n) if (c = ringContains(ring, hole[i])) return c;
10560           return 0;
10561         }
10562
10563         function ringContains(ring, point) {
10564           var x = point[0], y = point[1], contains = -1;
10565           for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {
10566             var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];
10567             if (segmentContains(pi, pj, point)) return 0;
10568             if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;
10569           }
10570           return contains;
10571         }
10572
10573         function segmentContains(a, b, c) {
10574           var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);
10575         }
10576
10577         function collinear(a, b, c) {
10578           return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);
10579         }
10580
10581         function within(p, q, r) {
10582           return p <= q && q <= r || r <= q && q <= p;
10583         }
10584
10585         function noop$3() {}
10586
10587         var cases = [
10588           [],
10589           [[[1.0, 1.5], [0.5, 1.0]]],
10590           [[[1.5, 1.0], [1.0, 1.5]]],
10591           [[[1.5, 1.0], [0.5, 1.0]]],
10592           [[[1.0, 0.5], [1.5, 1.0]]],
10593           [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],
10594           [[[1.0, 0.5], [1.0, 1.5]]],
10595           [[[1.0, 0.5], [0.5, 1.0]]],
10596           [[[0.5, 1.0], [1.0, 0.5]]],
10597           [[[1.0, 1.5], [1.0, 0.5]]],
10598           [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],
10599           [[[1.5, 1.0], [1.0, 0.5]]],
10600           [[[0.5, 1.0], [1.5, 1.0]]],
10601           [[[1.0, 1.5], [1.5, 1.0]]],
10602           [[[0.5, 1.0], [1.0, 1.5]]],
10603           []
10604         ];
10605
10606         function contours() {
10607           var dx = 1,
10608               dy = 1,
10609               threshold = thresholdSturges,
10610               smooth = smoothLinear;
10611
10612           function contours(values) {
10613             var tz = threshold(values);
10614
10615             // Convert number of thresholds into uniform thresholds.
10616             if (!Array.isArray(tz)) {
10617               var domain = extent(values), start = domain[0], stop = domain[1];
10618               tz = tickStep(start, stop, tz);
10619               tz = d3_range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);
10620             } else {
10621               tz = tz.slice().sort(ascending$1);
10622             }
10623
10624             return tz.map(function(value) {
10625               return contour(values, value);
10626             });
10627           }
10628
10629           // Accumulate, smooth contour rings, assign holes to exterior rings.
10630           // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
10631           function contour(values, value) {
10632             var polygons = [],
10633                 holes = [];
10634
10635             isorings(values, value, function(ring) {
10636               smooth(ring, values, value);
10637               if (area(ring) > 0) polygons.push([ring]);
10638               else holes.push(ring);
10639             });
10640
10641             holes.forEach(function(hole) {
10642               for (var i = 0, n = polygons.length, polygon; i < n; ++i) {
10643                 if (contains$1((polygon = polygons[i])[0], hole) !== -1) {
10644                   polygon.push(hole);
10645                   return;
10646                 }
10647               }
10648             });
10649
10650             return {
10651               type: "MultiPolygon",
10652               value: value,
10653               coordinates: polygons
10654             };
10655           }
10656
10657           // Marching squares with isolines stitched into rings.
10658           // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js
10659           function isorings(values, value, callback) {
10660             var fragmentByStart = new Array,
10661                 fragmentByEnd = new Array,
10662                 x, y, t0, t1, t2, t3;
10663
10664             // Special case for the first row (y = -1, t2 = t3 = 0).
10665             x = y = -1;
10666             t1 = values[0] >= value;
10667             cases[t1 << 1].forEach(stitch);
10668             while (++x < dx - 1) {
10669               t0 = t1, t1 = values[x + 1] >= value;
10670               cases[t0 | t1 << 1].forEach(stitch);
10671             }
10672             cases[t1 << 0].forEach(stitch);
10673
10674             // General case for the intermediate rows.
10675             while (++y < dy - 1) {
10676               x = -1;
10677               t1 = values[y * dx + dx] >= value;
10678               t2 = values[y * dx] >= value;
10679               cases[t1 << 1 | t2 << 2].forEach(stitch);
10680               while (++x < dx - 1) {
10681                 t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;
10682                 t3 = t2, t2 = values[y * dx + x + 1] >= value;
10683                 cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
10684               }
10685               cases[t1 | t2 << 3].forEach(stitch);
10686             }
10687
10688             // Special case for the last row (y = dy - 1, t0 = t1 = 0).
10689             x = -1;
10690             t2 = values[y * dx] >= value;
10691             cases[t2 << 2].forEach(stitch);
10692             while (++x < dx - 1) {
10693               t3 = t2, t2 = values[y * dx + x + 1] >= value;
10694               cases[t2 << 2 | t3 << 3].forEach(stitch);
10695             }
10696             cases[t2 << 3].forEach(stitch);
10697
10698             function stitch(line) {
10699               var start = [line[0][0] + x, line[0][1] + y],
10700                   end = [line[1][0] + x, line[1][1] + y],
10701                   startIndex = index(start),
10702                   endIndex = index(end),
10703                   f, g;
10704               if (f = fragmentByEnd[startIndex]) {
10705                 if (g = fragmentByStart[endIndex]) {
10706                   delete fragmentByEnd[f.end];
10707                   delete fragmentByStart[g.start];
10708                   if (f === g) {
10709                     f.ring.push(end);
10710                     callback(f.ring);
10711                   } else {
10712                     fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};
10713                   }
10714                 } else {
10715                   delete fragmentByEnd[f.end];
10716                   f.ring.push(end);
10717                   fragmentByEnd[f.end = endIndex] = f;
10718                 }
10719               } else if (f = fragmentByStart[endIndex]) {
10720                 if (g = fragmentByEnd[startIndex]) {
10721                   delete fragmentByStart[f.start];
10722                   delete fragmentByEnd[g.end];
10723                   if (f === g) {
10724                     f.ring.push(end);
10725                     callback(f.ring);
10726                   } else {
10727                     fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};
10728                   }
10729                 } else {
10730                   delete fragmentByStart[f.start];
10731                   f.ring.unshift(start);
10732                   fragmentByStart[f.start = startIndex] = f;
10733                 }
10734               } else {
10735                 fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};
10736               }
10737             }
10738           }
10739
10740           function index(point) {
10741             return point[0] * 2 + point[1] * (dx + 1) * 4;
10742           }
10743
10744           function smoothLinear(ring, values, value) {
10745             ring.forEach(function(point) {
10746               var x = point[0],
10747                   y = point[1],
10748                   xt = x | 0,
10749                   yt = y | 0,
10750                   v0,
10751                   v1 = values[yt * dx + xt];
10752               if (x > 0 && x < dx && xt === x) {
10753                 v0 = values[yt * dx + xt - 1];
10754                 point[0] = x + (value - v0) / (v1 - v0) - 0.5;
10755               }
10756               if (y > 0 && y < dy && yt === y) {
10757                 v0 = values[(yt - 1) * dx + xt];
10758                 point[1] = y + (value - v0) / (v1 - v0) - 0.5;
10759               }
10760             });
10761           }
10762
10763           contours.contour = contour;
10764
10765           contours.size = function(_) {
10766             if (!arguments.length) return [dx, dy];
10767             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
10768             if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size");
10769             return dx = _0, dy = _1, contours;
10770           };
10771
10772           contours.thresholds = function(_) {
10773             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), contours) : threshold;
10774           };
10775
10776           contours.smooth = function(_) {
10777             return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;
10778           };
10779
10780           return contours;
10781         }
10782
10783         // TODO Optimize edge cases.
10784         // TODO Optimize index calculation.
10785         // TODO Optimize arguments.
10786         function blurX(source, target, r) {
10787           var n = source.width,
10788               m = source.height,
10789               w = (r << 1) + 1;
10790           for (var j = 0; j < m; ++j) {
10791             for (var i = 0, sr = 0; i < n + r; ++i) {
10792               if (i < n) {
10793                 sr += source.data[i + j * n];
10794               }
10795               if (i >= r) {
10796                 if (i >= w) {
10797                   sr -= source.data[i - w + j * n];
10798                 }
10799                 target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
10800               }
10801             }
10802           }
10803         }
10804
10805         // TODO Optimize edge cases.
10806         // TODO Optimize index calculation.
10807         // TODO Optimize arguments.
10808         function blurY(source, target, r) {
10809           var n = source.width,
10810               m = source.height,
10811               w = (r << 1) + 1;
10812           for (var i = 0; i < n; ++i) {
10813             for (var j = 0, sr = 0; j < m + r; ++j) {
10814               if (j < m) {
10815                 sr += source.data[i + j * n];
10816               }
10817               if (j >= r) {
10818                 if (j >= w) {
10819                   sr -= source.data[i + (j - w) * n];
10820                 }
10821                 target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
10822               }
10823             }
10824           }
10825         }
10826
10827         function defaultX(d) {
10828           return d[0];
10829         }
10830
10831         function defaultY(d) {
10832           return d[1];
10833         }
10834
10835         function defaultWeight() {
10836           return 1;
10837         }
10838
10839         function density() {
10840           var x = defaultX,
10841               y = defaultY,
10842               weight = defaultWeight,
10843               dx = 960,
10844               dy = 500,
10845               r = 20, // blur radius
10846               k = 2, // log2(grid cell size)
10847               o = r * 3, // grid offset, to pad for blur
10848               n = (dx + o * 2) >> k, // grid width
10849               m = (dy + o * 2) >> k, // grid height
10850               threshold = constant$6(20);
10851
10852           function density(data) {
10853             var values0 = new Float32Array(n * m),
10854                 values1 = new Float32Array(n * m);
10855
10856             data.forEach(function(d, i, data) {
10857               var xi = (+x(d, i, data) + o) >> k,
10858                   yi = (+y(d, i, data) + o) >> k,
10859                   wi = +weight(d, i, data);
10860               if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
10861                 values0[xi + yi * n] += wi;
10862               }
10863             });
10864
10865             // TODO Optimize.
10866             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
10867             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
10868             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
10869             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
10870             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
10871             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
10872
10873             var tz = threshold(values0);
10874
10875             // Convert number of thresholds into uniform thresholds.
10876             if (!Array.isArray(tz)) {
10877               var stop = max$2(values0);
10878               tz = tickStep(0, stop, tz);
10879               tz = d3_range(0, Math.floor(stop / tz) * tz, tz);
10880               tz.shift();
10881             }
10882
10883             return contours()
10884                 .thresholds(tz)
10885                 .size([n, m])
10886               (values0)
10887                 .map(transform);
10888           }
10889
10890           function transform(geometry) {
10891             geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
10892             geometry.coordinates.forEach(transformPolygon);
10893             return geometry;
10894           }
10895
10896           function transformPolygon(coordinates) {
10897             coordinates.forEach(transformRing);
10898           }
10899
10900           function transformRing(coordinates) {
10901             coordinates.forEach(transformPoint);
10902           }
10903
10904           // TODO Optimize.
10905           function transformPoint(coordinates) {
10906             coordinates[0] = coordinates[0] * Math.pow(2, k) - o;
10907             coordinates[1] = coordinates[1] * Math.pow(2, k) - o;
10908           }
10909
10910           function resize() {
10911             o = r * 3;
10912             n = (dx + o * 2) >> k;
10913             m = (dy + o * 2) >> k;
10914             return density;
10915           }
10916
10917           density.x = function(_) {
10918             return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), density) : x;
10919           };
10920
10921           density.y = function(_) {
10922             return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), density) : y;
10923           };
10924
10925           density.weight = function(_) {
10926             return arguments.length ? (weight = typeof _ === "function" ? _ : constant$6(+_), density) : weight;
10927           };
10928
10929           density.size = function(_) {
10930             if (!arguments.length) return [dx, dy];
10931             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
10932             if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size");
10933             return dx = _0, dy = _1, resize();
10934           };
10935
10936           density.cellSize = function(_) {
10937             if (!arguments.length) return 1 << k;
10938             if (!((_ = +_) >= 1)) throw new Error("invalid cell size");
10939             return k = Math.floor(Math.log(_) / Math.LN2), resize();
10940           };
10941
10942           density.thresholds = function(_) {
10943             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), density) : threshold;
10944           };
10945
10946           density.bandwidth = function(_) {
10947             if (!arguments.length) return Math.sqrt(r * (r + 1));
10948             if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth");
10949             return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();
10950           };
10951
10952           return density;
10953         }
10954
10955         var EOL = {},
10956             EOF = {},
10957             QUOTE = 34,
10958             NEWLINE = 10,
10959             RETURN = 13;
10960
10961         function objectConverter(columns) {
10962           return new Function("d", "return {" + columns.map(function(name, i) {
10963             return JSON.stringify(name) + ": d[" + i + "]";
10964           }).join(",") + "}");
10965         }
10966
10967         function customConverter(columns, f) {
10968           var object = objectConverter(columns);
10969           return function(row, i) {
10970             return f(object(row), i, columns);
10971           };
10972         }
10973
10974         // Compute unique columns in order of discovery.
10975         function inferColumns(rows) {
10976           var columnSet = Object.create(null),
10977               columns = [];
10978
10979           rows.forEach(function(row) {
10980             for (var column in row) {
10981               if (!(column in columnSet)) {
10982                 columns.push(columnSet[column] = column);
10983               }
10984             }
10985           });
10986
10987           return columns;
10988         }
10989
10990         function pad(value, width) {
10991           var s = value + "", length = s.length;
10992           return length < width ? new Array(width - length + 1).join(0) + s : s;
10993         }
10994
10995         function formatYear(year) {
10996           return year < 0 ? "-" + pad(-year, 6)
10997             : year > 9999 ? "+" + pad(year, 6)
10998             : pad(year, 4);
10999         }
11000
11001         function formatDate(date) {
11002           var hours = date.getUTCHours(),
11003               minutes = date.getUTCMinutes(),
11004               seconds = date.getUTCSeconds(),
11005               milliseconds = date.getUTCMilliseconds();
11006           return isNaN(date) ? "Invalid Date"
11007               : formatYear(date.getUTCFullYear()) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2)
11008               + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z"
11009               : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z"
11010               : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z"
11011               : "");
11012         }
11013
11014         function dsvFormat(delimiter) {
11015           var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
11016               DELIMITER = delimiter.charCodeAt(0);
11017
11018           function parse(text, f) {
11019             var convert, columns, rows = parseRows(text, function(row, i) {
11020               if (convert) return convert(row, i - 1);
11021               columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
11022             });
11023             rows.columns = columns || [];
11024             return rows;
11025           }
11026
11027           function parseRows(text, f) {
11028             var rows = [], // output rows
11029                 N = text.length,
11030                 I = 0, // current character index
11031                 n = 0, // current line number
11032                 t, // current token
11033                 eof = N <= 0, // current token followed by EOF?
11034                 eol = false; // current token followed by EOL?
11035
11036             // Strip the trailing newline.
11037             if (text.charCodeAt(N - 1) === NEWLINE) --N;
11038             if (text.charCodeAt(N - 1) === RETURN) --N;
11039
11040             function token() {
11041               if (eof) return EOF;
11042               if (eol) return eol = false, EOL;
11043
11044               // Unescape quotes.
11045               var i, j = I, c;
11046               if (text.charCodeAt(j) === QUOTE) {
11047                 while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);
11048                 if ((i = I) >= N) eof = true;
11049                 else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;
11050                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }
11051                 return text.slice(j + 1, i - 1).replace(/""/g, "\"");
11052               }
11053
11054               // Find next delimiter or newline.
11055               while (I < N) {
11056                 if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;
11057                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }
11058                 else if (c !== DELIMITER) continue;
11059                 return text.slice(j, i);
11060               }
11061
11062               // Return last token before EOF.
11063               return eof = true, text.slice(j, N);
11064             }
11065
11066             while ((t = token()) !== EOF) {
11067               var row = [];
11068               while (t !== EOL && t !== EOF) row.push(t), t = token();
11069               if (f && (row = f(row, n++)) == null) continue;
11070               rows.push(row);
11071             }
11072
11073             return rows;
11074           }
11075
11076           function preformatBody(rows, columns) {
11077             return rows.map(function(row) {
11078               return columns.map(function(column) {
11079                 return formatValue(row[column]);
11080               }).join(delimiter);
11081             });
11082           }
11083
11084           function format(rows, columns) {
11085             if (columns == null) columns = inferColumns(rows);
11086             return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n");
11087           }
11088
11089           function formatBody(rows, columns) {
11090             if (columns == null) columns = inferColumns(rows);
11091             return preformatBody(rows, columns).join("\n");
11092           }
11093
11094           function formatRows(rows) {
11095             return rows.map(formatRow).join("\n");
11096           }
11097
11098           function formatRow(row) {
11099             return row.map(formatValue).join(delimiter);
11100           }
11101
11102           function formatValue(value) {
11103             return value == null ? ""
11104                 : value instanceof Date ? formatDate(value)
11105                 : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\""
11106                 : value;
11107           }
11108
11109           return {
11110             parse: parse,
11111             parseRows: parseRows,
11112             format: format,
11113             formatBody: formatBody,
11114             formatRows: formatRows
11115           };
11116         }
11117
11118         var csv = dsvFormat(",");
11119
11120         var csvParse = csv.parse;
11121         var csvParseRows = csv.parseRows;
11122         var csvFormat = csv.format;
11123         var csvFormatBody = csv.formatBody;
11124         var csvFormatRows = csv.formatRows;
11125
11126         var tsv = dsvFormat("\t");
11127
11128         var tsvParse = tsv.parse;
11129         var tsvParseRows = tsv.parseRows;
11130         var tsvFormat = tsv.format;
11131         var tsvFormatBody = tsv.formatBody;
11132         var tsvFormatRows = tsv.formatRows;
11133
11134         function autoType(object) {
11135           for (var key in object) {
11136             var value = object[key].trim(), number;
11137             if (!value) value = null;
11138             else if (value === "true") value = true;
11139             else if (value === "false") value = false;
11140             else if (value === "NaN") value = NaN;
11141             else if (!isNaN(number = +value)) value = number;
11142             else if (/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/.test(value)) value = new Date(value);
11143             else continue;
11144             object[key] = value;
11145           }
11146           return object;
11147         }
11148
11149         function responseBlob(response) {
11150           if (!response.ok) throw new Error(response.status + " " + response.statusText);
11151           return response.blob();
11152         }
11153
11154         function blob(input, init) {
11155           return fetch(input, init).then(responseBlob);
11156         }
11157
11158         function responseArrayBuffer(response) {
11159           if (!response.ok) throw new Error(response.status + " " + response.statusText);
11160           return response.arrayBuffer();
11161         }
11162
11163         function buffer(input, init) {
11164           return fetch(input, init).then(responseArrayBuffer);
11165         }
11166
11167         function responseText(response) {
11168           if (!response.ok) throw new Error(response.status + " " + response.statusText);
11169           return response.text();
11170         }
11171
11172         function d3_text(input, init) {
11173           return fetch(input, init).then(responseText);
11174         }
11175
11176         function dsvParse(parse) {
11177           return function(input, init, row) {
11178             if (arguments.length === 2 && typeof init === "function") row = init, init = undefined;
11179             return d3_text(input, init).then(function(response) {
11180               return parse(response, row);
11181             });
11182           };
11183         }
11184
11185         function dsv(delimiter, input, init, row) {
11186           if (arguments.length === 3 && typeof init === "function") row = init, init = undefined;
11187           var format = dsvFormat(delimiter);
11188           return d3_text(input, init).then(function(response) {
11189             return format.parse(response, row);
11190           });
11191         }
11192
11193         var csv$1 = dsvParse(csvParse);
11194         var tsv$1 = dsvParse(tsvParse);
11195
11196         function image(input, init) {
11197           return new Promise(function(resolve, reject) {
11198             var image = new Image;
11199             for (var key in init) image[key] = init[key];
11200             image.onerror = reject;
11201             image.onload = function() { resolve(image); };
11202             image.src = input;
11203           });
11204         }
11205
11206         function responseJson(response) {
11207           if (!response.ok) throw new Error(response.status + " " + response.statusText);
11208           return response.json();
11209         }
11210
11211         function d3_json(input, init) {
11212           return fetch(input, init).then(responseJson);
11213         }
11214
11215         function parser(type) {
11216           return function(input, init)  {
11217             return d3_text(input, init).then(function(text) {
11218               return (new DOMParser).parseFromString(text, type);
11219             });
11220           };
11221         }
11222
11223         var d3_xml = parser("application/xml");
11224
11225         var html = parser("text/html");
11226
11227         var svg = parser("image/svg+xml");
11228
11229         function center$1(x, y) {
11230           var nodes;
11231
11232           if (x == null) x = 0;
11233           if (y == null) y = 0;
11234
11235           function force() {
11236             var i,
11237                 n = nodes.length,
11238                 node,
11239                 sx = 0,
11240                 sy = 0;
11241
11242             for (i = 0; i < n; ++i) {
11243               node = nodes[i], sx += node.x, sy += node.y;
11244             }
11245
11246             for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
11247               node = nodes[i], node.x -= sx, node.y -= sy;
11248             }
11249           }
11250
11251           force.initialize = function(_) {
11252             nodes = _;
11253           };
11254
11255           force.x = function(_) {
11256             return arguments.length ? (x = +_, force) : x;
11257           };
11258
11259           force.y = function(_) {
11260             return arguments.length ? (y = +_, force) : y;
11261           };
11262
11263           return force;
11264         }
11265
11266         function constant$7(x) {
11267           return function() {
11268             return x;
11269           };
11270         }
11271
11272         function jiggle() {
11273           return (Math.random() - 0.5) * 1e-6;
11274         }
11275
11276         function tree_add(d) {
11277           var x = +this._x.call(null, d),
11278               y = +this._y.call(null, d);
11279           return add(this.cover(x, y), x, y, d);
11280         }
11281
11282         function add(tree, x, y, d) {
11283           if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
11284
11285           var parent,
11286               node = tree._root,
11287               leaf = {data: d},
11288               x0 = tree._x0,
11289               y0 = tree._y0,
11290               x1 = tree._x1,
11291               y1 = tree._y1,
11292               xm,
11293               ym,
11294               xp,
11295               yp,
11296               right,
11297               bottom,
11298               i,
11299               j;
11300
11301           // If the tree is empty, initialize the root as a leaf.
11302           if (!node) return tree._root = leaf, tree;
11303
11304           // Find the existing leaf for the new point, or add it.
11305           while (node.length) {
11306             if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
11307             if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
11308             if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
11309           }
11310
11311           // Is the new point is exactly coincident with the existing point?
11312           xp = +tree._x.call(null, node.data);
11313           yp = +tree._y.call(null, node.data);
11314           if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
11315
11316           // Otherwise, split the leaf node until the old and new point are separated.
11317           do {
11318             parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
11319             if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
11320             if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
11321           } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
11322           return parent[j] = node, parent[i] = leaf, tree;
11323         }
11324
11325         function addAll(data) {
11326           var d, i, n = data.length,
11327               x,
11328               y,
11329               xz = new Array(n),
11330               yz = new Array(n),
11331               x0 = Infinity,
11332               y0 = Infinity,
11333               x1 = -Infinity,
11334               y1 = -Infinity;
11335
11336           // Compute the points and their extent.
11337           for (i = 0; i < n; ++i) {
11338             if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
11339             xz[i] = x;
11340             yz[i] = y;
11341             if (x < x0) x0 = x;
11342             if (x > x1) x1 = x;
11343             if (y < y0) y0 = y;
11344             if (y > y1) y1 = y;
11345           }
11346
11347           // If there were no (valid) points, abort.
11348           if (x0 > x1 || y0 > y1) return this;
11349
11350           // Expand the tree to cover the new points.
11351           this.cover(x0, y0).cover(x1, y1);
11352
11353           // Add the new points.
11354           for (i = 0; i < n; ++i) {
11355             add(this, xz[i], yz[i], data[i]);
11356           }
11357
11358           return this;
11359         }
11360
11361         function tree_cover(x, y) {
11362           if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
11363
11364           var x0 = this._x0,
11365               y0 = this._y0,
11366               x1 = this._x1,
11367               y1 = this._y1;
11368
11369           // If the quadtree has no extent, initialize them.
11370           // Integer extent are necessary so that if we later double the extent,
11371           // the existing quadrant boundaries don’t change due to floating point error!
11372           if (isNaN(x0)) {
11373             x1 = (x0 = Math.floor(x)) + 1;
11374             y1 = (y0 = Math.floor(y)) + 1;
11375           }
11376
11377           // Otherwise, double repeatedly to cover.
11378           else {
11379             var z = x1 - x0,
11380                 node = this._root,
11381                 parent,
11382                 i;
11383
11384             while (x0 > x || x >= x1 || y0 > y || y >= y1) {
11385               i = (y < y0) << 1 | (x < x0);
11386               parent = new Array(4), parent[i] = node, node = parent, z *= 2;
11387               switch (i) {
11388                 case 0: x1 = x0 + z, y1 = y0 + z; break;
11389                 case 1: x0 = x1 - z, y1 = y0 + z; break;
11390                 case 2: x1 = x0 + z, y0 = y1 - z; break;
11391                 case 3: x0 = x1 - z, y0 = y1 - z; break;
11392               }
11393             }
11394
11395             if (this._root && this._root.length) this._root = node;
11396           }
11397
11398           this._x0 = x0;
11399           this._y0 = y0;
11400           this._x1 = x1;
11401           this._y1 = y1;
11402           return this;
11403         }
11404
11405         function tree_data() {
11406           var data = [];
11407           this.visit(function(node) {
11408             if (!node.length) do data.push(node.data); while (node = node.next)
11409           });
11410           return data;
11411         }
11412
11413         function tree_extent(_) {
11414           return arguments.length
11415               ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
11416               : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
11417         }
11418
11419         function Quad(node, x0, y0, x1, y1) {
11420           this.node = node;
11421           this.x0 = x0;
11422           this.y0 = y0;
11423           this.x1 = x1;
11424           this.y1 = y1;
11425         }
11426
11427         function tree_find(x, y, radius) {
11428           var data,
11429               x0 = this._x0,
11430               y0 = this._y0,
11431               x1,
11432               y1,
11433               x2,
11434               y2,
11435               x3 = this._x1,
11436               y3 = this._y1,
11437               quads = [],
11438               node = this._root,
11439               q,
11440               i;
11441
11442           if (node) quads.push(new Quad(node, x0, y0, x3, y3));
11443           if (radius == null) radius = Infinity;
11444           else {
11445             x0 = x - radius, y0 = y - radius;
11446             x3 = x + radius, y3 = y + radius;
11447             radius *= radius;
11448           }
11449
11450           while (q = quads.pop()) {
11451
11452             // Stop searching if this quadrant can’t contain a closer node.
11453             if (!(node = q.node)
11454                 || (x1 = q.x0) > x3
11455                 || (y1 = q.y0) > y3
11456                 || (x2 = q.x1) < x0
11457                 || (y2 = q.y1) < y0) continue;
11458
11459             // Bisect the current quadrant.
11460             if (node.length) {
11461               var xm = (x1 + x2) / 2,
11462                   ym = (y1 + y2) / 2;
11463
11464               quads.push(
11465                 new Quad(node[3], xm, ym, x2, y2),
11466                 new Quad(node[2], x1, ym, xm, y2),
11467                 new Quad(node[1], xm, y1, x2, ym),
11468                 new Quad(node[0], x1, y1, xm, ym)
11469               );
11470
11471               // Visit the closest quadrant first.
11472               if (i = (y >= ym) << 1 | (x >= xm)) {
11473                 q = quads[quads.length - 1];
11474                 quads[quads.length - 1] = quads[quads.length - 1 - i];
11475                 quads[quads.length - 1 - i] = q;
11476               }
11477             }
11478
11479             // Visit this point. (Visiting coincident points isn’t necessary!)
11480             else {
11481               var dx = x - +this._x.call(null, node.data),
11482                   dy = y - +this._y.call(null, node.data),
11483                   d2 = dx * dx + dy * dy;
11484               if (d2 < radius) {
11485                 var d = Math.sqrt(radius = d2);
11486                 x0 = x - d, y0 = y - d;
11487                 x3 = x + d, y3 = y + d;
11488                 data = node.data;
11489               }
11490             }
11491           }
11492
11493           return data;
11494         }
11495
11496         function tree_remove(d) {
11497           if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
11498
11499           var parent,
11500               node = this._root,
11501               retainer,
11502               previous,
11503               next,
11504               x0 = this._x0,
11505               y0 = this._y0,
11506               x1 = this._x1,
11507               y1 = this._y1,
11508               x,
11509               y,
11510               xm,
11511               ym,
11512               right,
11513               bottom,
11514               i,
11515               j;
11516
11517           // If the tree is empty, initialize the root as a leaf.
11518           if (!node) return this;
11519
11520           // Find the leaf node for the point.
11521           // While descending, also retain the deepest parent with a non-removed sibling.
11522           if (node.length) while (true) {
11523             if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
11524             if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
11525             if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
11526             if (!node.length) break;
11527             if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
11528           }
11529
11530           // Find the point to remove.
11531           while (node.data !== d) if (!(previous = node, node = node.next)) return this;
11532           if (next = node.next) delete node.next;
11533
11534           // If there are multiple coincident points, remove just the point.
11535           if (previous) return (next ? previous.next = next : delete previous.next), this;
11536
11537           // If this is the root point, remove it.
11538           if (!parent) return this._root = next, this;
11539
11540           // Remove this leaf.
11541           next ? parent[i] = next : delete parent[i];
11542
11543           // If the parent now contains exactly one leaf, collapse superfluous parents.
11544           if ((node = parent[0] || parent[1] || parent[2] || parent[3])
11545               && node === (parent[3] || parent[2] || parent[1] || parent[0])
11546               && !node.length) {
11547             if (retainer) retainer[j] = node;
11548             else this._root = node;
11549           }
11550
11551           return this;
11552         }
11553
11554         function removeAll(data) {
11555           for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
11556           return this;
11557         }
11558
11559         function tree_root() {
11560           return this._root;
11561         }
11562
11563         function tree_size() {
11564           var size = 0;
11565           this.visit(function(node) {
11566             if (!node.length) do ++size; while (node = node.next)
11567           });
11568           return size;
11569         }
11570
11571         function tree_visit(callback) {
11572           var quads = [], q, node = this._root, child, x0, y0, x1, y1;
11573           if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
11574           while (q = quads.pop()) {
11575             if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
11576               var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
11577               if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
11578               if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
11579               if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
11580               if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
11581             }
11582           }
11583           return this;
11584         }
11585
11586         function tree_visitAfter(callback) {
11587           var quads = [], next = [], q;
11588           if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
11589           while (q = quads.pop()) {
11590             var node = q.node;
11591             if (node.length) {
11592               var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
11593               if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
11594               if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
11595               if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
11596               if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
11597             }
11598             next.push(q);
11599           }
11600           while (q = next.pop()) {
11601             callback(q.node, q.x0, q.y0, q.x1, q.y1);
11602           }
11603           return this;
11604         }
11605
11606         function defaultX$1(d) {
11607           return d[0];
11608         }
11609
11610         function tree_x(_) {
11611           return arguments.length ? (this._x = _, this) : this._x;
11612         }
11613
11614         function defaultY$1(d) {
11615           return d[1];
11616         }
11617
11618         function tree_y(_) {
11619           return arguments.length ? (this._y = _, this) : this._y;
11620         }
11621
11622         function quadtree(nodes, x, y) {
11623           var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);
11624           return nodes == null ? tree : tree.addAll(nodes);
11625         }
11626
11627         function Quadtree(x, y, x0, y0, x1, y1) {
11628           this._x = x;
11629           this._y = y;
11630           this._x0 = x0;
11631           this._y0 = y0;
11632           this._x1 = x1;
11633           this._y1 = y1;
11634           this._root = undefined;
11635         }
11636
11637         function leaf_copy(leaf) {
11638           var copy = {data: leaf.data}, next = copy;
11639           while (leaf = leaf.next) next = next.next = {data: leaf.data};
11640           return copy;
11641         }
11642
11643         var treeProto = quadtree.prototype = Quadtree.prototype;
11644
11645         treeProto.copy = function() {
11646           var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
11647               node = this._root,
11648               nodes,
11649               child;
11650
11651           if (!node) return copy;
11652
11653           if (!node.length) return copy._root = leaf_copy(node), copy;
11654
11655           nodes = [{source: node, target: copy._root = new Array(4)}];
11656           while (node = nodes.pop()) {
11657             for (var i = 0; i < 4; ++i) {
11658               if (child = node.source[i]) {
11659                 if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
11660                 else node.target[i] = leaf_copy(child);
11661               }
11662             }
11663           }
11664
11665           return copy;
11666         };
11667
11668         treeProto.add = tree_add;
11669         treeProto.addAll = addAll;
11670         treeProto.cover = tree_cover;
11671         treeProto.data = tree_data;
11672         treeProto.extent = tree_extent;
11673         treeProto.find = tree_find;
11674         treeProto.remove = tree_remove;
11675         treeProto.removeAll = removeAll;
11676         treeProto.root = tree_root;
11677         treeProto.size = tree_size;
11678         treeProto.visit = tree_visit;
11679         treeProto.visitAfter = tree_visitAfter;
11680         treeProto.x = tree_x;
11681         treeProto.y = tree_y;
11682
11683         function x(d) {
11684           return d.x + d.vx;
11685         }
11686
11687         function y(d) {
11688           return d.y + d.vy;
11689         }
11690
11691         function collide(radius) {
11692           var nodes,
11693               radii,
11694               strength = 1,
11695               iterations = 1;
11696
11697           if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius);
11698
11699           function force() {
11700             var i, n = nodes.length,
11701                 tree,
11702                 node,
11703                 xi,
11704                 yi,
11705                 ri,
11706                 ri2;
11707
11708             for (var k = 0; k < iterations; ++k) {
11709               tree = quadtree(nodes, x, y).visitAfter(prepare);
11710               for (i = 0; i < n; ++i) {
11711                 node = nodes[i];
11712                 ri = radii[node.index], ri2 = ri * ri;
11713                 xi = node.x + node.vx;
11714                 yi = node.y + node.vy;
11715                 tree.visit(apply);
11716               }
11717             }
11718
11719             function apply(quad, x0, y0, x1, y1) {
11720               var data = quad.data, rj = quad.r, r = ri + rj;
11721               if (data) {
11722                 if (data.index > node.index) {
11723                   var x = xi - data.x - data.vx,
11724                       y = yi - data.y - data.vy,
11725                       l = x * x + y * y;
11726                   if (l < r * r) {
11727                     if (x === 0) x = jiggle(), l += x * x;
11728                     if (y === 0) y = jiggle(), l += y * y;
11729                     l = (r - (l = Math.sqrt(l))) / l * strength;
11730                     node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
11731                     node.vy += (y *= l) * r;
11732                     data.vx -= x * (r = 1 - r);
11733                     data.vy -= y * r;
11734                   }
11735                 }
11736                 return;
11737               }
11738               return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
11739             }
11740           }
11741
11742           function prepare(quad) {
11743             if (quad.data) return quad.r = radii[quad.data.index];
11744             for (var i = quad.r = 0; i < 4; ++i) {
11745               if (quad[i] && quad[i].r > quad.r) {
11746                 quad.r = quad[i].r;
11747               }
11748             }
11749           }
11750
11751           function initialize() {
11752             if (!nodes) return;
11753             var i, n = nodes.length, node;
11754             radii = new Array(n);
11755             for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);
11756           }
11757
11758           force.initialize = function(_) {
11759             nodes = _;
11760             initialize();
11761           };
11762
11763           force.iterations = function(_) {
11764             return arguments.length ? (iterations = +_, force) : iterations;
11765           };
11766
11767           force.strength = function(_) {
11768             return arguments.length ? (strength = +_, force) : strength;
11769           };
11770
11771           force.radius = function(_) {
11772             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
11773           };
11774
11775           return force;
11776         }
11777
11778         function index(d) {
11779           return d.index;
11780         }
11781
11782         function find(nodeById, nodeId) {
11783           var node = nodeById.get(nodeId);
11784           if (!node) throw new Error("missing: " + nodeId);
11785           return node;
11786         }
11787
11788         function link(links) {
11789           var id = index,
11790               strength = defaultStrength,
11791               strengths,
11792               distance = constant$7(30),
11793               distances,
11794               nodes,
11795               count,
11796               bias,
11797               iterations = 1;
11798
11799           if (links == null) links = [];
11800
11801           function defaultStrength(link) {
11802             return 1 / Math.min(count[link.source.index], count[link.target.index]);
11803           }
11804
11805           function force(alpha) {
11806             for (var k = 0, n = links.length; k < iterations; ++k) {
11807               for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
11808                 link = links[i], source = link.source, target = link.target;
11809                 x = target.x + target.vx - source.x - source.vx || jiggle();
11810                 y = target.y + target.vy - source.y - source.vy || jiggle();
11811                 l = Math.sqrt(x * x + y * y);
11812                 l = (l - distances[i]) / l * alpha * strengths[i];
11813                 x *= l, y *= l;
11814                 target.vx -= x * (b = bias[i]);
11815                 target.vy -= y * b;
11816                 source.vx += x * (b = 1 - b);
11817                 source.vy += y * b;
11818               }
11819             }
11820           }
11821
11822           function initialize() {
11823             if (!nodes) return;
11824
11825             var i,
11826                 n = nodes.length,
11827                 m = links.length,
11828                 nodeById = map$3(nodes, id),
11829                 link;
11830
11831             for (i = 0, count = new Array(n); i < m; ++i) {
11832               link = links[i], link.index = i;
11833               if (typeof link.source !== "object") link.source = find(nodeById, link.source);
11834               if (typeof link.target !== "object") link.target = find(nodeById, link.target);
11835               count[link.source.index] = (count[link.source.index] || 0) + 1;
11836               count[link.target.index] = (count[link.target.index] || 0) + 1;
11837             }
11838
11839             for (i = 0, bias = new Array(m); i < m; ++i) {
11840               link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
11841             }
11842
11843             strengths = new Array(m), initializeStrength();
11844             distances = new Array(m), initializeDistance();
11845           }
11846
11847           function initializeStrength() {
11848             if (!nodes) return;
11849
11850             for (var i = 0, n = links.length; i < n; ++i) {
11851               strengths[i] = +strength(links[i], i, links);
11852             }
11853           }
11854
11855           function initializeDistance() {
11856             if (!nodes) return;
11857
11858             for (var i = 0, n = links.length; i < n; ++i) {
11859               distances[i] = +distance(links[i], i, links);
11860             }
11861           }
11862
11863           force.initialize = function(_) {
11864             nodes = _;
11865             initialize();
11866           };
11867
11868           force.links = function(_) {
11869             return arguments.length ? (links = _, initialize(), force) : links;
11870           };
11871
11872           force.id = function(_) {
11873             return arguments.length ? (id = _, force) : id;
11874           };
11875
11876           force.iterations = function(_) {
11877             return arguments.length ? (iterations = +_, force) : iterations;
11878           };
11879
11880           force.strength = function(_) {
11881             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
11882           };
11883
11884           force.distance = function(_) {
11885             return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
11886           };
11887
11888           return force;
11889         }
11890
11891         function x$1(d) {
11892           return d.x;
11893         }
11894
11895         function y$1(d) {
11896           return d.y;
11897         }
11898
11899         var initialRadius = 10,
11900             initialAngle = Math.PI * (3 - Math.sqrt(5));
11901
11902         function simulation(nodes) {
11903           var simulation,
11904               alpha = 1,
11905               alphaMin = 0.001,
11906               alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
11907               alphaTarget = 0,
11908               velocityDecay = 0.6,
11909               forces = map$3(),
11910               stepper = timer(step),
11911               event = dispatch("tick", "end");
11912
11913           if (nodes == null) nodes = [];
11914
11915           function step() {
11916             tick();
11917             event.call("tick", simulation);
11918             if (alpha < alphaMin) {
11919               stepper.stop();
11920               event.call("end", simulation);
11921             }
11922           }
11923
11924           function tick(iterations) {
11925             var i, n = nodes.length, node;
11926
11927             if (iterations === undefined) iterations = 1;
11928
11929             for (var k = 0; k < iterations; ++k) {
11930               alpha += (alphaTarget - alpha) * alphaDecay;
11931
11932               forces.each(function (force) {
11933                 force(alpha);
11934               });
11935
11936               for (i = 0; i < n; ++i) {
11937                 node = nodes[i];
11938                 if (node.fx == null) node.x += node.vx *= velocityDecay;
11939                 else node.x = node.fx, node.vx = 0;
11940                 if (node.fy == null) node.y += node.vy *= velocityDecay;
11941                 else node.y = node.fy, node.vy = 0;
11942               }
11943             }
11944
11945             return simulation;
11946           }
11947
11948           function initializeNodes() {
11949             for (var i = 0, n = nodes.length, node; i < n; ++i) {
11950               node = nodes[i], node.index = i;
11951               if (node.fx != null) node.x = node.fx;
11952               if (node.fy != null) node.y = node.fy;
11953               if (isNaN(node.x) || isNaN(node.y)) {
11954                 var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
11955                 node.x = radius * Math.cos(angle);
11956                 node.y = radius * Math.sin(angle);
11957               }
11958               if (isNaN(node.vx) || isNaN(node.vy)) {
11959                 node.vx = node.vy = 0;
11960               }
11961             }
11962           }
11963
11964           function initializeForce(force) {
11965             if (force.initialize) force.initialize(nodes);
11966             return force;
11967           }
11968
11969           initializeNodes();
11970
11971           return simulation = {
11972             tick: tick,
11973
11974             restart: function() {
11975               return stepper.restart(step), simulation;
11976             },
11977
11978             stop: function() {
11979               return stepper.stop(), simulation;
11980             },
11981
11982             nodes: function(_) {
11983               return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
11984             },
11985
11986             alpha: function(_) {
11987               return arguments.length ? (alpha = +_, simulation) : alpha;
11988             },
11989
11990             alphaMin: function(_) {
11991               return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
11992             },
11993
11994             alphaDecay: function(_) {
11995               return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
11996             },
11997
11998             alphaTarget: function(_) {
11999               return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
12000             },
12001
12002             velocityDecay: function(_) {
12003               return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
12004             },
12005
12006             force: function(name, _) {
12007               return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
12008             },
12009
12010             find: function(x, y, radius) {
12011               var i = 0,
12012                   n = nodes.length,
12013                   dx,
12014                   dy,
12015                   d2,
12016                   node,
12017                   closest;
12018
12019               if (radius == null) radius = Infinity;
12020               else radius *= radius;
12021
12022               for (i = 0; i < n; ++i) {
12023                 node = nodes[i];
12024                 dx = x - node.x;
12025                 dy = y - node.y;
12026                 d2 = dx * dx + dy * dy;
12027                 if (d2 < radius) closest = node, radius = d2;
12028               }
12029
12030               return closest;
12031             },
12032
12033             on: function(name, _) {
12034               return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
12035             }
12036           };
12037         }
12038
12039         function manyBody() {
12040           var nodes,
12041               node,
12042               alpha,
12043               strength = constant$7(-30),
12044               strengths,
12045               distanceMin2 = 1,
12046               distanceMax2 = Infinity,
12047               theta2 = 0.81;
12048
12049           function force(_) {
12050             var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);
12051             for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
12052           }
12053
12054           function initialize() {
12055             if (!nodes) return;
12056             var i, n = nodes.length, node;
12057             strengths = new Array(n);
12058             for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);
12059           }
12060
12061           function accumulate(quad) {
12062             var strength = 0, q, c, weight = 0, x, y, i;
12063
12064             // For internal nodes, accumulate forces from child quadrants.
12065             if (quad.length) {
12066               for (x = y = i = 0; i < 4; ++i) {
12067                 if ((q = quad[i]) && (c = Math.abs(q.value))) {
12068                   strength += q.value, weight += c, x += c * q.x, y += c * q.y;
12069                 }
12070               }
12071               quad.x = x / weight;
12072               quad.y = y / weight;
12073             }
12074
12075             // For leaf nodes, accumulate forces from coincident quadrants.
12076             else {
12077               q = quad;
12078               q.x = q.data.x;
12079               q.y = q.data.y;
12080               do strength += strengths[q.data.index];
12081               while (q = q.next);
12082             }
12083
12084             quad.value = strength;
12085           }
12086
12087           function apply(quad, x1, _, x2) {
12088             if (!quad.value) return true;
12089
12090             var x = quad.x - node.x,
12091                 y = quad.y - node.y,
12092                 w = x2 - x1,
12093                 l = x * x + y * y;
12094
12095             // Apply the Barnes-Hut approximation if possible.
12096             // Limit forces for very close nodes; randomize direction if coincident.
12097             if (w * w / theta2 < l) {
12098               if (l < distanceMax2) {
12099                 if (x === 0) x = jiggle(), l += x * x;
12100                 if (y === 0) y = jiggle(), l += y * y;
12101                 if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
12102                 node.vx += x * quad.value * alpha / l;
12103                 node.vy += y * quad.value * alpha / l;
12104               }
12105               return true;
12106             }
12107
12108             // Otherwise, process points directly.
12109             else if (quad.length || l >= distanceMax2) return;
12110
12111             // Limit forces for very close nodes; randomize direction if coincident.
12112             if (quad.data !== node || quad.next) {
12113               if (x === 0) x = jiggle(), l += x * x;
12114               if (y === 0) y = jiggle(), l += y * y;
12115               if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
12116             }
12117
12118             do if (quad.data !== node) {
12119               w = strengths[quad.data.index] * alpha / l;
12120               node.vx += x * w;
12121               node.vy += y * w;
12122             } while (quad = quad.next);
12123           }
12124
12125           force.initialize = function(_) {
12126             nodes = _;
12127             initialize();
12128           };
12129
12130           force.strength = function(_) {
12131             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12132           };
12133
12134           force.distanceMin = function(_) {
12135             return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
12136           };
12137
12138           force.distanceMax = function(_) {
12139             return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
12140           };
12141
12142           force.theta = function(_) {
12143             return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
12144           };
12145
12146           return force;
12147         }
12148
12149         function radial(radius, x, y) {
12150           var nodes,
12151               strength = constant$7(0.1),
12152               strengths,
12153               radiuses;
12154
12155           if (typeof radius !== "function") radius = constant$7(+radius);
12156           if (x == null) x = 0;
12157           if (y == null) y = 0;
12158
12159           function force(alpha) {
12160             for (var i = 0, n = nodes.length; i < n; ++i) {
12161               var node = nodes[i],
12162                   dx = node.x - x || 1e-6,
12163                   dy = node.y - y || 1e-6,
12164                   r = Math.sqrt(dx * dx + dy * dy),
12165                   k = (radiuses[i] - r) * strengths[i] * alpha / r;
12166               node.vx += dx * k;
12167               node.vy += dy * k;
12168             }
12169           }
12170
12171           function initialize() {
12172             if (!nodes) return;
12173             var i, n = nodes.length;
12174             strengths = new Array(n);
12175             radiuses = new Array(n);
12176             for (i = 0; i < n; ++i) {
12177               radiuses[i] = +radius(nodes[i], i, nodes);
12178               strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);
12179             }
12180           }
12181
12182           force.initialize = function(_) {
12183             nodes = _, initialize();
12184           };
12185
12186           force.strength = function(_) {
12187             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12188           };
12189
12190           force.radius = function(_) {
12191             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
12192           };
12193
12194           force.x = function(_) {
12195             return arguments.length ? (x = +_, force) : x;
12196           };
12197
12198           force.y = function(_) {
12199             return arguments.length ? (y = +_, force) : y;
12200           };
12201
12202           return force;
12203         }
12204
12205         function x$2(x) {
12206           var strength = constant$7(0.1),
12207               nodes,
12208               strengths,
12209               xz;
12210
12211           if (typeof x !== "function") x = constant$7(x == null ? 0 : +x);
12212
12213           function force(alpha) {
12214             for (var i = 0, n = nodes.length, node; i < n; ++i) {
12215               node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
12216             }
12217           }
12218
12219           function initialize() {
12220             if (!nodes) return;
12221             var i, n = nodes.length;
12222             strengths = new Array(n);
12223             xz = new Array(n);
12224             for (i = 0; i < n; ++i) {
12225               strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
12226             }
12227           }
12228
12229           force.initialize = function(_) {
12230             nodes = _;
12231             initialize();
12232           };
12233
12234           force.strength = function(_) {
12235             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12236           };
12237
12238           force.x = function(_) {
12239             return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
12240           };
12241
12242           return force;
12243         }
12244
12245         function y$2(y) {
12246           var strength = constant$7(0.1),
12247               nodes,
12248               strengths,
12249               yz;
12250
12251           if (typeof y !== "function") y = constant$7(y == null ? 0 : +y);
12252
12253           function force(alpha) {
12254             for (var i = 0, n = nodes.length, node; i < n; ++i) {
12255               node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
12256             }
12257           }
12258
12259           function initialize() {
12260             if (!nodes) return;
12261             var i, n = nodes.length;
12262             strengths = new Array(n);
12263             yz = new Array(n);
12264             for (i = 0; i < n; ++i) {
12265               strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
12266             }
12267           }
12268
12269           force.initialize = function(_) {
12270             nodes = _;
12271             initialize();
12272           };
12273
12274           force.strength = function(_) {
12275             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12276           };
12277
12278           force.y = function(_) {
12279             return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
12280           };
12281
12282           return force;
12283         }
12284
12285         // Computes the decimal coefficient and exponent of the specified number x with
12286         // significant digits p, where x is positive and p is in [1, 21] or undefined.
12287         // For example, formatDecimal(1.23) returns ["123", 0].
12288         function formatDecimal(x, p) {
12289           if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
12290           var i, coefficient = x.slice(0, i);
12291
12292           // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
12293           // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
12294           return [
12295             coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
12296             +x.slice(i + 1)
12297           ];
12298         }
12299
12300         function exponent$1(x) {
12301           return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
12302         }
12303
12304         function formatGroup(grouping, thousands) {
12305           return function(value, width) {
12306             var i = value.length,
12307                 t = [],
12308                 j = 0,
12309                 g = grouping[0],
12310                 length = 0;
12311
12312             while (i > 0 && g > 0) {
12313               if (length + g + 1 > width) g = Math.max(1, width - length);
12314               t.push(value.substring(i -= g, i + g));
12315               if ((length += g + 1) > width) break;
12316               g = grouping[j = (j + 1) % grouping.length];
12317             }
12318
12319             return t.reverse().join(thousands);
12320           };
12321         }
12322
12323         function formatNumerals(numerals) {
12324           return function(value) {
12325             return value.replace(/[0-9]/g, function(i) {
12326               return numerals[+i];
12327             });
12328           };
12329         }
12330
12331         // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
12332         var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
12333
12334         function formatSpecifier(specifier) {
12335           return new FormatSpecifier(specifier);
12336         }
12337
12338         formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
12339
12340         function FormatSpecifier(specifier) {
12341           if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
12342           var match;
12343           this.fill = match[1] || " ";
12344           this.align = match[2] || ">";
12345           this.sign = match[3] || "-";
12346           this.symbol = match[4] || "";
12347           this.zero = !!match[5];
12348           this.width = match[6] && +match[6];
12349           this.comma = !!match[7];
12350           this.precision = match[8] && +match[8].slice(1);
12351           this.trim = !!match[9];
12352           this.type = match[10] || "";
12353         }
12354
12355         FormatSpecifier.prototype.toString = function() {
12356           return this.fill
12357               + this.align
12358               + this.sign
12359               + this.symbol
12360               + (this.zero ? "0" : "")
12361               + (this.width == null ? "" : Math.max(1, this.width | 0))
12362               + (this.comma ? "," : "")
12363               + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
12364               + (this.trim ? "~" : "")
12365               + this.type;
12366         };
12367
12368         // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
12369         function formatTrim(s) {
12370           out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
12371             switch (s[i]) {
12372               case ".": i0 = i1 = i; break;
12373               case "0": if (i0 === 0) i0 = i; i1 = i; break;
12374               default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;
12375             }
12376           }
12377           return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
12378         }
12379
12380         var prefixExponent;
12381
12382         function formatPrefixAuto(x, p) {
12383           var d = formatDecimal(x, p);
12384           if (!d) return x + "";
12385           var coefficient = d[0],
12386               exponent = d[1],
12387               i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
12388               n = coefficient.length;
12389           return i === n ? coefficient
12390               : i > n ? coefficient + new Array(i - n + 1).join("0")
12391               : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
12392               : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
12393         }
12394
12395         function formatRounded(x, p) {
12396           var d = formatDecimal(x, p);
12397           if (!d) return x + "";
12398           var coefficient = d[0],
12399               exponent = d[1];
12400           return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
12401               : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
12402               : coefficient + new Array(exponent - coefficient.length + 2).join("0");
12403         }
12404
12405         var formatTypes = {
12406           "%": function(x, p) { return (x * 100).toFixed(p); },
12407           "b": function(x) { return Math.round(x).toString(2); },
12408           "c": function(x) { return x + ""; },
12409           "d": function(x) { return Math.round(x).toString(10); },
12410           "e": function(x, p) { return x.toExponential(p); },
12411           "f": function(x, p) { return x.toFixed(p); },
12412           "g": function(x, p) { return x.toPrecision(p); },
12413           "o": function(x) { return Math.round(x).toString(8); },
12414           "p": function(x, p) { return formatRounded(x * 100, p); },
12415           "r": formatRounded,
12416           "s": formatPrefixAuto,
12417           "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
12418           "x": function(x) { return Math.round(x).toString(16); }
12419         };
12420
12421         function identity$3(x) {
12422           return x;
12423         }
12424
12425         var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
12426
12427         function formatLocale(locale) {
12428           var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
12429               currency = locale.currency,
12430               decimal = locale.decimal,
12431               numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3,
12432               percent = locale.percent || "%";
12433
12434           function newFormat(specifier) {
12435             specifier = formatSpecifier(specifier);
12436
12437             var fill = specifier.fill,
12438                 align = specifier.align,
12439                 sign = specifier.sign,
12440                 symbol = specifier.symbol,
12441                 zero = specifier.zero,
12442                 width = specifier.width,
12443                 comma = specifier.comma,
12444                 precision = specifier.precision,
12445                 trim = specifier.trim,
12446                 type = specifier.type;
12447
12448             // The "n" type is an alias for ",g".
12449             if (type === "n") comma = true, type = "g";
12450
12451             // The "" type, and any invalid type, is an alias for ".12~g".
12452             else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = "g";
12453
12454             // If zero fill is specified, padding goes after sign and before digits.
12455             if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
12456
12457             // Compute the prefix and suffix.
12458             // For SI-prefix, the suffix is lazily computed.
12459             var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
12460                 suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : "";
12461
12462             // What format function should we use?
12463             // Is this an integer type?
12464             // Can this type generate exponential notation?
12465             var formatType = formatTypes[type],
12466                 maybeSuffix = /[defgprs%]/.test(type);
12467
12468             // Set the default precision if not specified,
12469             // or clamp the specified precision to the supported range.
12470             // For significant precision, it must be in [1, 21].
12471             // For fixed precision, it must be in [0, 20].
12472             precision = precision == null ? 6
12473                 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
12474                 : Math.max(0, Math.min(20, precision));
12475
12476             function format(value) {
12477               var valuePrefix = prefix,
12478                   valueSuffix = suffix,
12479                   i, n, c;
12480
12481               if (type === "c") {
12482                 valueSuffix = formatType(value) + valueSuffix;
12483                 value = "";
12484               } else {
12485                 value = +value;
12486
12487                 // Perform the initial formatting.
12488                 var valueNegative = value < 0;
12489                 value = formatType(Math.abs(value), precision);
12490
12491                 // Trim insignificant zeros.
12492                 if (trim) value = formatTrim(value);
12493
12494                 // If a negative value rounds to zero during formatting, treat as positive.
12495                 if (valueNegative && +value === 0) valueNegative = false;
12496
12497                 // Compute the prefix and suffix.
12498                 valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
12499                 valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
12500
12501                 // Break the formatted value into the integer “value” part that can be
12502                 // grouped, and fractional or exponential “suffix” part that is not.
12503                 if (maybeSuffix) {
12504                   i = -1, n = value.length;
12505                   while (++i < n) {
12506                     if (c = value.charCodeAt(i), 48 > c || c > 57) {
12507                       valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
12508                       value = value.slice(0, i);
12509                       break;
12510                     }
12511                   }
12512                 }
12513               }
12514
12515               // If the fill character is not "0", grouping is applied before padding.
12516               if (comma && !zero) value = group(value, Infinity);
12517
12518               // Compute the padding.
12519               var length = valuePrefix.length + value.length + valueSuffix.length,
12520                   padding = length < width ? new Array(width - length + 1).join(fill) : "";
12521
12522               // If the fill character is "0", grouping is applied after padding.
12523               if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
12524
12525               // Reconstruct the final output based on the desired alignment.
12526               switch (align) {
12527                 case "<": value = valuePrefix + value + valueSuffix + padding; break;
12528                 case "=": value = valuePrefix + padding + value + valueSuffix; break;
12529                 case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
12530                 default: value = padding + valuePrefix + value + valueSuffix; break;
12531               }
12532
12533               return numerals(value);
12534             }
12535
12536             format.toString = function() {
12537               return specifier + "";
12538             };
12539
12540             return format;
12541           }
12542
12543           function formatPrefix(specifier, value) {
12544             var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
12545                 e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
12546                 k = Math.pow(10, -e),
12547                 prefix = prefixes[8 + e / 3];
12548             return function(value) {
12549               return f(k * value) + prefix;
12550             };
12551           }
12552
12553           return {
12554             format: newFormat,
12555             formatPrefix: formatPrefix
12556           };
12557         }
12558
12559         var locale;
12560         var format;
12561         var formatPrefix;
12562
12563         defaultLocale({
12564           decimal: ".",
12565           thousands: ",",
12566           grouping: [3],
12567           currency: ["$", ""]
12568         });
12569
12570         function defaultLocale(definition) {
12571           locale = formatLocale(definition);
12572           format = locale.format;
12573           formatPrefix = locale.formatPrefix;
12574           return locale;
12575         }
12576
12577         function precisionFixed(step) {
12578           return Math.max(0, -exponent$1(Math.abs(step)));
12579         }
12580
12581         function precisionPrefix(step, value) {
12582           return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
12583         }
12584
12585         function precisionRound(step, max) {
12586           step = Math.abs(step), max = Math.abs(max) - step;
12587           return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
12588         }
12589
12590         // Adds floating point numbers with twice the normal precision.
12591         // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
12592         // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
12593         // 305–363 (1997).
12594         // Code adapted from GeographicLib by Charles F. F. Karney,
12595         // http://geographiclib.sourceforge.net/
12596
12597         function adder() {
12598           return new Adder;
12599         }
12600
12601         function Adder() {
12602           this.reset();
12603         }
12604
12605         Adder.prototype = {
12606           constructor: Adder,
12607           reset: function() {
12608             this.s = // rounded value
12609             this.t = 0; // exact error
12610           },
12611           add: function(y) {
12612             add$1(temp, y, this.t);
12613             add$1(this, temp.s, this.s);
12614             if (this.s) this.t += temp.t;
12615             else this.s = temp.t;
12616           },
12617           valueOf: function() {
12618             return this.s;
12619           }
12620         };
12621
12622         var temp = new Adder;
12623
12624         function add$1(adder, a, b) {
12625           var x = adder.s = a + b,
12626               bv = x - a,
12627               av = x - bv;
12628           adder.t = (a - av) + (b - bv);
12629         }
12630
12631         var epsilon$2 = 1e-6;
12632         var epsilon2$1 = 1e-12;
12633         var pi$3 = Math.PI;
12634         var halfPi$2 = pi$3 / 2;
12635         var quarterPi = pi$3 / 4;
12636         var tau$3 = pi$3 * 2;
12637
12638         var degrees$1 = 180 / pi$3;
12639         var radians = pi$3 / 180;
12640
12641         var abs$2 = Math.abs;
12642         var atan = Math.atan;
12643         var atan2 = Math.atan2;
12644         var cos$1 = Math.cos;
12645         var ceil = Math.ceil;
12646         var exp = Math.exp;
12647         var log = Math.log;
12648         var pow = Math.pow;
12649         var sin$1 = Math.sin;
12650         var sign$2 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
12651         var sqrt = Math.sqrt;
12652         var tan = Math.tan;
12653
12654         function acos(x) {
12655           return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);
12656         }
12657
12658         function asin(x) {
12659           return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);
12660         }
12661
12662         function haversin(x) {
12663           return (x = sin$1(x / 2)) * x;
12664         }
12665
12666         function noop$4() {}
12667
12668         function streamGeometry(geometry, stream) {
12669           if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
12670             streamGeometryType[geometry.type](geometry, stream);
12671           }
12672         }
12673
12674         var streamObjectType = {
12675           Feature: function(object, stream) {
12676             streamGeometry(object.geometry, stream);
12677           },
12678           FeatureCollection: function(object, stream) {
12679             var features = object.features, i = -1, n = features.length;
12680             while (++i < n) streamGeometry(features[i].geometry, stream);
12681           }
12682         };
12683
12684         var streamGeometryType = {
12685           Sphere: function(object, stream) {
12686             stream.sphere();
12687           },
12688           Point: function(object, stream) {
12689             object = object.coordinates;
12690             stream.point(object[0], object[1], object[2]);
12691           },
12692           MultiPoint: function(object, stream) {
12693             var coordinates = object.coordinates, i = -1, n = coordinates.length;
12694             while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
12695           },
12696           LineString: function(object, stream) {
12697             streamLine(object.coordinates, stream, 0);
12698           },
12699           MultiLineString: function(object, stream) {
12700             var coordinates = object.coordinates, i = -1, n = coordinates.length;
12701             while (++i < n) streamLine(coordinates[i], stream, 0);
12702           },
12703           Polygon: function(object, stream) {
12704             streamPolygon(object.coordinates, stream);
12705           },
12706           MultiPolygon: function(object, stream) {
12707             var coordinates = object.coordinates, i = -1, n = coordinates.length;
12708             while (++i < n) streamPolygon(coordinates[i], stream);
12709           },
12710           GeometryCollection: function(object, stream) {
12711             var geometries = object.geometries, i = -1, n = geometries.length;
12712             while (++i < n) streamGeometry(geometries[i], stream);
12713           }
12714         };
12715
12716         function streamLine(coordinates, stream, closed) {
12717           var i = -1, n = coordinates.length - closed, coordinate;
12718           stream.lineStart();
12719           while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
12720           stream.lineEnd();
12721         }
12722
12723         function streamPolygon(coordinates, stream) {
12724           var i = -1, n = coordinates.length;
12725           stream.polygonStart();
12726           while (++i < n) streamLine(coordinates[i], stream, 1);
12727           stream.polygonEnd();
12728         }
12729
12730         function d3_geoStream(object, stream) {
12731           if (object && streamObjectType.hasOwnProperty(object.type)) {
12732             streamObjectType[object.type](object, stream);
12733           } else {
12734             streamGeometry(object, stream);
12735           }
12736         }
12737
12738         var areaRingSum = adder();
12739
12740         var areaSum = adder(),
12741             lambda00,
12742             phi00,
12743             lambda0,
12744             cosPhi0,
12745             sinPhi0;
12746
12747         var areaStream = {
12748           point: noop$4,
12749           lineStart: noop$4,
12750           lineEnd: noop$4,
12751           polygonStart: function() {
12752             areaRingSum.reset();
12753             areaStream.lineStart = areaRingStart;
12754             areaStream.lineEnd = areaRingEnd;
12755           },
12756           polygonEnd: function() {
12757             var areaRing = +areaRingSum;
12758             areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);
12759             this.lineStart = this.lineEnd = this.point = noop$4;
12760           },
12761           sphere: function() {
12762             areaSum.add(tau$3);
12763           }
12764         };
12765
12766         function areaRingStart() {
12767           areaStream.point = areaPointFirst;
12768         }
12769
12770         function areaRingEnd() {
12771           areaPoint(lambda00, phi00);
12772         }
12773
12774         function areaPointFirst(lambda, phi) {
12775           areaStream.point = areaPoint;
12776           lambda00 = lambda, phi00 = phi;
12777           lambda *= radians, phi *= radians;
12778           lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
12779         }
12780
12781         function areaPoint(lambda, phi) {
12782           lambda *= radians, phi *= radians;
12783           phi = phi / 2 + quarterPi; // half the angular distance from south pole
12784
12785           // Spherical excess E for a spherical triangle with vertices: south pole,
12786           // previous point, current point.  Uses a formula derived from Cagnoli’s
12787           // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
12788           var dLambda = lambda - lambda0,
12789               sdLambda = dLambda >= 0 ? 1 : -1,
12790               adLambda = sdLambda * dLambda,
12791               cosPhi = cos$1(phi),
12792               sinPhi = sin$1(phi),
12793               k = sinPhi0 * sinPhi,
12794               u = cosPhi0 * cosPhi + k * cos$1(adLambda),
12795               v = k * sdLambda * sin$1(adLambda);
12796           areaRingSum.add(atan2(v, u));
12797
12798           // Advance the previous points.
12799           lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
12800         }
12801
12802         function d3_geoArea(object) {
12803           areaSum.reset();
12804           d3_geoStream(object, areaStream);
12805           return areaSum * 2;
12806         }
12807
12808         function spherical(cartesian) {
12809           return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
12810         }
12811
12812         function cartesian(spherical) {
12813           var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
12814           return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
12815         }
12816
12817         function cartesianDot(a, b) {
12818           return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
12819         }
12820
12821         function cartesianCross(a, b) {
12822           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]];
12823         }
12824
12825         // TODO return a
12826         function cartesianAddInPlace(a, b) {
12827           a[0] += b[0], a[1] += b[1], a[2] += b[2];
12828         }
12829
12830         function cartesianScale(vector, k) {
12831           return [vector[0] * k, vector[1] * k, vector[2] * k];
12832         }
12833
12834         // TODO return d
12835         function cartesianNormalizeInPlace(d) {
12836           var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
12837           d[0] /= l, d[1] /= l, d[2] /= l;
12838         }
12839
12840         var lambda0$1, phi0, lambda1, phi1, // bounds
12841             lambda2, // previous lambda-coordinate
12842             lambda00$1, phi00$1, // first point
12843             p0, // previous 3D point
12844             deltaSum = adder(),
12845             ranges,
12846             range;
12847
12848         var boundsStream = {
12849           point: boundsPoint,
12850           lineStart: boundsLineStart,
12851           lineEnd: boundsLineEnd,
12852           polygonStart: function() {
12853             boundsStream.point = boundsRingPoint;
12854             boundsStream.lineStart = boundsRingStart;
12855             boundsStream.lineEnd = boundsRingEnd;
12856             deltaSum.reset();
12857             areaStream.polygonStart();
12858           },
12859           polygonEnd: function() {
12860             areaStream.polygonEnd();
12861             boundsStream.point = boundsPoint;
12862             boundsStream.lineStart = boundsLineStart;
12863             boundsStream.lineEnd = boundsLineEnd;
12864             if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
12865             else if (deltaSum > epsilon$2) phi1 = 90;
12866             else if (deltaSum < -epsilon$2) phi0 = -90;
12867             range[0] = lambda0$1, range[1] = lambda1;
12868           }
12869         };
12870
12871         function boundsPoint(lambda, phi) {
12872           ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
12873           if (phi < phi0) phi0 = phi;
12874           if (phi > phi1) phi1 = phi;
12875         }
12876
12877         function linePoint(lambda, phi) {
12878           var p = cartesian([lambda * radians, phi * radians]);
12879           if (p0) {
12880             var normal = cartesianCross(p0, p),
12881                 equatorial = [normal[1], -normal[0], 0],
12882                 inflection = cartesianCross(equatorial, normal);
12883             cartesianNormalizeInPlace(inflection);
12884             inflection = spherical(inflection);
12885             var delta = lambda - lambda2,
12886                 sign = delta > 0 ? 1 : -1,
12887                 lambdai = inflection[0] * degrees$1 * sign,
12888                 phii,
12889                 antimeridian = abs$2(delta) > 180;
12890             if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
12891               phii = inflection[1] * degrees$1;
12892               if (phii > phi1) phi1 = phii;
12893             } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
12894               phii = -inflection[1] * degrees$1;
12895               if (phii < phi0) phi0 = phii;
12896             } else {
12897               if (phi < phi0) phi0 = phi;
12898               if (phi > phi1) phi1 = phi;
12899             }
12900             if (antimeridian) {
12901               if (lambda < lambda2) {
12902                 if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
12903               } else {
12904                 if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
12905               }
12906             } else {
12907               if (lambda1 >= lambda0$1) {
12908                 if (lambda < lambda0$1) lambda0$1 = lambda;
12909                 if (lambda > lambda1) lambda1 = lambda;
12910               } else {
12911                 if (lambda > lambda2) {
12912                   if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
12913                 } else {
12914                   if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
12915                 }
12916               }
12917             }
12918           } else {
12919             ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
12920           }
12921           if (phi < phi0) phi0 = phi;
12922           if (phi > phi1) phi1 = phi;
12923           p0 = p, lambda2 = lambda;
12924         }
12925
12926         function boundsLineStart() {
12927           boundsStream.point = linePoint;
12928         }
12929
12930         function boundsLineEnd() {
12931           range[0] = lambda0$1, range[1] = lambda1;
12932           boundsStream.point = boundsPoint;
12933           p0 = null;
12934         }
12935
12936         function boundsRingPoint(lambda, phi) {
12937           if (p0) {
12938             var delta = lambda - lambda2;
12939             deltaSum.add(abs$2(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
12940           } else {
12941             lambda00$1 = lambda, phi00$1 = phi;
12942           }
12943           areaStream.point(lambda, phi);
12944           linePoint(lambda, phi);
12945         }
12946
12947         function boundsRingStart() {
12948           areaStream.lineStart();
12949         }
12950
12951         function boundsRingEnd() {
12952           boundsRingPoint(lambda00$1, phi00$1);
12953           areaStream.lineEnd();
12954           if (abs$2(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180);
12955           range[0] = lambda0$1, range[1] = lambda1;
12956           p0 = null;
12957         }
12958
12959         // Finds the left-right distance between two longitudes.
12960         // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
12961         // the distance between ±180° to be 360°.
12962         function angle(lambda0, lambda1) {
12963           return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
12964         }
12965
12966         function rangeCompare(a, b) {
12967           return a[0] - b[0];
12968         }
12969
12970         function rangeContains(range, x) {
12971           return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
12972         }
12973
12974         function d3_geoBounds(feature) {
12975           var i, n, a, b, merged, deltaMax, delta;
12976
12977           phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
12978           ranges = [];
12979           d3_geoStream(feature, boundsStream);
12980
12981           // First, sort ranges by their minimum longitudes.
12982           if (n = ranges.length) {
12983             ranges.sort(rangeCompare);
12984
12985             // Then, merge any ranges that overlap.
12986             for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
12987               b = ranges[i];
12988               if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
12989                 if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
12990                 if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
12991               } else {
12992                 merged.push(a = b);
12993               }
12994             }
12995
12996             // Finally, find the largest gap between the merged ranges.
12997             // The final bounding box will be the inverse of this gap.
12998             for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
12999               b = merged[i];
13000               if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
13001             }
13002           }
13003
13004           ranges = range = null;
13005
13006           return lambda0$1 === Infinity || phi0 === Infinity
13007               ? [[NaN, NaN], [NaN, NaN]]
13008               : [[lambda0$1, phi0], [lambda1, phi1]];
13009         }
13010
13011         var W0, W1,
13012             X0, Y0, Z0,
13013             X1, Y1, Z1,
13014             X2, Y2, Z2,
13015             lambda00$2, phi00$2, // first point
13016             x0, y0, z0; // previous point
13017
13018         var centroidStream = {
13019           sphere: noop$4,
13020           point: centroidPoint,
13021           lineStart: centroidLineStart,
13022           lineEnd: centroidLineEnd,
13023           polygonStart: function() {
13024             centroidStream.lineStart = centroidRingStart;
13025             centroidStream.lineEnd = centroidRingEnd;
13026           },
13027           polygonEnd: function() {
13028             centroidStream.lineStart = centroidLineStart;
13029             centroidStream.lineEnd = centroidLineEnd;
13030           }
13031         };
13032
13033         // Arithmetic mean of Cartesian vectors.
13034         function centroidPoint(lambda, phi) {
13035           lambda *= radians, phi *= radians;
13036           var cosPhi = cos$1(phi);
13037           centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
13038         }
13039
13040         function centroidPointCartesian(x, y, z) {
13041           ++W0;
13042           X0 += (x - X0) / W0;
13043           Y0 += (y - Y0) / W0;
13044           Z0 += (z - Z0) / W0;
13045         }
13046
13047         function centroidLineStart() {
13048           centroidStream.point = centroidLinePointFirst;
13049         }
13050
13051         function centroidLinePointFirst(lambda, phi) {
13052           lambda *= radians, phi *= radians;
13053           var cosPhi = cos$1(phi);
13054           x0 = cosPhi * cos$1(lambda);
13055           y0 = cosPhi * sin$1(lambda);
13056           z0 = sin$1(phi);
13057           centroidStream.point = centroidLinePoint;
13058           centroidPointCartesian(x0, y0, z0);
13059         }
13060
13061         function centroidLinePoint(lambda, phi) {
13062           lambda *= radians, phi *= radians;
13063           var cosPhi = cos$1(phi),
13064               x = cosPhi * cos$1(lambda),
13065               y = cosPhi * sin$1(lambda),
13066               z = sin$1(phi),
13067               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);
13068           W1 += w;
13069           X1 += w * (x0 + (x0 = x));
13070           Y1 += w * (y0 + (y0 = y));
13071           Z1 += w * (z0 + (z0 = z));
13072           centroidPointCartesian(x0, y0, z0);
13073         }
13074
13075         function centroidLineEnd() {
13076           centroidStream.point = centroidPoint;
13077         }
13078
13079         // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
13080         // J. Applied Mechanics 42, 239 (1975).
13081         function centroidRingStart() {
13082           centroidStream.point = centroidRingPointFirst;
13083         }
13084
13085         function centroidRingEnd() {
13086           centroidRingPoint(lambda00$2, phi00$2);
13087           centroidStream.point = centroidPoint;
13088         }
13089
13090         function centroidRingPointFirst(lambda, phi) {
13091           lambda00$2 = lambda, phi00$2 = phi;
13092           lambda *= radians, phi *= radians;
13093           centroidStream.point = centroidRingPoint;
13094           var cosPhi = cos$1(phi);
13095           x0 = cosPhi * cos$1(lambda);
13096           y0 = cosPhi * sin$1(lambda);
13097           z0 = sin$1(phi);
13098           centroidPointCartesian(x0, y0, z0);
13099         }
13100
13101         function centroidRingPoint(lambda, phi) {
13102           lambda *= radians, phi *= radians;
13103           var cosPhi = cos$1(phi),
13104               x = cosPhi * cos$1(lambda),
13105               y = cosPhi * sin$1(lambda),
13106               z = sin$1(phi),
13107               cx = y0 * z - z0 * y,
13108               cy = z0 * x - x0 * z,
13109               cz = x0 * y - y0 * x,
13110               m = sqrt(cx * cx + cy * cy + cz * cz),
13111               w = asin(m), // line weight = angle
13112               v = m && -w / m; // area weight multiplier
13113           X2 += v * cx;
13114           Y2 += v * cy;
13115           Z2 += v * cz;
13116           W1 += w;
13117           X1 += w * (x0 + (x0 = x));
13118           Y1 += w * (y0 + (y0 = y));
13119           Z1 += w * (z0 + (z0 = z));
13120           centroidPointCartesian(x0, y0, z0);
13121         }
13122
13123         function d3_geoCentroid(object) {
13124           W0 = W1 =
13125           X0 = Y0 = Z0 =
13126           X1 = Y1 = Z1 =
13127           X2 = Y2 = Z2 = 0;
13128           d3_geoStream(object, centroidStream);
13129
13130           var x = X2,
13131               y = Y2,
13132               z = Z2,
13133               m = x * x + y * y + z * z;
13134
13135           // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
13136           if (m < epsilon2$1) {
13137             x = X1, y = Y1, z = Z1;
13138             // If the feature has zero length, fall back to arithmetic mean of point vectors.
13139             if (W1 < epsilon$2) x = X0, y = Y0, z = Z0;
13140             m = x * x + y * y + z * z;
13141             // If the feature still has an undefined ccentroid, then return.
13142             if (m < epsilon2$1) return [NaN, NaN];
13143           }
13144
13145           return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];
13146         }
13147
13148         function constant$8(x) {
13149           return function() {
13150             return x;
13151           };
13152         }
13153
13154         function compose(a, b) {
13155
13156           function compose(x, y) {
13157             return x = a(x, y), b(x[0], x[1]);
13158           }
13159
13160           if (a.invert && b.invert) compose.invert = function(x, y) {
13161             return x = b.invert(x, y), x && a.invert(x[0], x[1]);
13162           };
13163
13164           return compose;
13165         }
13166
13167         function rotationIdentity(lambda, phi) {
13168           return [abs$2(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi];
13169         }
13170
13171         rotationIdentity.invert = rotationIdentity;
13172
13173         function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
13174           return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
13175             : rotationLambda(deltaLambda))
13176             : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
13177             : rotationIdentity);
13178         }
13179
13180         function forwardRotationLambda(deltaLambda) {
13181           return function(lambda, phi) {
13182             return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
13183           };
13184         }
13185
13186         function rotationLambda(deltaLambda) {
13187           var rotation = forwardRotationLambda(deltaLambda);
13188           rotation.invert = forwardRotationLambda(-deltaLambda);
13189           return rotation;
13190         }
13191
13192         function rotationPhiGamma(deltaPhi, deltaGamma) {
13193           var cosDeltaPhi = cos$1(deltaPhi),
13194               sinDeltaPhi = sin$1(deltaPhi),
13195               cosDeltaGamma = cos$1(deltaGamma),
13196               sinDeltaGamma = sin$1(deltaGamma);
13197
13198           function rotation(lambda, phi) {
13199             var cosPhi = cos$1(phi),
13200                 x = cos$1(lambda) * cosPhi,
13201                 y = sin$1(lambda) * cosPhi,
13202                 z = sin$1(phi),
13203                 k = z * cosDeltaPhi + x * sinDeltaPhi;
13204             return [
13205               atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
13206               asin(k * cosDeltaGamma + y * sinDeltaGamma)
13207             ];
13208           }
13209
13210           rotation.invert = function(lambda, phi) {
13211             var cosPhi = cos$1(phi),
13212                 x = cos$1(lambda) * cosPhi,
13213                 y = sin$1(lambda) * cosPhi,
13214                 z = sin$1(phi),
13215                 k = z * cosDeltaGamma - y * sinDeltaGamma;
13216             return [
13217               atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
13218               asin(k * cosDeltaPhi - x * sinDeltaPhi)
13219             ];
13220           };
13221
13222           return rotation;
13223         }
13224
13225         function rotation(rotate) {
13226           rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
13227
13228           function forward(coordinates) {
13229             coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
13230             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
13231           }
13232
13233           forward.invert = function(coordinates) {
13234             coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
13235             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
13236           };
13237
13238           return forward;
13239         }
13240
13241         // Generates a circle centered at [0°, 0°], with a given radius and precision.
13242         function circleStream(stream, radius, delta, direction, t0, t1) {
13243           if (!delta) return;
13244           var cosRadius = cos$1(radius),
13245               sinRadius = sin$1(radius),
13246               step = direction * delta;
13247           if (t0 == null) {
13248             t0 = radius + direction * tau$3;
13249             t1 = radius - step / 2;
13250           } else {
13251             t0 = circleRadius(cosRadius, t0);
13252             t1 = circleRadius(cosRadius, t1);
13253             if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3;
13254           }
13255           for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
13256             point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
13257             stream.point(point[0], point[1]);
13258           }
13259         }
13260
13261         // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
13262         function circleRadius(cosRadius, point) {
13263           point = cartesian(point), point[0] -= cosRadius;
13264           cartesianNormalizeInPlace(point);
13265           var radius = acos(-point[1]);
13266           return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;
13267         }
13268
13269         function circle() {
13270           var center = constant$8([0, 0]),
13271               radius = constant$8(90),
13272               precision = constant$8(6),
13273               ring,
13274               rotate,
13275               stream = {point: point};
13276
13277           function point(x, y) {
13278             ring.push(x = rotate(x, y));
13279             x[0] *= degrees$1, x[1] *= degrees$1;
13280           }
13281
13282           function circle() {
13283             var c = center.apply(this, arguments),
13284                 r = radius.apply(this, arguments) * radians,
13285                 p = precision.apply(this, arguments) * radians;
13286             ring = [];
13287             rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
13288             circleStream(stream, r, p, 1);
13289             c = {type: "Polygon", coordinates: [ring]};
13290             ring = rotate = null;
13291             return c;
13292           }
13293
13294           circle.center = function(_) {
13295             return arguments.length ? (center = typeof _ === "function" ? _ : constant$8([+_[0], +_[1]]), circle) : center;
13296           };
13297
13298           circle.radius = function(_) {
13299             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$8(+_), circle) : radius;
13300           };
13301
13302           circle.precision = function(_) {
13303             return arguments.length ? (precision = typeof _ === "function" ? _ : constant$8(+_), circle) : precision;
13304           };
13305
13306           return circle;
13307         }
13308
13309         function clipBuffer() {
13310           var lines = [],
13311               line;
13312           return {
13313             point: function(x, y) {
13314               line.push([x, y]);
13315             },
13316             lineStart: function() {
13317               lines.push(line = []);
13318             },
13319             lineEnd: noop$4,
13320             rejoin: function() {
13321               if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
13322             },
13323             result: function() {
13324               var result = lines;
13325               lines = [];
13326               line = null;
13327               return result;
13328             }
13329           };
13330         }
13331
13332         function pointEqual(a, b) {
13333           return abs$2(a[0] - b[0]) < epsilon$2 && abs$2(a[1] - b[1]) < epsilon$2;
13334         }
13335
13336         function Intersection(point, points, other, entry) {
13337           this.x = point;
13338           this.z = points;
13339           this.o = other; // another intersection
13340           this.e = entry; // is an entry?
13341           this.v = false; // visited
13342           this.n = this.p = null; // next & previous
13343         }
13344
13345         // A generalized polygon clipping algorithm: given a polygon that has been cut
13346         // into its visible line segments, and rejoins the segments by interpolating
13347         // along the clip edge.
13348         function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {
13349           var subject = [],
13350               clip = [],
13351               i,
13352               n;
13353
13354           segments.forEach(function(segment) {
13355             if ((n = segment.length - 1) <= 0) return;
13356             var n, p0 = segment[0], p1 = segment[n], x;
13357
13358             // If the first and last points of a segment are coincident, then treat as a
13359             // closed ring. TODO if all rings are closed, then the winding order of the
13360             // exterior ring should be checked.
13361             if (pointEqual(p0, p1)) {
13362               stream.lineStart();
13363               for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
13364               stream.lineEnd();
13365               return;
13366             }
13367
13368             subject.push(x = new Intersection(p0, segment, null, true));
13369             clip.push(x.o = new Intersection(p0, null, x, false));
13370             subject.push(x = new Intersection(p1, segment, null, false));
13371             clip.push(x.o = new Intersection(p1, null, x, true));
13372           });
13373
13374           if (!subject.length) return;
13375
13376           clip.sort(compareIntersection);
13377           link$1(subject);
13378           link$1(clip);
13379
13380           for (i = 0, n = clip.length; i < n; ++i) {
13381             clip[i].e = startInside = !startInside;
13382           }
13383
13384           var start = subject[0],
13385               points,
13386               point;
13387
13388           while (1) {
13389             // Find first unvisited intersection.
13390             var current = start,
13391                 isSubject = true;
13392             while (current.v) if ((current = current.n) === start) return;
13393             points = current.z;
13394             stream.lineStart();
13395             do {
13396               current.v = current.o.v = true;
13397               if (current.e) {
13398                 if (isSubject) {
13399                   for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
13400                 } else {
13401                   interpolate(current.x, current.n.x, 1, stream);
13402                 }
13403                 current = current.n;
13404               } else {
13405                 if (isSubject) {
13406                   points = current.p.z;
13407                   for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
13408                 } else {
13409                   interpolate(current.x, current.p.x, -1, stream);
13410                 }
13411                 current = current.p;
13412               }
13413               current = current.o;
13414               points = current.z;
13415               isSubject = !isSubject;
13416             } while (!current.v);
13417             stream.lineEnd();
13418           }
13419         }
13420
13421         function link$1(array) {
13422           if (!(n = array.length)) return;
13423           var n,
13424               i = 0,
13425               a = array[0],
13426               b;
13427           while (++i < n) {
13428             a.n = b = array[i];
13429             b.p = a;
13430             a = b;
13431           }
13432           a.n = b = array[0];
13433           b.p = a;
13434         }
13435
13436         var sum$1 = adder();
13437
13438         function polygonContains(polygon, point) {
13439           var lambda = point[0],
13440               phi = point[1],
13441               sinPhi = sin$1(phi),
13442               normal = [sin$1(lambda), -cos$1(lambda), 0],
13443               angle = 0,
13444               winding = 0;
13445
13446           sum$1.reset();
13447
13448           if (sinPhi === 1) phi = halfPi$2 + epsilon$2;
13449           else if (sinPhi === -1) phi = -halfPi$2 - epsilon$2;
13450
13451           for (var i = 0, n = polygon.length; i < n; ++i) {
13452             if (!(m = (ring = polygon[i]).length)) continue;
13453             var ring,
13454                 m,
13455                 point0 = ring[m - 1],
13456                 lambda0 = point0[0],
13457                 phi0 = point0[1] / 2 + quarterPi,
13458                 sinPhi0 = sin$1(phi0),
13459                 cosPhi0 = cos$1(phi0);
13460
13461             for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
13462               var point1 = ring[j],
13463                   lambda1 = point1[0],
13464                   phi1 = point1[1] / 2 + quarterPi,
13465                   sinPhi1 = sin$1(phi1),
13466                   cosPhi1 = cos$1(phi1),
13467                   delta = lambda1 - lambda0,
13468                   sign = delta >= 0 ? 1 : -1,
13469                   absDelta = sign * delta,
13470                   antimeridian = absDelta > pi$3,
13471                   k = sinPhi0 * sinPhi1;
13472
13473               sum$1.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
13474               angle += antimeridian ? delta + sign * tau$3 : delta;
13475
13476               // Are the longitudes either side of the point’s meridian (lambda),
13477               // and are the latitudes smaller than the parallel (phi)?
13478               if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
13479                 var arc = cartesianCross(cartesian(point0), cartesian(point1));
13480                 cartesianNormalizeInPlace(arc);
13481                 var intersection = cartesianCross(normal, arc);
13482                 cartesianNormalizeInPlace(intersection);
13483                 var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
13484                 if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
13485                   winding += antimeridian ^ delta >= 0 ? 1 : -1;
13486                 }
13487               }
13488             }
13489           }
13490
13491           // First, determine whether the South pole is inside or outside:
13492           //
13493           // It is inside if:
13494           // * the polygon winds around it in a clockwise direction.
13495           // * the polygon does not (cumulatively) wind around it, but has a negative
13496           //   (counter-clockwise) area.
13497           //
13498           // Second, count the (signed) number of times a segment crosses a lambda
13499           // from the point to the South pole.  If it is zero, then the point is the
13500           // same side as the South pole.
13501
13502           return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
13503         }
13504
13505         function clip(pointVisible, clipLine, interpolate, start) {
13506           return function(sink) {
13507             var line = clipLine(sink),
13508                 ringBuffer = clipBuffer(),
13509                 ringSink = clipLine(ringBuffer),
13510                 polygonStarted = false,
13511                 polygon,
13512                 segments,
13513                 ring;
13514
13515             var clip = {
13516               point: point,
13517               lineStart: lineStart,
13518               lineEnd: lineEnd,
13519               polygonStart: function() {
13520                 clip.point = pointRing;
13521                 clip.lineStart = ringStart;
13522                 clip.lineEnd = ringEnd;
13523                 segments = [];
13524                 polygon = [];
13525               },
13526               polygonEnd: function() {
13527                 clip.point = point;
13528                 clip.lineStart = lineStart;
13529                 clip.lineEnd = lineEnd;
13530                 segments = merge(segments);
13531                 var startInside = polygonContains(polygon, start);
13532                 if (segments.length) {
13533                   if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
13534                   clipRejoin(segments, compareIntersection, startInside, interpolate, sink);
13535                 } else if (startInside) {
13536                   if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
13537                   sink.lineStart();
13538                   interpolate(null, null, 1, sink);
13539                   sink.lineEnd();
13540                 }
13541                 if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
13542                 segments = polygon = null;
13543               },
13544               sphere: function() {
13545                 sink.polygonStart();
13546                 sink.lineStart();
13547                 interpolate(null, null, 1, sink);
13548                 sink.lineEnd();
13549                 sink.polygonEnd();
13550               }
13551             };
13552
13553             function point(lambda, phi) {
13554               if (pointVisible(lambda, phi)) sink.point(lambda, phi);
13555             }
13556
13557             function pointLine(lambda, phi) {
13558               line.point(lambda, phi);
13559             }
13560
13561             function lineStart() {
13562               clip.point = pointLine;
13563               line.lineStart();
13564             }
13565
13566             function lineEnd() {
13567               clip.point = point;
13568               line.lineEnd();
13569             }
13570
13571             function pointRing(lambda, phi) {
13572               ring.push([lambda, phi]);
13573               ringSink.point(lambda, phi);
13574             }
13575
13576             function ringStart() {
13577               ringSink.lineStart();
13578               ring = [];
13579             }
13580
13581             function ringEnd() {
13582               pointRing(ring[0][0], ring[0][1]);
13583               ringSink.lineEnd();
13584
13585               var clean = ringSink.clean(),
13586                   ringSegments = ringBuffer.result(),
13587                   i, n = ringSegments.length, m,
13588                   segment,
13589                   point;
13590
13591               ring.pop();
13592               polygon.push(ring);
13593               ring = null;
13594
13595               if (!n) return;
13596
13597               // No intersections.
13598               if (clean & 1) {
13599                 segment = ringSegments[0];
13600                 if ((m = segment.length - 1) > 0) {
13601                   if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
13602                   sink.lineStart();
13603                   for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
13604                   sink.lineEnd();
13605                 }
13606                 return;
13607               }
13608
13609               // Rejoin connected segments.
13610               // TODO reuse ringBuffer.rejoin()?
13611               if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
13612
13613               segments.push(ringSegments.filter(validSegment));
13614             }
13615
13616             return clip;
13617           };
13618         }
13619
13620         function validSegment(segment) {
13621           return segment.length > 1;
13622         }
13623
13624         // Intersections are sorted along the clip edge. For both antimeridian cutting
13625         // and circle clipping, the same comparison is used.
13626         function compareIntersection(a, b) {
13627           return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])
13628                - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);
13629         }
13630
13631         var clipAntimeridian = clip(
13632           function() { return true; },
13633           clipAntimeridianLine,
13634           clipAntimeridianInterpolate,
13635           [-pi$3, -halfPi$2]
13636         );
13637
13638         // Takes a line and cuts into visible segments. Return values: 0 - there were
13639         // intersections or the line was empty; 1 - no intersections; 2 - there were
13640         // intersections, and the first and last segments should be rejoined.
13641         function clipAntimeridianLine(stream) {
13642           var lambda0 = NaN,
13643               phi0 = NaN,
13644               sign0 = NaN,
13645               clean; // no intersections
13646
13647           return {
13648             lineStart: function() {
13649               stream.lineStart();
13650               clean = 1;
13651             },
13652             point: function(lambda1, phi1) {
13653               var sign1 = lambda1 > 0 ? pi$3 : -pi$3,
13654                   delta = abs$2(lambda1 - lambda0);
13655               if (abs$2(delta - pi$3) < epsilon$2) { // line crosses a pole
13656                 stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);
13657                 stream.point(sign0, phi0);
13658                 stream.lineEnd();
13659                 stream.lineStart();
13660                 stream.point(sign1, phi0);
13661                 stream.point(lambda1, phi0);
13662                 clean = 0;
13663               } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian
13664                 if (abs$2(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies
13665                 if (abs$2(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;
13666                 phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
13667                 stream.point(sign0, phi0);
13668                 stream.lineEnd();
13669                 stream.lineStart();
13670                 stream.point(sign1, phi0);
13671                 clean = 0;
13672               }
13673               stream.point(lambda0 = lambda1, phi0 = phi1);
13674               sign0 = sign1;
13675             },
13676             lineEnd: function() {
13677               stream.lineEnd();
13678               lambda0 = phi0 = NaN;
13679             },
13680             clean: function() {
13681               return 2 - clean; // if intersections, rejoin first and last segments
13682             }
13683           };
13684         }
13685
13686         function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
13687           var cosPhi0,
13688               cosPhi1,
13689               sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
13690           return abs$2(sinLambda0Lambda1) > epsilon$2
13691               ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
13692                   - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
13693                   / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
13694               : (phi0 + phi1) / 2;
13695         }
13696
13697         function clipAntimeridianInterpolate(from, to, direction, stream) {
13698           var phi;
13699           if (from == null) {
13700             phi = direction * halfPi$2;
13701             stream.point(-pi$3, phi);
13702             stream.point(0, phi);
13703             stream.point(pi$3, phi);
13704             stream.point(pi$3, 0);
13705             stream.point(pi$3, -phi);
13706             stream.point(0, -phi);
13707             stream.point(-pi$3, -phi);
13708             stream.point(-pi$3, 0);
13709             stream.point(-pi$3, phi);
13710           } else if (abs$2(from[0] - to[0]) > epsilon$2) {
13711             var lambda = from[0] < to[0] ? pi$3 : -pi$3;
13712             phi = direction * lambda / 2;
13713             stream.point(-lambda, phi);
13714             stream.point(0, phi);
13715             stream.point(lambda, phi);
13716           } else {
13717             stream.point(to[0], to[1]);
13718           }
13719         }
13720
13721         function clipCircle(radius) {
13722           var cr = cos$1(radius),
13723               delta = 6 * radians,
13724               smallRadius = cr > 0,
13725               notHemisphere = abs$2(cr) > epsilon$2; // TODO optimise for this common case
13726
13727           function interpolate(from, to, direction, stream) {
13728             circleStream(stream, radius, delta, direction, from, to);
13729           }
13730
13731           function visible(lambda, phi) {
13732             return cos$1(lambda) * cos$1(phi) > cr;
13733           }
13734
13735           // Takes a line and cuts into visible segments. Return values used for polygon
13736           // clipping: 0 - there were intersections or the line was empty; 1 - no
13737           // intersections 2 - there were intersections, and the first and last segments
13738           // should be rejoined.
13739           function clipLine(stream) {
13740             var point0, // previous point
13741                 c0, // code for previous point
13742                 v0, // visibility of previous point
13743                 v00, // visibility of first point
13744                 clean; // no intersections
13745             return {
13746               lineStart: function() {
13747                 v00 = v0 = false;
13748                 clean = 1;
13749               },
13750               point: function(lambda, phi) {
13751                 var point1 = [lambda, phi],
13752                     point2,
13753                     v = visible(lambda, phi),
13754                     c = smallRadius
13755                       ? v ? 0 : code(lambda, phi)
13756                       : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;
13757                 if (!point0 && (v00 = v0 = v)) stream.lineStart();
13758                 // Handle degeneracies.
13759                 // TODO ignore if not clipping polygons.
13760                 if (v !== v0) {
13761                   point2 = intersect(point0, point1);
13762                   if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
13763                     point1[0] += epsilon$2;
13764                     point1[1] += epsilon$2;
13765                     v = visible(point1[0], point1[1]);
13766                   }
13767                 }
13768                 if (v !== v0) {
13769                   clean = 0;
13770                   if (v) {
13771                     // outside going in
13772                     stream.lineStart();
13773                     point2 = intersect(point1, point0);
13774                     stream.point(point2[0], point2[1]);
13775                   } else {
13776                     // inside going out
13777                     point2 = intersect(point0, point1);
13778                     stream.point(point2[0], point2[1]);
13779                     stream.lineEnd();
13780                   }
13781                   point0 = point2;
13782                 } else if (notHemisphere && point0 && smallRadius ^ v) {
13783                   var t;
13784                   // If the codes for two points are different, or are both zero,
13785                   // and there this segment intersects with the small circle.
13786                   if (!(c & c0) && (t = intersect(point1, point0, true))) {
13787                     clean = 0;
13788                     if (smallRadius) {
13789                       stream.lineStart();
13790                       stream.point(t[0][0], t[0][1]);
13791                       stream.point(t[1][0], t[1][1]);
13792                       stream.lineEnd();
13793                     } else {
13794                       stream.point(t[1][0], t[1][1]);
13795                       stream.lineEnd();
13796                       stream.lineStart();
13797                       stream.point(t[0][0], t[0][1]);
13798                     }
13799                   }
13800                 }
13801                 if (v && (!point0 || !pointEqual(point0, point1))) {
13802                   stream.point(point1[0], point1[1]);
13803                 }
13804                 point0 = point1, v0 = v, c0 = c;
13805               },
13806               lineEnd: function() {
13807                 if (v0) stream.lineEnd();
13808                 point0 = null;
13809               },
13810               // Rejoin first and last segments if there were intersections and the first
13811               // and last points were visible.
13812               clean: function() {
13813                 return clean | ((v00 && v0) << 1);
13814               }
13815             };
13816           }
13817
13818           // Intersects the great circle between a and b with the clip circle.
13819           function intersect(a, b, two) {
13820             var pa = cartesian(a),
13821                 pb = cartesian(b);
13822
13823             // We have two planes, n1.p = d1 and n2.p = d2.
13824             // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
13825             var n1 = [1, 0, 0], // normal
13826                 n2 = cartesianCross(pa, pb),
13827                 n2n2 = cartesianDot(n2, n2),
13828                 n1n2 = n2[0], // cartesianDot(n1, n2),
13829                 determinant = n2n2 - n1n2 * n1n2;
13830
13831             // Two polar points.
13832             if (!determinant) return !two && a;
13833
13834             var c1 =  cr * n2n2 / determinant,
13835                 c2 = -cr * n1n2 / determinant,
13836                 n1xn2 = cartesianCross(n1, n2),
13837                 A = cartesianScale(n1, c1),
13838                 B = cartesianScale(n2, c2);
13839             cartesianAddInPlace(A, B);
13840
13841             // Solve |p(t)|^2 = 1.
13842             var u = n1xn2,
13843                 w = cartesianDot(A, u),
13844                 uu = cartesianDot(u, u),
13845                 t2 = w * w - uu * (cartesianDot(A, A) - 1);
13846
13847             if (t2 < 0) return;
13848
13849             var t = sqrt(t2),
13850                 q = cartesianScale(u, (-w - t) / uu);
13851             cartesianAddInPlace(q, A);
13852             q = spherical(q);
13853
13854             if (!two) return q;
13855
13856             // Two intersection points.
13857             var lambda0 = a[0],
13858                 lambda1 = b[0],
13859                 phi0 = a[1],
13860                 phi1 = b[1],
13861                 z;
13862
13863             if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
13864
13865             var delta = lambda1 - lambda0,
13866                 polar = abs$2(delta - pi$3) < epsilon$2,
13867                 meridian = polar || delta < epsilon$2;
13868
13869             if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
13870
13871             // Check that the first point is between a and b.
13872             if (meridian
13873                 ? polar
13874                   ? phi0 + phi1 > 0 ^ q[1] < (abs$2(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)
13875                   : phi0 <= q[1] && q[1] <= phi1
13876                 : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
13877               var q1 = cartesianScale(u, (-w + t) / uu);
13878               cartesianAddInPlace(q1, A);
13879               return [q, spherical(q1)];
13880             }
13881           }
13882
13883           // Generates a 4-bit vector representing the location of a point relative to
13884           // the small circle's bounding box.
13885           function code(lambda, phi) {
13886             var r = smallRadius ? radius : pi$3 - radius,
13887                 code = 0;
13888             if (lambda < -r) code |= 1; // left
13889             else if (lambda > r) code |= 2; // right
13890             if (phi < -r) code |= 4; // below
13891             else if (phi > r) code |= 8; // above
13892             return code;
13893           }
13894
13895           return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);
13896         }
13897
13898         function clipLine(a, b, x0, y0, x1, y1) {
13899           var ax = a[0],
13900               ay = a[1],
13901               bx = b[0],
13902               by = b[1],
13903               t0 = 0,
13904               t1 = 1,
13905               dx = bx - ax,
13906               dy = by - ay,
13907               r;
13908
13909           r = x0 - ax;
13910           if (!dx && r > 0) return;
13911           r /= dx;
13912           if (dx < 0) {
13913             if (r < t0) return;
13914             if (r < t1) t1 = r;
13915           } else if (dx > 0) {
13916             if (r > t1) return;
13917             if (r > t0) t0 = r;
13918           }
13919
13920           r = x1 - ax;
13921           if (!dx && r < 0) return;
13922           r /= dx;
13923           if (dx < 0) {
13924             if (r > t1) return;
13925             if (r > t0) t0 = r;
13926           } else if (dx > 0) {
13927             if (r < t0) return;
13928             if (r < t1) t1 = r;
13929           }
13930
13931           r = y0 - ay;
13932           if (!dy && r > 0) return;
13933           r /= dy;
13934           if (dy < 0) {
13935             if (r < t0) return;
13936             if (r < t1) t1 = r;
13937           } else if (dy > 0) {
13938             if (r > t1) return;
13939             if (r > t0) t0 = r;
13940           }
13941
13942           r = y1 - ay;
13943           if (!dy && r < 0) return;
13944           r /= dy;
13945           if (dy < 0) {
13946             if (r > t1) return;
13947             if (r > t0) t0 = r;
13948           } else if (dy > 0) {
13949             if (r < t0) return;
13950             if (r < t1) t1 = r;
13951           }
13952
13953           if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
13954           if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
13955           return true;
13956         }
13957
13958         var clipMax = 1e9, clipMin = -clipMax;
13959
13960         // TODO Use d3-polygon’s polygonContains here for the ring check?
13961         // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
13962
13963         function clipRectangle(x0, y0, x1, y1) {
13964
13965           function visible(x, y) {
13966             return x0 <= x && x <= x1 && y0 <= y && y <= y1;
13967           }
13968
13969           function interpolate(from, to, direction, stream) {
13970             var a = 0, a1 = 0;
13971             if (from == null
13972                 || (a = corner(from, direction)) !== (a1 = corner(to, direction))
13973                 || comparePoint(from, to) < 0 ^ direction > 0) {
13974               do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
13975               while ((a = (a + direction + 4) % 4) !== a1);
13976             } else {
13977               stream.point(to[0], to[1]);
13978             }
13979           }
13980
13981           function corner(p, direction) {
13982             return abs$2(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3
13983                 : abs$2(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1
13984                 : abs$2(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0
13985                 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
13986           }
13987
13988           function compareIntersection(a, b) {
13989             return comparePoint(a.x, b.x);
13990           }
13991
13992           function comparePoint(a, b) {
13993             var ca = corner(a, 1),
13994                 cb = corner(b, 1);
13995             return ca !== cb ? ca - cb
13996                 : ca === 0 ? b[1] - a[1]
13997                 : ca === 1 ? a[0] - b[0]
13998                 : ca === 2 ? a[1] - b[1]
13999                 : b[0] - a[0];
14000           }
14001
14002           return function(stream) {
14003             var activeStream = stream,
14004                 bufferStream = clipBuffer(),
14005                 segments,
14006                 polygon,
14007                 ring,
14008                 x__, y__, v__, // first point
14009                 x_, y_, v_, // previous point
14010                 first,
14011                 clean;
14012
14013             var clipStream = {
14014               point: point,
14015               lineStart: lineStart,
14016               lineEnd: lineEnd,
14017               polygonStart: polygonStart,
14018               polygonEnd: polygonEnd
14019             };
14020
14021             function point(x, y) {
14022               if (visible(x, y)) activeStream.point(x, y);
14023             }
14024
14025             function polygonInside() {
14026               var winding = 0;
14027
14028               for (var i = 0, n = polygon.length; i < n; ++i) {
14029                 for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
14030                   a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
14031                   if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
14032                   else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
14033                 }
14034               }
14035
14036               return winding;
14037             }
14038
14039             // Buffer geometry within a polygon and then clip it en masse.
14040             function polygonStart() {
14041               activeStream = bufferStream, segments = [], polygon = [], clean = true;
14042             }
14043
14044             function polygonEnd() {
14045               var startInside = polygonInside(),
14046                   cleanInside = clean && startInside,
14047                   visible = (segments = merge(segments)).length;
14048               if (cleanInside || visible) {
14049                 stream.polygonStart();
14050                 if (cleanInside) {
14051                   stream.lineStart();
14052                   interpolate(null, null, 1, stream);
14053                   stream.lineEnd();
14054                 }
14055                 if (visible) {
14056                   clipRejoin(segments, compareIntersection, startInside, interpolate, stream);
14057                 }
14058                 stream.polygonEnd();
14059               }
14060               activeStream = stream, segments = polygon = ring = null;
14061             }
14062
14063             function lineStart() {
14064               clipStream.point = linePoint;
14065               if (polygon) polygon.push(ring = []);
14066               first = true;
14067               v_ = false;
14068               x_ = y_ = NaN;
14069             }
14070
14071             // TODO rather than special-case polygons, simply handle them separately.
14072             // Ideally, coincident intersection points should be jittered to avoid
14073             // clipping issues.
14074             function lineEnd() {
14075               if (segments) {
14076                 linePoint(x__, y__);
14077                 if (v__ && v_) bufferStream.rejoin();
14078                 segments.push(bufferStream.result());
14079               }
14080               clipStream.point = point;
14081               if (v_) activeStream.lineEnd();
14082             }
14083
14084             function linePoint(x, y) {
14085               var v = visible(x, y);
14086               if (polygon) ring.push([x, y]);
14087               if (first) {
14088                 x__ = x, y__ = y, v__ = v;
14089                 first = false;
14090                 if (v) {
14091                   activeStream.lineStart();
14092                   activeStream.point(x, y);
14093                 }
14094               } else {
14095                 if (v && v_) activeStream.point(x, y);
14096                 else {
14097                   var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
14098                       b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
14099                   if (clipLine(a, b, x0, y0, x1, y1)) {
14100                     if (!v_) {
14101                       activeStream.lineStart();
14102                       activeStream.point(a[0], a[1]);
14103                     }
14104                     activeStream.point(b[0], b[1]);
14105                     if (!v) activeStream.lineEnd();
14106                     clean = false;
14107                   } else if (v) {
14108                     activeStream.lineStart();
14109                     activeStream.point(x, y);
14110                     clean = false;
14111                   }
14112                 }
14113               }
14114               x_ = x, y_ = y, v_ = v;
14115             }
14116
14117             return clipStream;
14118           };
14119         }
14120
14121         function extent$1() {
14122           var x0 = 0,
14123               y0 = 0,
14124               x1 = 960,
14125               y1 = 500,
14126               cache,
14127               cacheStream,
14128               clip;
14129
14130           return clip = {
14131             stream: function(stream) {
14132               return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);
14133             },
14134             extent: function(_) {
14135               return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
14136             }
14137           };
14138         }
14139
14140         var lengthSum = adder(),
14141             lambda0$2,
14142             sinPhi0$1,
14143             cosPhi0$1;
14144
14145         var lengthStream = {
14146           sphere: noop$4,
14147           point: noop$4,
14148           lineStart: lengthLineStart,
14149           lineEnd: noop$4,
14150           polygonStart: noop$4,
14151           polygonEnd: noop$4
14152         };
14153
14154         function lengthLineStart() {
14155           lengthStream.point = lengthPointFirst;
14156           lengthStream.lineEnd = lengthLineEnd;
14157         }
14158
14159         function lengthLineEnd() {
14160           lengthStream.point = lengthStream.lineEnd = noop$4;
14161         }
14162
14163         function lengthPointFirst(lambda, phi) {
14164           lambda *= radians, phi *= radians;
14165           lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
14166           lengthStream.point = lengthPoint;
14167         }
14168
14169         function lengthPoint(lambda, phi) {
14170           lambda *= radians, phi *= radians;
14171           var sinPhi = sin$1(phi),
14172               cosPhi = cos$1(phi),
14173               delta = abs$2(lambda - lambda0$2),
14174               cosDelta = cos$1(delta),
14175               sinDelta = sin$1(delta),
14176               x = cosPhi * sinDelta,
14177               y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
14178               z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
14179           lengthSum.add(atan2(sqrt(x * x + y * y), z));
14180           lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
14181         }
14182
14183         function d3_geoLength(object) {
14184           lengthSum.reset();
14185           d3_geoStream(object, lengthStream);
14186           return +lengthSum;
14187         }
14188
14189         var coordinates = [null, null],
14190             object$1 = {type: "LineString", coordinates: coordinates};
14191
14192         function distance(a, b) {
14193           coordinates[0] = a;
14194           coordinates[1] = b;
14195           return d3_geoLength(object$1);
14196         }
14197
14198         var containsObjectType = {
14199           Feature: function(object, point) {
14200             return containsGeometry(object.geometry, point);
14201           },
14202           FeatureCollection: function(object, point) {
14203             var features = object.features, i = -1, n = features.length;
14204             while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;
14205             return false;
14206           }
14207         };
14208
14209         var containsGeometryType = {
14210           Sphere: function() {
14211             return true;
14212           },
14213           Point: function(object, point) {
14214             return containsPoint(object.coordinates, point);
14215           },
14216           MultiPoint: function(object, point) {
14217             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14218             while (++i < n) if (containsPoint(coordinates[i], point)) return true;
14219             return false;
14220           },
14221           LineString: function(object, point) {
14222             return containsLine(object.coordinates, point);
14223           },
14224           MultiLineString: function(object, point) {
14225             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14226             while (++i < n) if (containsLine(coordinates[i], point)) return true;
14227             return false;
14228           },
14229           Polygon: function(object, point) {
14230             return containsPolygon(object.coordinates, point);
14231           },
14232           MultiPolygon: function(object, point) {
14233             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14234             while (++i < n) if (containsPolygon(coordinates[i], point)) return true;
14235             return false;
14236           },
14237           GeometryCollection: function(object, point) {
14238             var geometries = object.geometries, i = -1, n = geometries.length;
14239             while (++i < n) if (containsGeometry(geometries[i], point)) return true;
14240             return false;
14241           }
14242         };
14243
14244         function containsGeometry(geometry, point) {
14245           return geometry && containsGeometryType.hasOwnProperty(geometry.type)
14246               ? containsGeometryType[geometry.type](geometry, point)
14247               : false;
14248         }
14249
14250         function containsPoint(coordinates, point) {
14251           return distance(coordinates, point) === 0;
14252         }
14253
14254         function containsLine(coordinates, point) {
14255           var ab = distance(coordinates[0], coordinates[1]),
14256               ao = distance(coordinates[0], point),
14257               ob = distance(point, coordinates[1]);
14258           return ao + ob <= ab + epsilon$2;
14259         }
14260
14261         function containsPolygon(coordinates, point) {
14262           return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
14263         }
14264
14265         function ringRadians(ring) {
14266           return ring = ring.map(pointRadians), ring.pop(), ring;
14267         }
14268
14269         function pointRadians(point) {
14270           return [point[0] * radians, point[1] * radians];
14271         }
14272
14273         function contains$2(object, point) {
14274           return (object && containsObjectType.hasOwnProperty(object.type)
14275               ? containsObjectType[object.type]
14276               : containsGeometry)(object, point);
14277         }
14278
14279         function graticuleX(y0, y1, dy) {
14280           var y = d3_range(y0, y1 - epsilon$2, dy).concat(y1);
14281           return function(x) { return y.map(function(y) { return [x, y]; }); };
14282         }
14283
14284         function graticuleY(x0, x1, dx) {
14285           var x = d3_range(x0, x1 - epsilon$2, dx).concat(x1);
14286           return function(y) { return x.map(function(x) { return [x, y]; }); };
14287         }
14288
14289         function graticule() {
14290           var x1, x0, X1, X0,
14291               y1, y0, Y1, Y0,
14292               dx = 10, dy = dx, DX = 90, DY = 360,
14293               x, y, X, Y,
14294               precision = 2.5;
14295
14296           function graticule() {
14297             return {type: "MultiLineString", coordinates: lines()};
14298           }
14299
14300           function lines() {
14301             return d3_range(ceil(X0 / DX) * DX, X1, DX).map(X)
14302                 .concat(d3_range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
14303                 .concat(d3_range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$2(x % DX) > epsilon$2; }).map(x))
14304                 .concat(d3_range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$2(y % DY) > epsilon$2; }).map(y));
14305           }
14306
14307           graticule.lines = function() {
14308             return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
14309           };
14310
14311           graticule.outline = function() {
14312             return {
14313               type: "Polygon",
14314               coordinates: [
14315                 X(X0).concat(
14316                 Y(Y1).slice(1),
14317                 X(X1).reverse().slice(1),
14318                 Y(Y0).reverse().slice(1))
14319               ]
14320             };
14321           };
14322
14323           graticule.extent = function(_) {
14324             if (!arguments.length) return graticule.extentMinor();
14325             return graticule.extentMajor(_).extentMinor(_);
14326           };
14327
14328           graticule.extentMajor = function(_) {
14329             if (!arguments.length) return [[X0, Y0], [X1, Y1]];
14330             X0 = +_[0][0], X1 = +_[1][0];
14331             Y0 = +_[0][1], Y1 = +_[1][1];
14332             if (X0 > X1) _ = X0, X0 = X1, X1 = _;
14333             if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
14334             return graticule.precision(precision);
14335           };
14336
14337           graticule.extentMinor = function(_) {
14338             if (!arguments.length) return [[x0, y0], [x1, y1]];
14339             x0 = +_[0][0], x1 = +_[1][0];
14340             y0 = +_[0][1], y1 = +_[1][1];
14341             if (x0 > x1) _ = x0, x0 = x1, x1 = _;
14342             if (y0 > y1) _ = y0, y0 = y1, y1 = _;
14343             return graticule.precision(precision);
14344           };
14345
14346           graticule.step = function(_) {
14347             if (!arguments.length) return graticule.stepMinor();
14348             return graticule.stepMajor(_).stepMinor(_);
14349           };
14350
14351           graticule.stepMajor = function(_) {
14352             if (!arguments.length) return [DX, DY];
14353             DX = +_[0], DY = +_[1];
14354             return graticule;
14355           };
14356
14357           graticule.stepMinor = function(_) {
14358             if (!arguments.length) return [dx, dy];
14359             dx = +_[0], dy = +_[1];
14360             return graticule;
14361           };
14362
14363           graticule.precision = function(_) {
14364             if (!arguments.length) return precision;
14365             precision = +_;
14366             x = graticuleX(y0, y1, 90);
14367             y = graticuleY(x0, x1, precision);
14368             X = graticuleX(Y0, Y1, 90);
14369             Y = graticuleY(X0, X1, precision);
14370             return graticule;
14371           };
14372
14373           return graticule
14374               .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])
14375               .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
14376         }
14377
14378         function graticule10() {
14379           return graticule()();
14380         }
14381
14382         function interpolate$1(a, b) {
14383           var x0 = a[0] * radians,
14384               y0 = a[1] * radians,
14385               x1 = b[0] * radians,
14386               y1 = b[1] * radians,
14387               cy0 = cos$1(y0),
14388               sy0 = sin$1(y0),
14389               cy1 = cos$1(y1),
14390               sy1 = sin$1(y1),
14391               kx0 = cy0 * cos$1(x0),
14392               ky0 = cy0 * sin$1(x0),
14393               kx1 = cy1 * cos$1(x1),
14394               ky1 = cy1 * sin$1(x1),
14395               d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
14396               k = sin$1(d);
14397
14398           var interpolate = d ? function(t) {
14399             var B = sin$1(t *= d) / k,
14400                 A = sin$1(d - t) / k,
14401                 x = A * kx0 + B * kx1,
14402                 y = A * ky0 + B * ky1,
14403                 z = A * sy0 + B * sy1;
14404             return [
14405               atan2(y, x) * degrees$1,
14406               atan2(z, sqrt(x * x + y * y)) * degrees$1
14407             ];
14408           } : function() {
14409             return [x0 * degrees$1, y0 * degrees$1];
14410           };
14411
14412           interpolate.distance = d;
14413
14414           return interpolate;
14415         }
14416
14417         function identity$4(x) {
14418           return x;
14419         }
14420
14421         var areaSum$1 = adder(),
14422             areaRingSum$1 = adder(),
14423             x00,
14424             y00,
14425             x0$1,
14426             y0$1;
14427
14428         var areaStream$1 = {
14429           point: noop$4,
14430           lineStart: noop$4,
14431           lineEnd: noop$4,
14432           polygonStart: function() {
14433             areaStream$1.lineStart = areaRingStart$1;
14434             areaStream$1.lineEnd = areaRingEnd$1;
14435           },
14436           polygonEnd: function() {
14437             areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$4;
14438             areaSum$1.add(abs$2(areaRingSum$1));
14439             areaRingSum$1.reset();
14440           },
14441           result: function() {
14442             var area = areaSum$1 / 2;
14443             areaSum$1.reset();
14444             return area;
14445           }
14446         };
14447
14448         function areaRingStart$1() {
14449           areaStream$1.point = areaPointFirst$1;
14450         }
14451
14452         function areaPointFirst$1(x, y) {
14453           areaStream$1.point = areaPoint$1;
14454           x00 = x0$1 = x, y00 = y0$1 = y;
14455         }
14456
14457         function areaPoint$1(x, y) {
14458           areaRingSum$1.add(y0$1 * x - x0$1 * y);
14459           x0$1 = x, y0$1 = y;
14460         }
14461
14462         function areaRingEnd$1() {
14463           areaPoint$1(x00, y00);
14464         }
14465
14466         var x0$2 = Infinity,
14467             y0$2 = x0$2,
14468             x1 = -x0$2,
14469             y1 = x1;
14470
14471         var boundsStream$1 = {
14472           point: boundsPoint$1,
14473           lineStart: noop$4,
14474           lineEnd: noop$4,
14475           polygonStart: noop$4,
14476           polygonEnd: noop$4,
14477           result: function() {
14478             var bounds = [[x0$2, y0$2], [x1, y1]];
14479             x1 = y1 = -(y0$2 = x0$2 = Infinity);
14480             return bounds;
14481           }
14482         };
14483
14484         function boundsPoint$1(x, y) {
14485           if (x < x0$2) x0$2 = x;
14486           if (x > x1) x1 = x;
14487           if (y < y0$2) y0$2 = y;
14488           if (y > y1) y1 = y;
14489         }
14490
14491         // TODO Enforce positive area for exterior, negative area for interior?
14492
14493         var X0$1 = 0,
14494             Y0$1 = 0,
14495             Z0$1 = 0,
14496             X1$1 = 0,
14497             Y1$1 = 0,
14498             Z1$1 = 0,
14499             X2$1 = 0,
14500             Y2$1 = 0,
14501             Z2$1 = 0,
14502             x00$1,
14503             y00$1,
14504             x0$3,
14505             y0$3;
14506
14507         var centroidStream$1 = {
14508           point: centroidPoint$1,
14509           lineStart: centroidLineStart$1,
14510           lineEnd: centroidLineEnd$1,
14511           polygonStart: function() {
14512             centroidStream$1.lineStart = centroidRingStart$1;
14513             centroidStream$1.lineEnd = centroidRingEnd$1;
14514           },
14515           polygonEnd: function() {
14516             centroidStream$1.point = centroidPoint$1;
14517             centroidStream$1.lineStart = centroidLineStart$1;
14518             centroidStream$1.lineEnd = centroidLineEnd$1;
14519           },
14520           result: function() {
14521             var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
14522                 : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
14523                 : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
14524                 : [NaN, NaN];
14525             X0$1 = Y0$1 = Z0$1 =
14526             X1$1 = Y1$1 = Z1$1 =
14527             X2$1 = Y2$1 = Z2$1 = 0;
14528             return centroid;
14529           }
14530         };
14531
14532         function centroidPoint$1(x, y) {
14533           X0$1 += x;
14534           Y0$1 += y;
14535           ++Z0$1;
14536         }
14537
14538         function centroidLineStart$1() {
14539           centroidStream$1.point = centroidPointFirstLine;
14540         }
14541
14542         function centroidPointFirstLine(x, y) {
14543           centroidStream$1.point = centroidPointLine;
14544           centroidPoint$1(x0$3 = x, y0$3 = y);
14545         }
14546
14547         function centroidPointLine(x, y) {
14548           var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
14549           X1$1 += z * (x0$3 + x) / 2;
14550           Y1$1 += z * (y0$3 + y) / 2;
14551           Z1$1 += z;
14552           centroidPoint$1(x0$3 = x, y0$3 = y);
14553         }
14554
14555         function centroidLineEnd$1() {
14556           centroidStream$1.point = centroidPoint$1;
14557         }
14558
14559         function centroidRingStart$1() {
14560           centroidStream$1.point = centroidPointFirstRing;
14561         }
14562
14563         function centroidRingEnd$1() {
14564           centroidPointRing(x00$1, y00$1);
14565         }
14566
14567         function centroidPointFirstRing(x, y) {
14568           centroidStream$1.point = centroidPointRing;
14569           centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
14570         }
14571
14572         function centroidPointRing(x, y) {
14573           var dx = x - x0$3,
14574               dy = y - y0$3,
14575               z = sqrt(dx * dx + dy * dy);
14576
14577           X1$1 += z * (x0$3 + x) / 2;
14578           Y1$1 += z * (y0$3 + y) / 2;
14579           Z1$1 += z;
14580
14581           z = y0$3 * x - x0$3 * y;
14582           X2$1 += z * (x0$3 + x);
14583           Y2$1 += z * (y0$3 + y);
14584           Z2$1 += z * 3;
14585           centroidPoint$1(x0$3 = x, y0$3 = y);
14586         }
14587
14588         function PathContext(context) {
14589           this._context = context;
14590         }
14591
14592         PathContext.prototype = {
14593           _radius: 4.5,
14594           pointRadius: function(_) {
14595             return this._radius = _, this;
14596           },
14597           polygonStart: function() {
14598             this._line = 0;
14599           },
14600           polygonEnd: function() {
14601             this._line = NaN;
14602           },
14603           lineStart: function() {
14604             this._point = 0;
14605           },
14606           lineEnd: function() {
14607             if (this._line === 0) this._context.closePath();
14608             this._point = NaN;
14609           },
14610           point: function(x, y) {
14611             switch (this._point) {
14612               case 0: {
14613                 this._context.moveTo(x, y);
14614                 this._point = 1;
14615                 break;
14616               }
14617               case 1: {
14618                 this._context.lineTo(x, y);
14619                 break;
14620               }
14621               default: {
14622                 this._context.moveTo(x + this._radius, y);
14623                 this._context.arc(x, y, this._radius, 0, tau$3);
14624                 break;
14625               }
14626             }
14627           },
14628           result: noop$4
14629         };
14630
14631         var lengthSum$1 = adder(),
14632             lengthRing,
14633             x00$2,
14634             y00$2,
14635             x0$4,
14636             y0$4;
14637
14638         var lengthStream$1 = {
14639           point: noop$4,
14640           lineStart: function() {
14641             lengthStream$1.point = lengthPointFirst$1;
14642           },
14643           lineEnd: function() {
14644             if (lengthRing) lengthPoint$1(x00$2, y00$2);
14645             lengthStream$1.point = noop$4;
14646           },
14647           polygonStart: function() {
14648             lengthRing = true;
14649           },
14650           polygonEnd: function() {
14651             lengthRing = null;
14652           },
14653           result: function() {
14654             var length = +lengthSum$1;
14655             lengthSum$1.reset();
14656             return length;
14657           }
14658         };
14659
14660         function lengthPointFirst$1(x, y) {
14661           lengthStream$1.point = lengthPoint$1;
14662           x00$2 = x0$4 = x, y00$2 = y0$4 = y;
14663         }
14664
14665         function lengthPoint$1(x, y) {
14666           x0$4 -= x, y0$4 -= y;
14667           lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
14668           x0$4 = x, y0$4 = y;
14669         }
14670
14671         function PathString() {
14672           this._string = [];
14673         }
14674
14675         PathString.prototype = {
14676           _radius: 4.5,
14677           _circle: circle$1(4.5),
14678           pointRadius: function(_) {
14679             if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;
14680             return this;
14681           },
14682           polygonStart: function() {
14683             this._line = 0;
14684           },
14685           polygonEnd: function() {
14686             this._line = NaN;
14687           },
14688           lineStart: function() {
14689             this._point = 0;
14690           },
14691           lineEnd: function() {
14692             if (this._line === 0) this._string.push("Z");
14693             this._point = NaN;
14694           },
14695           point: function(x, y) {
14696             switch (this._point) {
14697               case 0: {
14698                 this._string.push("M", x, ",", y);
14699                 this._point = 1;
14700                 break;
14701               }
14702               case 1: {
14703                 this._string.push("L", x, ",", y);
14704                 break;
14705               }
14706               default: {
14707                 if (this._circle == null) this._circle = circle$1(this._radius);
14708                 this._string.push("M", x, ",", y, this._circle);
14709                 break;
14710               }
14711             }
14712           },
14713           result: function() {
14714             if (this._string.length) {
14715               var result = this._string.join("");
14716               this._string = [];
14717               return result;
14718             } else {
14719               return null;
14720             }
14721           }
14722         };
14723
14724         function circle$1(radius) {
14725           return "m0," + radius
14726               + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
14727               + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
14728               + "z";
14729         }
14730
14731         function d3_geoPath(projection, context) {
14732           var pointRadius = 4.5,
14733               projectionStream,
14734               contextStream;
14735
14736           function path(object) {
14737             if (object) {
14738               if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
14739               d3_geoStream(object, projectionStream(contextStream));
14740             }
14741             return contextStream.result();
14742           }
14743
14744           path.area = function(object) {
14745             d3_geoStream(object, projectionStream(areaStream$1));
14746             return areaStream$1.result();
14747           };
14748
14749           path.measure = function(object) {
14750             d3_geoStream(object, projectionStream(lengthStream$1));
14751             return lengthStream$1.result();
14752           };
14753
14754           path.bounds = function(object) {
14755             d3_geoStream(object, projectionStream(boundsStream$1));
14756             return boundsStream$1.result();
14757           };
14758
14759           path.centroid = function(object) {
14760             d3_geoStream(object, projectionStream(centroidStream$1));
14761             return centroidStream$1.result();
14762           };
14763
14764           path.projection = function(_) {
14765             return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;
14766           };
14767
14768           path.context = function(_) {
14769             if (!arguments.length) return context;
14770             contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
14771             if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
14772             return path;
14773           };
14774
14775           path.pointRadius = function(_) {
14776             if (!arguments.length) return pointRadius;
14777             pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
14778             return path;
14779           };
14780
14781           return path.projection(projection).context(context);
14782         }
14783
14784         function d3_geoTransform(methods) {
14785           return {
14786             stream: transformer(methods)
14787           };
14788         }
14789
14790         function transformer(methods) {
14791           return function(stream) {
14792             var s = new TransformStream;
14793             for (var key in methods) s[key] = methods[key];
14794             s.stream = stream;
14795             return s;
14796           };
14797         }
14798
14799         function TransformStream() {}
14800
14801         TransformStream.prototype = {
14802           constructor: TransformStream,
14803           point: function(x, y) { this.stream.point(x, y); },
14804           sphere: function() { this.stream.sphere(); },
14805           lineStart: function() { this.stream.lineStart(); },
14806           lineEnd: function() { this.stream.lineEnd(); },
14807           polygonStart: function() { this.stream.polygonStart(); },
14808           polygonEnd: function() { this.stream.polygonEnd(); }
14809         };
14810
14811         function fit(projection, fitBounds, object) {
14812           var clip = projection.clipExtent && projection.clipExtent();
14813           projection.scale(150).translate([0, 0]);
14814           if (clip != null) projection.clipExtent(null);
14815           d3_geoStream(object, projection.stream(boundsStream$1));
14816           fitBounds(boundsStream$1.result());
14817           if (clip != null) projection.clipExtent(clip);
14818           return projection;
14819         }
14820
14821         function fitExtent(projection, extent, object) {
14822           return fit(projection, function(b) {
14823             var w = extent[1][0] - extent[0][0],
14824                 h = extent[1][1] - extent[0][1],
14825                 k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
14826                 x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
14827                 y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
14828             projection.scale(150 * k).translate([x, y]);
14829           }, object);
14830         }
14831
14832         function fitSize(projection, size, object) {
14833           return fitExtent(projection, [[0, 0], size], object);
14834         }
14835
14836         function fitWidth(projection, width, object) {
14837           return fit(projection, function(b) {
14838             var w = +width,
14839                 k = w / (b[1][0] - b[0][0]),
14840                 x = (w - k * (b[1][0] + b[0][0])) / 2,
14841                 y = -k * b[0][1];
14842             projection.scale(150 * k).translate([x, y]);
14843           }, object);
14844         }
14845
14846         function fitHeight(projection, height, object) {
14847           return fit(projection, function(b) {
14848             var h = +height,
14849                 k = h / (b[1][1] - b[0][1]),
14850                 x = -k * b[0][0],
14851                 y = (h - k * (b[1][1] + b[0][1])) / 2;
14852             projection.scale(150 * k).translate([x, y]);
14853           }, object);
14854         }
14855
14856         var maxDepth = 16, // maximum depth of subdivision
14857             cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
14858
14859         function resample(project, delta2) {
14860           return +delta2 ? resample$1(project, delta2) : resampleNone(project);
14861         }
14862
14863         function resampleNone(project) {
14864           return transformer({
14865             point: function(x, y) {
14866               x = project(x, y);
14867               this.stream.point(x[0], x[1]);
14868             }
14869           });
14870         }
14871
14872         function resample$1(project, delta2) {
14873
14874           function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
14875             var dx = x1 - x0,
14876                 dy = y1 - y0,
14877                 d2 = dx * dx + dy * dy;
14878             if (d2 > 4 * delta2 && depth--) {
14879               var a = a0 + a1,
14880                   b = b0 + b1,
14881                   c = c0 + c1,
14882                   m = sqrt(a * a + b * b + c * c),
14883                   phi2 = asin(c /= m),
14884                   lambda2 = abs$2(abs$2(c) - 1) < epsilon$2 || abs$2(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
14885                   p = project(lambda2, phi2),
14886                   x2 = p[0],
14887                   y2 = p[1],
14888                   dx2 = x2 - x0,
14889                   dy2 = y2 - y0,
14890                   dz = dy * dx2 - dx * dy2;
14891               if (dz * dz / d2 > delta2 // perpendicular projected distance
14892                   || abs$2((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
14893                   || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
14894                 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
14895                 stream.point(x2, y2);
14896                 resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
14897               }
14898             }
14899           }
14900           return function(stream) {
14901             var lambda00, x00, y00, a00, b00, c00, // first point
14902                 lambda0, x0, y0, a0, b0, c0; // previous point
14903
14904             var resampleStream = {
14905               point: point,
14906               lineStart: lineStart,
14907               lineEnd: lineEnd,
14908               polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
14909               polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
14910             };
14911
14912             function point(x, y) {
14913               x = project(x, y);
14914               stream.point(x[0], x[1]);
14915             }
14916
14917             function lineStart() {
14918               x0 = NaN;
14919               resampleStream.point = linePoint;
14920               stream.lineStart();
14921             }
14922
14923             function linePoint(lambda, phi) {
14924               var c = cartesian([lambda, phi]), p = project(lambda, phi);
14925               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);
14926               stream.point(x0, y0);
14927             }
14928
14929             function lineEnd() {
14930               resampleStream.point = point;
14931               stream.lineEnd();
14932             }
14933
14934             function ringStart() {
14935               lineStart();
14936               resampleStream.point = ringPoint;
14937               resampleStream.lineEnd = ringEnd;
14938             }
14939
14940             function ringPoint(lambda, phi) {
14941               linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
14942               resampleStream.point = linePoint;
14943             }
14944
14945             function ringEnd() {
14946               resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
14947               resampleStream.lineEnd = lineEnd;
14948               lineEnd();
14949             }
14950
14951             return resampleStream;
14952           };
14953         }
14954
14955         var transformRadians = transformer({
14956           point: function(x, y) {
14957             this.stream.point(x * radians, y * radians);
14958           }
14959         });
14960
14961         function transformRotate(rotate) {
14962           return transformer({
14963             point: function(x, y) {
14964               var r = rotate(x, y);
14965               return this.stream.point(r[0], r[1]);
14966             }
14967           });
14968         }
14969
14970         function scaleTranslate(k, dx, dy) {
14971           function transform(x, y) {
14972             return [dx + k * x, dy - k * y];
14973           }
14974           transform.invert = function(x, y) {
14975             return [(x - dx) / k, (dy - y) / k];
14976           };
14977           return transform;
14978         }
14979
14980         function scaleTranslateRotate(k, dx, dy, alpha) {
14981           var cosAlpha = cos$1(alpha),
14982               sinAlpha = sin$1(alpha),
14983               a = cosAlpha * k,
14984               b = sinAlpha * k,
14985               ai = cosAlpha / k,
14986               bi = sinAlpha / k,
14987               ci = (sinAlpha * dy - cosAlpha * dx) / k,
14988               fi = (sinAlpha * dx + cosAlpha * dy) / k;
14989           function transform(x, y) {
14990             return [a * x - b * y + dx, dy - b * x - a * y];
14991           }
14992           transform.invert = function(x, y) {
14993             return [ai * x - bi * y + ci, fi - bi * x - ai * y];
14994           };
14995           return transform;
14996         }
14997
14998         function projection(project) {
14999           return projectionMutator(function() { return project; })();
15000         }
15001
15002         function projectionMutator(projectAt) {
15003           var project,
15004               k = 150, // scale
15005               x = 480, y = 250, // translate
15006               lambda = 0, phi = 0, // center
15007               deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate
15008               alpha = 0, // post-rotate
15009               theta = null, preclip = clipAntimeridian, // pre-clip angle
15010               x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent
15011               delta2 = 0.5, // precision
15012               projectResample,
15013               projectTransform,
15014               projectRotateTransform,
15015               cache,
15016               cacheStream;
15017
15018           function projection(point) {
15019             return projectRotateTransform(point[0] * radians, point[1] * radians);
15020           }
15021
15022           function invert(point) {
15023             point = projectRotateTransform.invert(point[0], point[1]);
15024             return point && [point[0] * degrees$1, point[1] * degrees$1];
15025           }
15026
15027           projection.stream = function(stream) {
15028             return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
15029           };
15030
15031           projection.preclip = function(_) {
15032             return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;
15033           };
15034
15035           projection.postclip = function(_) {
15036             return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
15037           };
15038
15039           projection.clipAngle = function(_) {
15040             return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
15041           };
15042
15043           projection.clipExtent = function(_) {
15044             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]];
15045           };
15046
15047           projection.scale = function(_) {
15048             return arguments.length ? (k = +_, recenter()) : k;
15049           };
15050
15051           projection.translate = function(_) {
15052             return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
15053           };
15054
15055           projection.center = function(_) {
15056             return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
15057           };
15058
15059           projection.rotate = function(_) {
15060             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];
15061           };
15062
15063           projection.angle = function(_) {
15064             return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;
15065           };
15066
15067           projection.precision = function(_) {
15068             return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
15069           };
15070
15071           projection.fitExtent = function(extent, object) {
15072             return fitExtent(projection, extent, object);
15073           };
15074
15075           projection.fitSize = function(size, object) {
15076             return fitSize(projection, size, object);
15077           };
15078
15079           projection.fitWidth = function(width, object) {
15080             return fitWidth(projection, width, object);
15081           };
15082
15083           projection.fitHeight = function(height, object) {
15084             return fitHeight(projection, height, object);
15085           };
15086
15087           function recenter() {
15088             var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),
15089                 transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);
15090             rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
15091             projectTransform = compose(project, transform);
15092             projectRotateTransform = compose(rotate, projectTransform);
15093             projectResample = resample(projectTransform, delta2);
15094             return reset();
15095           }
15096
15097           function reset() {
15098             cache = cacheStream = null;
15099             return projection;
15100           }
15101
15102           return function() {
15103             project = projectAt.apply(this, arguments);
15104             projection.invert = project.invert && invert;
15105             return recenter();
15106           };
15107         }
15108
15109         function conicProjection(projectAt) {
15110           var phi0 = 0,
15111               phi1 = pi$3 / 3,
15112               m = projectionMutator(projectAt),
15113               p = m(phi0, phi1);
15114
15115           p.parallels = function(_) {
15116             return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
15117           };
15118
15119           return p;
15120         }
15121
15122         function cylindricalEqualAreaRaw(phi0) {
15123           var cosPhi0 = cos$1(phi0);
15124
15125           function forward(lambda, phi) {
15126             return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
15127           }
15128
15129           forward.invert = function(x, y) {
15130             return [x / cosPhi0, asin(y * cosPhi0)];
15131           };
15132
15133           return forward;
15134         }
15135
15136         function conicEqualAreaRaw(y0, y1) {
15137           var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
15138
15139           // Are the parallels symmetrical around the Equator?
15140           if (abs$2(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);
15141
15142           var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
15143
15144           function project(x, y) {
15145             var r = sqrt(c - 2 * n * sin$1(y)) / n;
15146             return [r * sin$1(x *= n), r0 - r * cos$1(x)];
15147           }
15148
15149           project.invert = function(x, y) {
15150             var r0y = r0 - y;
15151             return [atan2(x, abs$2(r0y)) / n * sign$2(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
15152           };
15153
15154           return project;
15155         }
15156
15157         function conicEqualArea() {
15158           return conicProjection(conicEqualAreaRaw)
15159               .scale(155.424)
15160               .center([0, 33.6442]);
15161         }
15162
15163         function albers() {
15164           return conicEqualArea()
15165               .parallels([29.5, 45.5])
15166               .scale(1070)
15167               .translate([480, 250])
15168               .rotate([96, 0])
15169               .center([-0.6, 38.7]);
15170         }
15171
15172         // The projections must have mutually exclusive clip regions on the sphere,
15173         // as this will avoid emitting interleaving lines and polygons.
15174         function multiplex(streams) {
15175           var n = streams.length;
15176           return {
15177             point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
15178             sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
15179             lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
15180             lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
15181             polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
15182             polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
15183           };
15184         }
15185
15186         // A composite projection for the United States, configured by default for
15187         // 960×500. The projection also works quite well at 960×600 if you change the
15188         // scale to 1285 and adjust the translate accordingly. The set of standard
15189         // parallels for each region comes from USGS, which is published here:
15190         // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
15191         function albersUsa() {
15192           var cache,
15193               cacheStream,
15194               lower48 = albers(), lower48Point,
15195               alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
15196               hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
15197               point, pointStream = {point: function(x, y) { point = [x, y]; }};
15198
15199           function albersUsa(coordinates) {
15200             var x = coordinates[0], y = coordinates[1];
15201             return point = null,
15202                 (lower48Point.point(x, y), point)
15203                 || (alaskaPoint.point(x, y), point)
15204                 || (hawaiiPoint.point(x, y), point);
15205           }
15206
15207           albersUsa.invert = function(coordinates) {
15208             var k = lower48.scale(),
15209                 t = lower48.translate(),
15210                 x = (coordinates[0] - t[0]) / k,
15211                 y = (coordinates[1] - t[1]) / k;
15212             return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
15213                 : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
15214                 : lower48).invert(coordinates);
15215           };
15216
15217           albersUsa.stream = function(stream) {
15218             return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
15219           };
15220
15221           albersUsa.precision = function(_) {
15222             if (!arguments.length) return lower48.precision();
15223             lower48.precision(_), alaska.precision(_), hawaii.precision(_);
15224             return reset();
15225           };
15226
15227           albersUsa.scale = function(_) {
15228             if (!arguments.length) return lower48.scale();
15229             lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
15230             return albersUsa.translate(lower48.translate());
15231           };
15232
15233           albersUsa.translate = function(_) {
15234             if (!arguments.length) return lower48.translate();
15235             var k = lower48.scale(), x = +_[0], y = +_[1];
15236
15237             lower48Point = lower48
15238                 .translate(_)
15239                 .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
15240                 .stream(pointStream);
15241
15242             alaskaPoint = alaska
15243                 .translate([x - 0.307 * k, y + 0.201 * k])
15244                 .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]])
15245                 .stream(pointStream);
15246
15247             hawaiiPoint = hawaii
15248                 .translate([x - 0.205 * k, y + 0.212 * k])
15249                 .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]])
15250                 .stream(pointStream);
15251
15252             return reset();
15253           };
15254
15255           albersUsa.fitExtent = function(extent, object) {
15256             return fitExtent(albersUsa, extent, object);
15257           };
15258
15259           albersUsa.fitSize = function(size, object) {
15260             return fitSize(albersUsa, size, object);
15261           };
15262
15263           albersUsa.fitWidth = function(width, object) {
15264             return fitWidth(albersUsa, width, object);
15265           };
15266
15267           albersUsa.fitHeight = function(height, object) {
15268             return fitHeight(albersUsa, height, object);
15269           };
15270
15271           function reset() {
15272             cache = cacheStream = null;
15273             return albersUsa;
15274           }
15275
15276           return albersUsa.scale(1070);
15277         }
15278
15279         function azimuthalRaw(scale) {
15280           return function(x, y) {
15281             var cx = cos$1(x),
15282                 cy = cos$1(y),
15283                 k = scale(cx * cy);
15284             return [
15285               k * cy * sin$1(x),
15286               k * sin$1(y)
15287             ];
15288           }
15289         }
15290
15291         function azimuthalInvert(angle) {
15292           return function(x, y) {
15293             var z = sqrt(x * x + y * y),
15294                 c = angle(z),
15295                 sc = sin$1(c),
15296                 cc = cos$1(c);
15297             return [
15298               atan2(x * sc, z * cc),
15299               asin(z && y * sc / z)
15300             ];
15301           }
15302         }
15303
15304         var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
15305           return sqrt(2 / (1 + cxcy));
15306         });
15307
15308         azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
15309           return 2 * asin(z / 2);
15310         });
15311
15312         function azimuthalEqualArea() {
15313           return projection(azimuthalEqualAreaRaw)
15314               .scale(124.75)
15315               .clipAngle(180 - 1e-3);
15316         }
15317
15318         var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
15319           return (c = acos(c)) && c / sin$1(c);
15320         });
15321
15322         azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
15323           return z;
15324         });
15325
15326         function azimuthalEquidistant() {
15327           return projection(azimuthalEquidistantRaw)
15328               .scale(79.4188)
15329               .clipAngle(180 - 1e-3);
15330         }
15331
15332         function mercatorRaw(lambda, phi) {
15333           return [lambda, log(tan((halfPi$2 + phi) / 2))];
15334         }
15335
15336         mercatorRaw.invert = function(x, y) {
15337           return [x, 2 * atan(exp(y)) - halfPi$2];
15338         };
15339
15340         function mercator() {
15341           return mercatorProjection(mercatorRaw)
15342               .scale(961 / tau$3);
15343         }
15344
15345         function mercatorProjection(project) {
15346           var m = projection(project),
15347               center = m.center,
15348               scale = m.scale,
15349               translate = m.translate,
15350               clipExtent = m.clipExtent,
15351               x0 = null, y0, x1, y1; // clip extent
15352
15353           m.scale = function(_) {
15354             return arguments.length ? (scale(_), reclip()) : scale();
15355           };
15356
15357           m.translate = function(_) {
15358             return arguments.length ? (translate(_), reclip()) : translate();
15359           };
15360
15361           m.center = function(_) {
15362             return arguments.length ? (center(_), reclip()) : center();
15363           };
15364
15365           m.clipExtent = function(_) {
15366             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]];
15367           };
15368
15369           function reclip() {
15370             var k = pi$3 * scale(),
15371                 t = m(rotation(m.rotate()).invert([0, 0]));
15372             return clipExtent(x0 == null
15373                 ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
15374                 ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
15375                 : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
15376           }
15377
15378           return reclip();
15379         }
15380
15381         function tany(y) {
15382           return tan((halfPi$2 + y) / 2);
15383         }
15384
15385         function conicConformalRaw(y0, y1) {
15386           var cy0 = cos$1(y0),
15387               n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),
15388               f = cy0 * pow(tany(y0), n) / n;
15389
15390           if (!n) return mercatorRaw;
15391
15392           function project(x, y) {
15393             if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; }
15394             else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; }
15395             var r = f / pow(tany(y), n);
15396             return [r * sin$1(n * x), f - r * cos$1(n * x)];
15397           }
15398
15399           project.invert = function(x, y) {
15400             var fy = f - y, r = sign$2(n) * sqrt(x * x + fy * fy);
15401             return [atan2(x, abs$2(fy)) / n * sign$2(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];
15402           };
15403
15404           return project;
15405         }
15406
15407         function conicConformal() {
15408           return conicProjection(conicConformalRaw)
15409               .scale(109.5)
15410               .parallels([30, 30]);
15411         }
15412
15413         function equirectangularRaw(lambda, phi) {
15414           return [lambda, phi];
15415         }
15416
15417         equirectangularRaw.invert = equirectangularRaw;
15418
15419         function equirectangular() {
15420           return projection(equirectangularRaw)
15421               .scale(152.63);
15422         }
15423
15424         function conicEquidistantRaw(y0, y1) {
15425           var cy0 = cos$1(y0),
15426               n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
15427               g = cy0 / n + y0;
15428
15429           if (abs$2(n) < epsilon$2) return equirectangularRaw;
15430
15431           function project(x, y) {
15432             var gy = g - y, nx = n * x;
15433             return [gy * sin$1(nx), g - gy * cos$1(nx)];
15434           }
15435
15436           project.invert = function(x, y) {
15437             var gy = g - y;
15438             return [atan2(x, abs$2(gy)) / n * sign$2(gy), g - sign$2(n) * sqrt(x * x + gy * gy)];
15439           };
15440
15441           return project;
15442         }
15443
15444         function conicEquidistant() {
15445           return conicProjection(conicEquidistantRaw)
15446               .scale(131.154)
15447               .center([0, 13.9389]);
15448         }
15449
15450         var A1 = 1.340264,
15451             A2 = -0.081106,
15452             A3 = 0.000893,
15453             A4 = 0.003796,
15454             M = sqrt(3) / 2,
15455             iterations = 12;
15456
15457         function equalEarthRaw(lambda, phi) {
15458           var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;
15459           return [
15460             lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),
15461             l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))
15462           ];
15463         }
15464
15465         equalEarthRaw.invert = function(x, y) {
15466           var l = y, l2 = l * l, l6 = l2 * l2 * l2;
15467           for (var i = 0, delta, fy, fpy; i < iterations; ++i) {
15468             fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;
15469             fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);
15470             l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;
15471             if (abs$2(delta) < epsilon2$1) break;
15472           }
15473           return [
15474             M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),
15475             asin(sin$1(l) / M)
15476           ];
15477         };
15478
15479         function equalEarth() {
15480           return projection(equalEarthRaw)
15481               .scale(177.158);
15482         }
15483
15484         function gnomonicRaw(x, y) {
15485           var cy = cos$1(y), k = cos$1(x) * cy;
15486           return [cy * sin$1(x) / k, sin$1(y) / k];
15487         }
15488
15489         gnomonicRaw.invert = azimuthalInvert(atan);
15490
15491         function gnomonic() {
15492           return projection(gnomonicRaw)
15493               .scale(144.049)
15494               .clipAngle(60);
15495         }
15496
15497         function scaleTranslate$1(kx, ky, tx, ty) {
15498           return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({
15499             point: function(x, y) {
15500               this.stream.point(x * kx + tx, y * ky + ty);
15501             }
15502           });
15503         }
15504
15505         function d3_geoIdentity() {
15506           var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
15507               x0 = null, y0, x1, y1, // clip extent
15508               postclip = identity$4,
15509               cache,
15510               cacheStream,
15511               projection;
15512
15513           function reset() {
15514             cache = cacheStream = null;
15515             return projection;
15516           }
15517
15518           return projection = {
15519             stream: function(stream) {
15520               return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));
15521             },
15522             postclip: function(_) {
15523               return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
15524             },
15525             clipExtent: function(_) {
15526               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]];
15527             },
15528             scale: function(_) {
15529               return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;
15530             },
15531             translate: function(_) {
15532               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
15533             },
15534             reflectX: function(_) {
15535               return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
15536             },
15537             reflectY: function(_) {
15538               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
15539             },
15540             fitExtent: function(extent, object) {
15541               return fitExtent(projection, extent, object);
15542             },
15543             fitSize: function(size, object) {
15544               return fitSize(projection, size, object);
15545             },
15546             fitWidth: function(width, object) {
15547               return fitWidth(projection, width, object);
15548             },
15549             fitHeight: function(height, object) {
15550               return fitHeight(projection, height, object);
15551             }
15552           };
15553         }
15554
15555         function naturalEarth1Raw(lambda, phi) {
15556           var phi2 = phi * phi, phi4 = phi2 * phi2;
15557           return [
15558             lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
15559             phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
15560           ];
15561         }
15562
15563         naturalEarth1Raw.invert = function(x, y) {
15564           var phi = y, i = 25, delta;
15565           do {
15566             var phi2 = phi * phi, phi4 = phi2 * phi2;
15567             phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
15568                 (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
15569           } while (abs$2(delta) > epsilon$2 && --i > 0);
15570           return [
15571             x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
15572             phi
15573           ];
15574         };
15575
15576         function naturalEarth1() {
15577           return projection(naturalEarth1Raw)
15578               .scale(175.295);
15579         }
15580
15581         function orthographicRaw(x, y) {
15582           return [cos$1(y) * sin$1(x), sin$1(y)];
15583         }
15584
15585         orthographicRaw.invert = azimuthalInvert(asin);
15586
15587         function orthographic() {
15588           return projection(orthographicRaw)
15589               .scale(249.5)
15590               .clipAngle(90 + epsilon$2);
15591         }
15592
15593         function stereographicRaw(x, y) {
15594           var cy = cos$1(y), k = 1 + cos$1(x) * cy;
15595           return [cy * sin$1(x) / k, sin$1(y) / k];
15596         }
15597
15598         stereographicRaw.invert = azimuthalInvert(function(z) {
15599           return 2 * atan(z);
15600         });
15601
15602         function stereographic() {
15603           return projection(stereographicRaw)
15604               .scale(250)
15605               .clipAngle(142);
15606         }
15607
15608         function transverseMercatorRaw(lambda, phi) {
15609           return [log(tan((halfPi$2 + phi) / 2)), -lambda];
15610         }
15611
15612         transverseMercatorRaw.invert = function(x, y) {
15613           return [-y, 2 * atan(exp(x)) - halfPi$2];
15614         };
15615
15616         function transverseMercator() {
15617           var m = mercatorProjection(transverseMercatorRaw),
15618               center = m.center,
15619               rotate = m.rotate;
15620
15621           m.center = function(_) {
15622             return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
15623           };
15624
15625           m.rotate = function(_) {
15626             return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
15627           };
15628
15629           return rotate([0, 0, 90])
15630               .scale(159.155);
15631         }
15632
15633         function defaultSeparation(a, b) {
15634           return a.parent === b.parent ? 1 : 2;
15635         }
15636
15637         function meanX(children) {
15638           return children.reduce(meanXReduce, 0) / children.length;
15639         }
15640
15641         function meanXReduce(x, c) {
15642           return x + c.x;
15643         }
15644
15645         function maxY(children) {
15646           return 1 + children.reduce(maxYReduce, 0);
15647         }
15648
15649         function maxYReduce(y, c) {
15650           return Math.max(y, c.y);
15651         }
15652
15653         function leafLeft(node) {
15654           var children;
15655           while (children = node.children) node = children[0];
15656           return node;
15657         }
15658
15659         function leafRight(node) {
15660           var children;
15661           while (children = node.children) node = children[children.length - 1];
15662           return node;
15663         }
15664
15665         function cluster() {
15666           var separation = defaultSeparation,
15667               dx = 1,
15668               dy = 1,
15669               nodeSize = false;
15670
15671           function cluster(root) {
15672             var previousNode,
15673                 x = 0;
15674
15675             // First walk, computing the initial x & y values.
15676             root.eachAfter(function(node) {
15677               var children = node.children;
15678               if (children) {
15679                 node.x = meanX(children);
15680                 node.y = maxY(children);
15681               } else {
15682                 node.x = previousNode ? x += separation(node, previousNode) : 0;
15683                 node.y = 0;
15684                 previousNode = node;
15685               }
15686             });
15687
15688             var left = leafLeft(root),
15689                 right = leafRight(root),
15690                 x0 = left.x - separation(left, right) / 2,
15691                 x1 = right.x + separation(right, left) / 2;
15692
15693             // Second walk, normalizing x & y to the desired size.
15694             return root.eachAfter(nodeSize ? function(node) {
15695               node.x = (node.x - root.x) * dx;
15696               node.y = (root.y - node.y) * dy;
15697             } : function(node) {
15698               node.x = (node.x - x0) / (x1 - x0) * dx;
15699               node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
15700             });
15701           }
15702
15703           cluster.separation = function(x) {
15704             return arguments.length ? (separation = x, cluster) : separation;
15705           };
15706
15707           cluster.size = function(x) {
15708             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
15709           };
15710
15711           cluster.nodeSize = function(x) {
15712             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
15713           };
15714
15715           return cluster;
15716         }
15717
15718         function count(node) {
15719           var sum = 0,
15720               children = node.children,
15721               i = children && children.length;
15722           if (!i) sum = 1;
15723           else while (--i >= 0) sum += children[i].value;
15724           node.value = sum;
15725         }
15726
15727         function node_count() {
15728           return this.eachAfter(count);
15729         }
15730
15731         function node_each(callback) {
15732           var node = this, current, next = [node], children, i, n;
15733           do {
15734             current = next.reverse(), next = [];
15735             while (node = current.pop()) {
15736               callback(node), children = node.children;
15737               if (children) for (i = 0, n = children.length; i < n; ++i) {
15738                 next.push(children[i]);
15739               }
15740             }
15741           } while (next.length);
15742           return this;
15743         }
15744
15745         function node_eachBefore(callback) {
15746           var node = this, nodes = [node], children, i;
15747           while (node = nodes.pop()) {
15748             callback(node), children = node.children;
15749             if (children) for (i = children.length - 1; i >= 0; --i) {
15750               nodes.push(children[i]);
15751             }
15752           }
15753           return this;
15754         }
15755
15756         function node_eachAfter(callback) {
15757           var node = this, nodes = [node], next = [], children, i, n;
15758           while (node = nodes.pop()) {
15759             next.push(node), children = node.children;
15760             if (children) for (i = 0, n = children.length; i < n; ++i) {
15761               nodes.push(children[i]);
15762             }
15763           }
15764           while (node = next.pop()) {
15765             callback(node);
15766           }
15767           return this;
15768         }
15769
15770         function node_sum(value) {
15771           return this.eachAfter(function(node) {
15772             var sum = +value(node.data) || 0,
15773                 children = node.children,
15774                 i = children && children.length;
15775             while (--i >= 0) sum += children[i].value;
15776             node.value = sum;
15777           });
15778         }
15779
15780         function node_sort(compare) {
15781           return this.eachBefore(function(node) {
15782             if (node.children) {
15783               node.children.sort(compare);
15784             }
15785           });
15786         }
15787
15788         function node_path(end) {
15789           var start = this,
15790               ancestor = leastCommonAncestor(start, end),
15791               nodes = [start];
15792           while (start !== ancestor) {
15793             start = start.parent;
15794             nodes.push(start);
15795           }
15796           var k = nodes.length;
15797           while (end !== ancestor) {
15798             nodes.splice(k, 0, end);
15799             end = end.parent;
15800           }
15801           return nodes;
15802         }
15803
15804         function leastCommonAncestor(a, b) {
15805           if (a === b) return a;
15806           var aNodes = a.ancestors(),
15807               bNodes = b.ancestors(),
15808               c = null;
15809           a = aNodes.pop();
15810           b = bNodes.pop();
15811           while (a === b) {
15812             c = a;
15813             a = aNodes.pop();
15814             b = bNodes.pop();
15815           }
15816           return c;
15817         }
15818
15819         function node_ancestors() {
15820           var node = this, nodes = [node];
15821           while (node = node.parent) {
15822             nodes.push(node);
15823           }
15824           return nodes;
15825         }
15826
15827         function node_descendants() {
15828           var nodes = [];
15829           this.each(function(node) {
15830             nodes.push(node);
15831           });
15832           return nodes;
15833         }
15834
15835         function node_leaves() {
15836           var leaves = [];
15837           this.eachBefore(function(node) {
15838             if (!node.children) {
15839               leaves.push(node);
15840             }
15841           });
15842           return leaves;
15843         }
15844
15845         function node_links() {
15846           var root = this, links = [];
15847           root.each(function(node) {
15848             if (node !== root) { // Don’t include the root’s parent, if any.
15849               links.push({source: node.parent, target: node});
15850             }
15851           });
15852           return links;
15853         }
15854
15855         function hierarchy(data, children) {
15856           var root = new Node(data),
15857               valued = +data.value && (root.value = data.value),
15858               node,
15859               nodes = [root],
15860               child,
15861               childs,
15862               i,
15863               n;
15864
15865           if (children == null) children = defaultChildren;
15866
15867           while (node = nodes.pop()) {
15868             if (valued) node.value = +node.data.value;
15869             if ((childs = children(node.data)) && (n = childs.length)) {
15870               node.children = new Array(n);
15871               for (i = n - 1; i >= 0; --i) {
15872                 nodes.push(child = node.children[i] = new Node(childs[i]));
15873                 child.parent = node;
15874                 child.depth = node.depth + 1;
15875               }
15876             }
15877           }
15878
15879           return root.eachBefore(computeHeight);
15880         }
15881
15882         function node_copy() {
15883           return hierarchy(this).eachBefore(copyData);
15884         }
15885
15886         function defaultChildren(d) {
15887           return d.children;
15888         }
15889
15890         function copyData(node) {
15891           node.data = node.data.data;
15892         }
15893
15894         function computeHeight(node) {
15895           var height = 0;
15896           do node.height = height;
15897           while ((node = node.parent) && (node.height < ++height));
15898         }
15899
15900         function Node(data) {
15901           this.data = data;
15902           this.depth =
15903           this.height = 0;
15904           this.parent = null;
15905         }
15906
15907         Node.prototype = hierarchy.prototype = {
15908           constructor: Node,
15909           count: node_count,
15910           each: node_each,
15911           eachAfter: node_eachAfter,
15912           eachBefore: node_eachBefore,
15913           sum: node_sum,
15914           sort: node_sort,
15915           path: node_path,
15916           ancestors: node_ancestors,
15917           descendants: node_descendants,
15918           leaves: node_leaves,
15919           links: node_links,
15920           copy: node_copy
15921         };
15922
15923         var slice$8 = Array.prototype.slice;
15924
15925         function shuffle$1(array) {
15926           var m = array.length,
15927               t,
15928               i;
15929
15930           while (m) {
15931             i = Math.random() * m-- | 0;
15932             t = array[m];
15933             array[m] = array[i];
15934             array[i] = t;
15935           }
15936
15937           return array;
15938         }
15939
15940         function enclose(circles) {
15941           var i = 0, n = (circles = shuffle$1(slice$8.call(circles))).length, B = [], p, e;
15942
15943           while (i < n) {
15944             p = circles[i];
15945             if (e && enclosesWeak(e, p)) ++i;
15946             else e = encloseBasis(B = extendBasis(B, p)), i = 0;
15947           }
15948
15949           return e;
15950         }
15951
15952         function extendBasis(B, p) {
15953           var i, j;
15954
15955           if (enclosesWeakAll(p, B)) return [p];
15956
15957           // If we get here then B must have at least one element.
15958           for (i = 0; i < B.length; ++i) {
15959             if (enclosesNot(p, B[i])
15960                 && enclosesWeakAll(encloseBasis2(B[i], p), B)) {
15961               return [B[i], p];
15962             }
15963           }
15964
15965           // If we get here then B must have at least two elements.
15966           for (i = 0; i < B.length - 1; ++i) {
15967             for (j = i + 1; j < B.length; ++j) {
15968               if (enclosesNot(encloseBasis2(B[i], B[j]), p)
15969                   && enclosesNot(encloseBasis2(B[i], p), B[j])
15970                   && enclosesNot(encloseBasis2(B[j], p), B[i])
15971                   && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {
15972                 return [B[i], B[j], p];
15973               }
15974             }
15975           }
15976
15977           // If we get here then something is very wrong.
15978           throw new Error;
15979         }
15980
15981         function enclosesNot(a, b) {
15982           var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;
15983           return dr < 0 || dr * dr < dx * dx + dy * dy;
15984         }
15985
15986         function enclosesWeak(a, b) {
15987           var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;
15988           return dr > 0 && dr * dr > dx * dx + dy * dy;
15989         }
15990
15991         function enclosesWeakAll(a, B) {
15992           for (var i = 0; i < B.length; ++i) {
15993             if (!enclosesWeak(a, B[i])) {
15994               return false;
15995             }
15996           }
15997           return true;
15998         }
15999
16000         function encloseBasis(B) {
16001           switch (B.length) {
16002             case 1: return encloseBasis1(B[0]);
16003             case 2: return encloseBasis2(B[0], B[1]);
16004             case 3: return encloseBasis3(B[0], B[1], B[2]);
16005           }
16006         }
16007
16008         function encloseBasis1(a) {
16009           return {
16010             x: a.x,
16011             y: a.y,
16012             r: a.r
16013           };
16014         }
16015
16016         function encloseBasis2(a, b) {
16017           var x1 = a.x, y1 = a.y, r1 = a.r,
16018               x2 = b.x, y2 = b.y, r2 = b.r,
16019               x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
16020               l = Math.sqrt(x21 * x21 + y21 * y21);
16021           return {
16022             x: (x1 + x2 + x21 / l * r21) / 2,
16023             y: (y1 + y2 + y21 / l * r21) / 2,
16024             r: (l + r1 + r2) / 2
16025           };
16026         }
16027
16028         function encloseBasis3(a, b, c) {
16029           var x1 = a.x, y1 = a.y, r1 = a.r,
16030               x2 = b.x, y2 = b.y, r2 = b.r,
16031               x3 = c.x, y3 = c.y, r3 = c.r,
16032               a2 = x1 - x2,
16033               a3 = x1 - x3,
16034               b2 = y1 - y2,
16035               b3 = y1 - y3,
16036               c2 = r2 - r1,
16037               c3 = r3 - r1,
16038               d1 = x1 * x1 + y1 * y1 - r1 * r1,
16039               d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,
16040               d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,
16041               ab = a3 * b2 - a2 * b3,
16042               xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,
16043               xb = (b3 * c2 - b2 * c3) / ab,
16044               ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,
16045               yb = (a2 * c3 - a3 * c2) / ab,
16046               A = xb * xb + yb * yb - 1,
16047               B = 2 * (r1 + xa * xb + ya * yb),
16048               C = xa * xa + ya * ya - r1 * r1,
16049               r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
16050           return {
16051             x: x1 + xa + xb * r,
16052             y: y1 + ya + yb * r,
16053             r: r
16054           };
16055         }
16056
16057         function place(b, a, c) {
16058           var dx = b.x - a.x, x, a2,
16059               dy = b.y - a.y, y, b2,
16060               d2 = dx * dx + dy * dy;
16061           if (d2) {
16062             a2 = a.r + c.r, a2 *= a2;
16063             b2 = b.r + c.r, b2 *= b2;
16064             if (a2 > b2) {
16065               x = (d2 + b2 - a2) / (2 * d2);
16066               y = Math.sqrt(Math.max(0, b2 / d2 - x * x));
16067               c.x = b.x - x * dx - y * dy;
16068               c.y = b.y - x * dy + y * dx;
16069             } else {
16070               x = (d2 + a2 - b2) / (2 * d2);
16071               y = Math.sqrt(Math.max(0, a2 / d2 - x * x));
16072               c.x = a.x + x * dx - y * dy;
16073               c.y = a.y + x * dy + y * dx;
16074             }
16075           } else {
16076             c.x = a.x + c.r;
16077             c.y = a.y;
16078           }
16079         }
16080
16081         function intersects(a, b) {
16082           var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;
16083           return dr > 0 && dr * dr > dx * dx + dy * dy;
16084         }
16085
16086         function score(node) {
16087           var a = node._,
16088               b = node.next._,
16089               ab = a.r + b.r,
16090               dx = (a.x * b.r + b.x * a.r) / ab,
16091               dy = (a.y * b.r + b.y * a.r) / ab;
16092           return dx * dx + dy * dy;
16093         }
16094
16095         function Node$1(circle) {
16096           this._ = circle;
16097           this.next = null;
16098           this.previous = null;
16099         }
16100
16101         function packEnclose(circles) {
16102           if (!(n = circles.length)) return 0;
16103
16104           var a, b, c, n, aa, ca, i, j, k, sj, sk;
16105
16106           // Place the first circle.
16107           a = circles[0], a.x = 0, a.y = 0;
16108           if (!(n > 1)) return a.r;
16109
16110           // Place the second circle.
16111           b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
16112           if (!(n > 2)) return a.r + b.r;
16113
16114           // Place the third circle.
16115           place(b, a, c = circles[2]);
16116
16117           // Initialize the front-chain using the first three circles a, b and c.
16118           a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
16119           a.next = c.previous = b;
16120           b.next = a.previous = c;
16121           c.next = b.previous = a;
16122
16123           // Attempt to place each remaining circle…
16124           pack: for (i = 3; i < n; ++i) {
16125             place(a._, b._, c = circles[i]), c = new Node$1(c);
16126
16127             // Find the closest intersecting circle on the front-chain, if any.
16128             // “Closeness” is determined by linear distance along the front-chain.
16129             // “Ahead” or “behind” is likewise determined by linear distance.
16130             j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
16131             do {
16132               if (sj <= sk) {
16133                 if (intersects(j._, c._)) {
16134                   b = j, a.next = b, b.previous = a, --i;
16135                   continue pack;
16136                 }
16137                 sj += j._.r, j = j.next;
16138               } else {
16139                 if (intersects(k._, c._)) {
16140                   a = k, a.next = b, b.previous = a, --i;
16141                   continue pack;
16142                 }
16143                 sk += k._.r, k = k.previous;
16144               }
16145             } while (j !== k.next);
16146
16147             // Success! Insert the new circle c between a and b.
16148             c.previous = a, c.next = b, a.next = b.previous = b = c;
16149
16150             // Compute the new closest circle pair to the centroid.
16151             aa = score(a);
16152             while ((c = c.next) !== b) {
16153               if ((ca = score(c)) < aa) {
16154                 a = c, aa = ca;
16155               }
16156             }
16157             b = a.next;
16158           }
16159
16160           // Compute the enclosing circle of the front chain.
16161           a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
16162
16163           // Translate the circles to put the enclosing circle around the origin.
16164           for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
16165
16166           return c.r;
16167         }
16168
16169         function siblings(circles) {
16170           packEnclose(circles);
16171           return circles;
16172         }
16173
16174         function optional(f) {
16175           return f == null ? null : required(f);
16176         }
16177
16178         function required(f) {
16179           if (typeof f !== "function") throw new Error;
16180           return f;
16181         }
16182
16183         function constantZero() {
16184           return 0;
16185         }
16186
16187         function constant$9(x) {
16188           return function() {
16189             return x;
16190           };
16191         }
16192
16193         function defaultRadius$1(d) {
16194           return Math.sqrt(d.value);
16195         }
16196
16197         function index$1() {
16198           var radius = null,
16199               dx = 1,
16200               dy = 1,
16201               padding = constantZero;
16202
16203           function pack(root) {
16204             root.x = dx / 2, root.y = dy / 2;
16205             if (radius) {
16206               root.eachBefore(radiusLeaf(radius))
16207                   .eachAfter(packChildren(padding, 0.5))
16208                   .eachBefore(translateChild(1));
16209             } else {
16210               root.eachBefore(radiusLeaf(defaultRadius$1))
16211                   .eachAfter(packChildren(constantZero, 1))
16212                   .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
16213                   .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
16214             }
16215             return root;
16216           }
16217
16218           pack.radius = function(x) {
16219             return arguments.length ? (radius = optional(x), pack) : radius;
16220           };
16221
16222           pack.size = function(x) {
16223             return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
16224           };
16225
16226           pack.padding = function(x) {
16227             return arguments.length ? (padding = typeof x === "function" ? x : constant$9(+x), pack) : padding;
16228           };
16229
16230           return pack;
16231         }
16232
16233         function radiusLeaf(radius) {
16234           return function(node) {
16235             if (!node.children) {
16236               node.r = Math.max(0, +radius(node) || 0);
16237             }
16238           };
16239         }
16240
16241         function packChildren(padding, k) {
16242           return function(node) {
16243             if (children = node.children) {
16244               var children,
16245                   i,
16246                   n = children.length,
16247                   r = padding(node) * k || 0,
16248                   e;
16249
16250               if (r) for (i = 0; i < n; ++i) children[i].r += r;
16251               e = packEnclose(children);
16252               if (r) for (i = 0; i < n; ++i) children[i].r -= r;
16253               node.r = e + r;
16254             }
16255           };
16256         }
16257
16258         function translateChild(k) {
16259           return function(node) {
16260             var parent = node.parent;
16261             node.r *= k;
16262             if (parent) {
16263               node.x = parent.x + k * node.x;
16264               node.y = parent.y + k * node.y;
16265             }
16266           };
16267         }
16268
16269         function roundNode(node) {
16270           node.x0 = Math.round(node.x0);
16271           node.y0 = Math.round(node.y0);
16272           node.x1 = Math.round(node.x1);
16273           node.y1 = Math.round(node.y1);
16274         }
16275
16276         function treemapDice(parent, x0, y0, x1, y1) {
16277           var nodes = parent.children,
16278               node,
16279               i = -1,
16280               n = nodes.length,
16281               k = parent.value && (x1 - x0) / parent.value;
16282
16283           while (++i < n) {
16284             node = nodes[i], node.y0 = y0, node.y1 = y1;
16285             node.x0 = x0, node.x1 = x0 += node.value * k;
16286           }
16287         }
16288
16289         function partition() {
16290           var dx = 1,
16291               dy = 1,
16292               padding = 0,
16293               round = false;
16294
16295           function partition(root) {
16296             var n = root.height + 1;
16297             root.x0 =
16298             root.y0 = padding;
16299             root.x1 = dx;
16300             root.y1 = dy / n;
16301             root.eachBefore(positionNode(dy, n));
16302             if (round) root.eachBefore(roundNode);
16303             return root;
16304           }
16305
16306           function positionNode(dy, n) {
16307             return function(node) {
16308               if (node.children) {
16309                 treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
16310               }
16311               var x0 = node.x0,
16312                   y0 = node.y0,
16313                   x1 = node.x1 - padding,
16314                   y1 = node.y1 - padding;
16315               if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
16316               if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
16317               node.x0 = x0;
16318               node.y0 = y0;
16319               node.x1 = x1;
16320               node.y1 = y1;
16321             };
16322           }
16323
16324           partition.round = function(x) {
16325             return arguments.length ? (round = !!x, partition) : round;
16326           };
16327
16328           partition.size = function(x) {
16329             return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
16330           };
16331
16332           partition.padding = function(x) {
16333             return arguments.length ? (padding = +x, partition) : padding;
16334           };
16335
16336           return partition;
16337         }
16338
16339         var keyPrefix$1 = "$", // Protect against keys like “__proto__”.
16340             preroot = {depth: -1},
16341             ambiguous = {};
16342
16343         function defaultId(d) {
16344           return d.id;
16345         }
16346
16347         function defaultParentId(d) {
16348           return d.parentId;
16349         }
16350
16351         function stratify() {
16352           var id = defaultId,
16353               parentId = defaultParentId;
16354
16355           function stratify(data) {
16356             var d,
16357                 i,
16358                 n = data.length,
16359                 root,
16360                 parent,
16361                 node,
16362                 nodes = new Array(n),
16363                 nodeId,
16364                 nodeKey,
16365                 nodeByKey = {};
16366
16367             for (i = 0; i < n; ++i) {
16368               d = data[i], node = nodes[i] = new Node(d);
16369               if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
16370                 nodeKey = keyPrefix$1 + (node.id = nodeId);
16371                 nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
16372               }
16373             }
16374
16375             for (i = 0; i < n; ++i) {
16376               node = nodes[i], nodeId = parentId(data[i], i, data);
16377               if (nodeId == null || !(nodeId += "")) {
16378                 if (root) throw new Error("multiple roots");
16379                 root = node;
16380               } else {
16381                 parent = nodeByKey[keyPrefix$1 + nodeId];
16382                 if (!parent) throw new Error("missing: " + nodeId);
16383                 if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
16384                 if (parent.children) parent.children.push(node);
16385                 else parent.children = [node];
16386                 node.parent = parent;
16387               }
16388             }
16389
16390             if (!root) throw new Error("no root");
16391             root.parent = preroot;
16392             root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
16393             root.parent = null;
16394             if (n > 0) throw new Error("cycle");
16395
16396             return root;
16397           }
16398
16399           stratify.id = function(x) {
16400             return arguments.length ? (id = required(x), stratify) : id;
16401           };
16402
16403           stratify.parentId = function(x) {
16404             return arguments.length ? (parentId = required(x), stratify) : parentId;
16405           };
16406
16407           return stratify;
16408         }
16409
16410         function defaultSeparation$1(a, b) {
16411           return a.parent === b.parent ? 1 : 2;
16412         }
16413
16414         // function radialSeparation(a, b) {
16415         //   return (a.parent === b.parent ? 1 : 2) / a.depth;
16416         // }
16417
16418         // This function is used to traverse the left contour of a subtree (or
16419         // subforest). It returns the successor of v on this contour. This successor is
16420         // either given by the leftmost child of v or by the thread of v. The function
16421         // returns null if and only if v is on the highest level of its subtree.
16422         function nextLeft(v) {
16423           var children = v.children;
16424           return children ? children[0] : v.t;
16425         }
16426
16427         // This function works analogously to nextLeft.
16428         function nextRight(v) {
16429           var children = v.children;
16430           return children ? children[children.length - 1] : v.t;
16431         }
16432
16433         // Shifts the current subtree rooted at w+. This is done by increasing
16434         // prelim(w+) and mod(w+) by shift.
16435         function moveSubtree(wm, wp, shift) {
16436           var change = shift / (wp.i - wm.i);
16437           wp.c -= change;
16438           wp.s += shift;
16439           wm.c += change;
16440           wp.z += shift;
16441           wp.m += shift;
16442         }
16443
16444         // All other shifts, applied to the smaller subtrees between w- and w+, are
16445         // performed by this function. To prepare the shifts, we have to adjust
16446         // change(w+), shift(w+), and change(w-).
16447         function executeShifts(v) {
16448           var shift = 0,
16449               change = 0,
16450               children = v.children,
16451               i = children.length,
16452               w;
16453           while (--i >= 0) {
16454             w = children[i];
16455             w.z += shift;
16456             w.m += shift;
16457             shift += w.s + (change += w.c);
16458           }
16459         }
16460
16461         // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
16462         // returns the specified (default) ancestor.
16463         function nextAncestor(vim, v, ancestor) {
16464           return vim.a.parent === v.parent ? vim.a : ancestor;
16465         }
16466
16467         function TreeNode(node, i) {
16468           this._ = node;
16469           this.parent = null;
16470           this.children = null;
16471           this.A = null; // default ancestor
16472           this.a = this; // ancestor
16473           this.z = 0; // prelim
16474           this.m = 0; // mod
16475           this.c = 0; // change
16476           this.s = 0; // shift
16477           this.t = null; // thread
16478           this.i = i; // number
16479         }
16480
16481         TreeNode.prototype = Object.create(Node.prototype);
16482
16483         function treeRoot(root) {
16484           var tree = new TreeNode(root, 0),
16485               node,
16486               nodes = [tree],
16487               child,
16488               children,
16489               i,
16490               n;
16491
16492           while (node = nodes.pop()) {
16493             if (children = node._.children) {
16494               node.children = new Array(n = children.length);
16495               for (i = n - 1; i >= 0; --i) {
16496                 nodes.push(child = node.children[i] = new TreeNode(children[i], i));
16497                 child.parent = node;
16498               }
16499             }
16500           }
16501
16502           (tree.parent = new TreeNode(null, 0)).children = [tree];
16503           return tree;
16504         }
16505
16506         // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
16507         function tree() {
16508           var separation = defaultSeparation$1,
16509               dx = 1,
16510               dy = 1,
16511               nodeSize = null;
16512
16513           function tree(root) {
16514             var t = treeRoot(root);
16515
16516             // Compute the layout using Buchheim et al.’s algorithm.
16517             t.eachAfter(firstWalk), t.parent.m = -t.z;
16518             t.eachBefore(secondWalk);
16519
16520             // If a fixed node size is specified, scale x and y.
16521             if (nodeSize) root.eachBefore(sizeNode);
16522
16523             // If a fixed tree size is specified, scale x and y based on the extent.
16524             // Compute the left-most, right-most, and depth-most nodes for extents.
16525             else {
16526               var left = root,
16527                   right = root,
16528                   bottom = root;
16529               root.eachBefore(function(node) {
16530                 if (node.x < left.x) left = node;
16531                 if (node.x > right.x) right = node;
16532                 if (node.depth > bottom.depth) bottom = node;
16533               });
16534               var s = left === right ? 1 : separation(left, right) / 2,
16535                   tx = s - left.x,
16536                   kx = dx / (right.x + s + tx),
16537                   ky = dy / (bottom.depth || 1);
16538               root.eachBefore(function(node) {
16539                 node.x = (node.x + tx) * kx;
16540                 node.y = node.depth * ky;
16541               });
16542             }
16543
16544             return root;
16545           }
16546
16547           // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
16548           // applied recursively to the children of v, as well as the function
16549           // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
16550           // node v is placed to the midpoint of its outermost children.
16551           function firstWalk(v) {
16552             var children = v.children,
16553                 siblings = v.parent.children,
16554                 w = v.i ? siblings[v.i - 1] : null;
16555             if (children) {
16556               executeShifts(v);
16557               var midpoint = (children[0].z + children[children.length - 1].z) / 2;
16558               if (w) {
16559                 v.z = w.z + separation(v._, w._);
16560                 v.m = v.z - midpoint;
16561               } else {
16562                 v.z = midpoint;
16563               }
16564             } else if (w) {
16565               v.z = w.z + separation(v._, w._);
16566             }
16567             v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
16568           }
16569
16570           // Computes all real x-coordinates by summing up the modifiers recursively.
16571           function secondWalk(v) {
16572             v._.x = v.z + v.parent.m;
16573             v.m += v.parent.m;
16574           }
16575
16576           // The core of the algorithm. Here, a new subtree is combined with the
16577           // previous subtrees. Threads are used to traverse the inside and outside
16578           // contours of the left and right subtree up to the highest common level. The
16579           // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
16580           // superscript o means outside and i means inside, the subscript - means left
16581           // subtree and + means right subtree. For summing up the modifiers along the
16582           // contour, we use respective variables si+, si-, so-, and so+. Whenever two
16583           // nodes of the inside contours conflict, we compute the left one of the
16584           // greatest uncommon ancestors using the function ANCESTOR and call MOVE
16585           // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
16586           // Finally, we add a new thread (if necessary).
16587           function apportion(v, w, ancestor) {
16588             if (w) {
16589               var vip = v,
16590                   vop = v,
16591                   vim = w,
16592                   vom = vip.parent.children[0],
16593                   sip = vip.m,
16594                   sop = vop.m,
16595                   sim = vim.m,
16596                   som = vom.m,
16597                   shift;
16598               while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
16599                 vom = nextLeft(vom);
16600                 vop = nextRight(vop);
16601                 vop.a = v;
16602                 shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
16603                 if (shift > 0) {
16604                   moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
16605                   sip += shift;
16606                   sop += shift;
16607                 }
16608                 sim += vim.m;
16609                 sip += vip.m;
16610                 som += vom.m;
16611                 sop += vop.m;
16612               }
16613               if (vim && !nextRight(vop)) {
16614                 vop.t = vim;
16615                 vop.m += sim - sop;
16616               }
16617               if (vip && !nextLeft(vom)) {
16618                 vom.t = vip;
16619                 vom.m += sip - som;
16620                 ancestor = v;
16621               }
16622             }
16623             return ancestor;
16624           }
16625
16626           function sizeNode(node) {
16627             node.x *= dx;
16628             node.y = node.depth * dy;
16629           }
16630
16631           tree.separation = function(x) {
16632             return arguments.length ? (separation = x, tree) : separation;
16633           };
16634
16635           tree.size = function(x) {
16636             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
16637           };
16638
16639           tree.nodeSize = function(x) {
16640             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
16641           };
16642
16643           return tree;
16644         }
16645
16646         function treemapSlice(parent, x0, y0, x1, y1) {
16647           var nodes = parent.children,
16648               node,
16649               i = -1,
16650               n = nodes.length,
16651               k = parent.value && (y1 - y0) / parent.value;
16652
16653           while (++i < n) {
16654             node = nodes[i], node.x0 = x0, node.x1 = x1;
16655             node.y0 = y0, node.y1 = y0 += node.value * k;
16656           }
16657         }
16658
16659         var phi = (1 + Math.sqrt(5)) / 2;
16660
16661         function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
16662           var rows = [],
16663               nodes = parent.children,
16664               row,
16665               nodeValue,
16666               i0 = 0,
16667               i1 = 0,
16668               n = nodes.length,
16669               dx, dy,
16670               value = parent.value,
16671               sumValue,
16672               minValue,
16673               maxValue,
16674               newRatio,
16675               minRatio,
16676               alpha,
16677               beta;
16678
16679           while (i0 < n) {
16680             dx = x1 - x0, dy = y1 - y0;
16681
16682             // Find the next non-empty node.
16683             do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);
16684             minValue = maxValue = sumValue;
16685             alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
16686             beta = sumValue * sumValue * alpha;
16687             minRatio = Math.max(maxValue / beta, beta / minValue);
16688
16689             // Keep adding nodes while the aspect ratio maintains or improves.
16690             for (; i1 < n; ++i1) {
16691               sumValue += nodeValue = nodes[i1].value;
16692               if (nodeValue < minValue) minValue = nodeValue;
16693               if (nodeValue > maxValue) maxValue = nodeValue;
16694               beta = sumValue * sumValue * alpha;
16695               newRatio = Math.max(maxValue / beta, beta / minValue);
16696               if (newRatio > minRatio) { sumValue -= nodeValue; break; }
16697               minRatio = newRatio;
16698             }
16699
16700             // Position and record the row orientation.
16701             rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
16702             if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
16703             else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
16704             value -= sumValue, i0 = i1;
16705           }
16706
16707           return rows;
16708         }
16709
16710         var squarify = (function custom(ratio) {
16711
16712           function squarify(parent, x0, y0, x1, y1) {
16713             squarifyRatio(ratio, parent, x0, y0, x1, y1);
16714           }
16715
16716           squarify.ratio = function(x) {
16717             return custom((x = +x) > 1 ? x : 1);
16718           };
16719
16720           return squarify;
16721         })(phi);
16722
16723         function index$2() {
16724           var tile = squarify,
16725               round = false,
16726               dx = 1,
16727               dy = 1,
16728               paddingStack = [0],
16729               paddingInner = constantZero,
16730               paddingTop = constantZero,
16731               paddingRight = constantZero,
16732               paddingBottom = constantZero,
16733               paddingLeft = constantZero;
16734
16735           function treemap(root) {
16736             root.x0 =
16737             root.y0 = 0;
16738             root.x1 = dx;
16739             root.y1 = dy;
16740             root.eachBefore(positionNode);
16741             paddingStack = [0];
16742             if (round) root.eachBefore(roundNode);
16743             return root;
16744           }
16745
16746           function positionNode(node) {
16747             var p = paddingStack[node.depth],
16748                 x0 = node.x0 + p,
16749                 y0 = node.y0 + p,
16750                 x1 = node.x1 - p,
16751                 y1 = node.y1 - p;
16752             if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
16753             if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
16754             node.x0 = x0;
16755             node.y0 = y0;
16756             node.x1 = x1;
16757             node.y1 = y1;
16758             if (node.children) {
16759               p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
16760               x0 += paddingLeft(node) - p;
16761               y0 += paddingTop(node) - p;
16762               x1 -= paddingRight(node) - p;
16763               y1 -= paddingBottom(node) - p;
16764               if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
16765               if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
16766               tile(node, x0, y0, x1, y1);
16767             }
16768           }
16769
16770           treemap.round = function(x) {
16771             return arguments.length ? (round = !!x, treemap) : round;
16772           };
16773
16774           treemap.size = function(x) {
16775             return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
16776           };
16777
16778           treemap.tile = function(x) {
16779             return arguments.length ? (tile = required(x), treemap) : tile;
16780           };
16781
16782           treemap.padding = function(x) {
16783             return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
16784           };
16785
16786           treemap.paddingInner = function(x) {
16787             return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$9(+x), treemap) : paddingInner;
16788           };
16789
16790           treemap.paddingOuter = function(x) {
16791             return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
16792           };
16793
16794           treemap.paddingTop = function(x) {
16795             return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$9(+x), treemap) : paddingTop;
16796           };
16797
16798           treemap.paddingRight = function(x) {
16799             return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$9(+x), treemap) : paddingRight;
16800           };
16801
16802           treemap.paddingBottom = function(x) {
16803             return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$9(+x), treemap) : paddingBottom;
16804           };
16805
16806           treemap.paddingLeft = function(x) {
16807             return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$9(+x), treemap) : paddingLeft;
16808           };
16809
16810           return treemap;
16811         }
16812
16813         function binary(parent, x0, y0, x1, y1) {
16814           var nodes = parent.children,
16815               i, n = nodes.length,
16816               sum, sums = new Array(n + 1);
16817
16818           for (sums[0] = sum = i = 0; i < n; ++i) {
16819             sums[i + 1] = sum += nodes[i].value;
16820           }
16821
16822           partition(0, n, parent.value, x0, y0, x1, y1);
16823
16824           function partition(i, j, value, x0, y0, x1, y1) {
16825             if (i >= j - 1) {
16826               var node = nodes[i];
16827               node.x0 = x0, node.y0 = y0;
16828               node.x1 = x1, node.y1 = y1;
16829               return;
16830             }
16831
16832             var valueOffset = sums[i],
16833                 valueTarget = (value / 2) + valueOffset,
16834                 k = i + 1,
16835                 hi = j - 1;
16836
16837             while (k < hi) {
16838               var mid = k + hi >>> 1;
16839               if (sums[mid] < valueTarget) k = mid + 1;
16840               else hi = mid;
16841             }
16842
16843             if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;
16844
16845             var valueLeft = sums[k] - valueOffset,
16846                 valueRight = value - valueLeft;
16847
16848             if ((x1 - x0) > (y1 - y0)) {
16849               var xk = (x0 * valueRight + x1 * valueLeft) / value;
16850               partition(i, k, valueLeft, x0, y0, xk, y1);
16851               partition(k, j, valueRight, xk, y0, x1, y1);
16852             } else {
16853               var yk = (y0 * valueRight + y1 * valueLeft) / value;
16854               partition(i, k, valueLeft, x0, y0, x1, yk);
16855               partition(k, j, valueRight, x0, yk, x1, y1);
16856             }
16857           }
16858         }
16859
16860         function sliceDice(parent, x0, y0, x1, y1) {
16861           (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
16862         }
16863
16864         var resquarify = (function custom(ratio) {
16865
16866           function resquarify(parent, x0, y0, x1, y1) {
16867             if ((rows = parent._squarify) && (rows.ratio === ratio)) {
16868               var rows,
16869                   row,
16870                   nodes,
16871                   i,
16872                   j = -1,
16873                   n,
16874                   m = rows.length,
16875                   value = parent.value;
16876
16877               while (++j < m) {
16878                 row = rows[j], nodes = row.children;
16879                 for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
16880                 if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
16881                 else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
16882                 value -= row.value;
16883               }
16884             } else {
16885               parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
16886               rows.ratio = ratio;
16887             }
16888           }
16889
16890           resquarify.ratio = function(x) {
16891             return custom((x = +x) > 1 ? x : 1);
16892           };
16893
16894           return resquarify;
16895         })(phi);
16896
16897         function d3_polygonArea(polygon) {
16898           var i = -1,
16899               n = polygon.length,
16900               a,
16901               b = polygon[n - 1],
16902               area = 0;
16903
16904           while (++i < n) {
16905             a = b;
16906             b = polygon[i];
16907             area += a[1] * b[0] - a[0] * b[1];
16908           }
16909
16910           return area / 2;
16911         }
16912
16913         function d3_polygonCentroid(polygon) {
16914           var i = -1,
16915               n = polygon.length,
16916               x = 0,
16917               y = 0,
16918               a,
16919               b = polygon[n - 1],
16920               c,
16921               k = 0;
16922
16923           while (++i < n) {
16924             a = b;
16925             b = polygon[i];
16926             k += c = a[0] * b[1] - b[0] * a[1];
16927             x += (a[0] + b[0]) * c;
16928             y += (a[1] + b[1]) * c;
16929           }
16930
16931           return k *= 3, [x / k, y / k];
16932         }
16933
16934         // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
16935         // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
16936         // right, +y is up). Returns a positive value if ABC is counter-clockwise,
16937         // negative if clockwise, and zero if the points are collinear.
16938         function cross$1(a, b, c) {
16939           return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
16940         }
16941
16942         function lexicographicOrder(a, b) {
16943           return a[0] - b[0] || a[1] - b[1];
16944         }
16945
16946         // Computes the upper convex hull per the monotone chain algorithm.
16947         // Assumes points.length >= 3, is sorted by x, unique in y.
16948         // Returns an array of indices into points in left-to-right order.
16949         function computeUpperHullIndexes(points) {
16950           var n = points.length,
16951               indexes = [0, 1],
16952               size = 2;
16953
16954           for (var i = 2; i < n; ++i) {
16955             while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
16956             indexes[size++] = i;
16957           }
16958
16959           return indexes.slice(0, size); // remove popped points
16960         }
16961
16962         function d3_polygonHull(points) {
16963           if ((n = points.length) < 3) return null;
16964
16965           var i,
16966               n,
16967               sortedPoints = new Array(n),
16968               flippedPoints = new Array(n);
16969
16970           for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
16971           sortedPoints.sort(lexicographicOrder);
16972           for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
16973
16974           var upperIndexes = computeUpperHullIndexes(sortedPoints),
16975               lowerIndexes = computeUpperHullIndexes(flippedPoints);
16976
16977           // Construct the hull polygon, removing possible duplicate endpoints.
16978           var skipLeft = lowerIndexes[0] === upperIndexes[0],
16979               skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
16980               hull = [];
16981
16982           // Add upper hull in right-to-l order.
16983           // Then add lower hull in left-to-right order.
16984           for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
16985           for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
16986
16987           return hull;
16988         }
16989
16990         function contains$3(polygon, point) {
16991           var n = polygon.length,
16992               p = polygon[n - 1],
16993               x = point[0], y = point[1],
16994               x0 = p[0], y0 = p[1],
16995               x1, y1,
16996               inside = false;
16997
16998           for (var i = 0; i < n; ++i) {
16999             p = polygon[i], x1 = p[0], y1 = p[1];
17000             if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
17001             x0 = x1, y0 = y1;
17002           }
17003
17004           return inside;
17005         }
17006
17007         function length$1(polygon) {
17008           var i = -1,
17009               n = polygon.length,
17010               b = polygon[n - 1],
17011               xa,
17012               ya,
17013               xb = b[0],
17014               yb = b[1],
17015               perimeter = 0;
17016
17017           while (++i < n) {
17018             xa = xb;
17019             ya = yb;
17020             b = polygon[i];
17021             xb = b[0];
17022             yb = b[1];
17023             xa -= xb;
17024             ya -= yb;
17025             perimeter += Math.sqrt(xa * xa + ya * ya);
17026           }
17027
17028           return perimeter;
17029         }
17030
17031         function defaultSource$1() {
17032           return Math.random();
17033         }
17034
17035         var uniform = (function sourceRandomUniform(source) {
17036           function randomUniform(min, max) {
17037             min = min == null ? 0 : +min;
17038             max = max == null ? 1 : +max;
17039             if (arguments.length === 1) max = min, min = 0;
17040             else max -= min;
17041             return function() {
17042               return source() * max + min;
17043             };
17044           }
17045
17046           randomUniform.source = sourceRandomUniform;
17047
17048           return randomUniform;
17049         })(defaultSource$1);
17050
17051         var normal = (function sourceRandomNormal(source) {
17052           function randomNormal(mu, sigma) {
17053             var x, r;
17054             mu = mu == null ? 0 : +mu;
17055             sigma = sigma == null ? 1 : +sigma;
17056             return function() {
17057               var y;
17058
17059               // If available, use the second previously-generated uniform random.
17060               if (x != null) y = x, x = null;
17061
17062               // Otherwise, generate a new x and y.
17063               else do {
17064                 x = source() * 2 - 1;
17065                 y = source() * 2 - 1;
17066                 r = x * x + y * y;
17067               } while (!r || r > 1);
17068
17069               return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
17070             };
17071           }
17072
17073           randomNormal.source = sourceRandomNormal;
17074
17075           return randomNormal;
17076         })(defaultSource$1);
17077
17078         var logNormal = (function sourceRandomLogNormal(source) {
17079           function randomLogNormal() {
17080             var randomNormal = normal.source(source).apply(this, arguments);
17081             return function() {
17082               return Math.exp(randomNormal());
17083             };
17084           }
17085
17086           randomLogNormal.source = sourceRandomLogNormal;
17087
17088           return randomLogNormal;
17089         })(defaultSource$1);
17090
17091         var irwinHall = (function sourceRandomIrwinHall(source) {
17092           function randomIrwinHall(n) {
17093             return function() {
17094               for (var sum = 0, i = 0; i < n; ++i) sum += source();
17095               return sum;
17096             };
17097           }
17098
17099           randomIrwinHall.source = sourceRandomIrwinHall;
17100
17101           return randomIrwinHall;
17102         })(defaultSource$1);
17103
17104         var bates = (function sourceRandomBates(source) {
17105           function randomBates(n) {
17106             var randomIrwinHall = irwinHall.source(source)(n);
17107             return function() {
17108               return randomIrwinHall() / n;
17109             };
17110           }
17111
17112           randomBates.source = sourceRandomBates;
17113
17114           return randomBates;
17115         })(defaultSource$1);
17116
17117         var exponential$1 = (function sourceRandomExponential(source) {
17118           function randomExponential(lambda) {
17119             return function() {
17120               return -Math.log(1 - source()) / lambda;
17121             };
17122           }
17123
17124           randomExponential.source = sourceRandomExponential;
17125
17126           return randomExponential;
17127         })(defaultSource$1);
17128
17129         function initRange(domain, range) {
17130           switch (arguments.length) {
17131             case 0: break;
17132             case 1: this.range(domain); break;
17133             default: this.range(range).domain(domain); break;
17134           }
17135           return this;
17136         }
17137
17138         function initInterpolator(domain, interpolator) {
17139           switch (arguments.length) {
17140             case 0: break;
17141             case 1: this.interpolator(domain); break;
17142             default: this.interpolator(interpolator).domain(domain); break;
17143           }
17144           return this;
17145         }
17146
17147         var array$4 = Array.prototype;
17148
17149         var map$4 = array$4.map;
17150         var slice$9 = array$4.slice;
17151
17152         var implicit = {name: "implicit"};
17153
17154         function ordinal() {
17155           var index = map$3(),
17156               domain = [],
17157               range = [],
17158               unknown = implicit;
17159
17160           function scale(d) {
17161             var key = d + "", i = index.get(key);
17162             if (!i) {
17163               if (unknown !== implicit) return unknown;
17164               index.set(key, i = domain.push(d));
17165             }
17166             return range[(i - 1) % range.length];
17167           }
17168
17169           scale.domain = function(_) {
17170             if (!arguments.length) return domain.slice();
17171             domain = [], index = map$3();
17172             var i = -1, n = _.length, d, key;
17173             while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
17174             return scale;
17175           };
17176
17177           scale.range = function(_) {
17178             return arguments.length ? (range = slice$9.call(_), scale) : range.slice();
17179           };
17180
17181           scale.unknown = function(_) {
17182             return arguments.length ? (unknown = _, scale) : unknown;
17183           };
17184
17185           scale.copy = function() {
17186             return ordinal(domain, range).unknown(unknown);
17187           };
17188
17189           initRange.apply(scale, arguments);
17190
17191           return scale;
17192         }
17193
17194         function band() {
17195           var scale = ordinal().unknown(undefined),
17196               domain = scale.domain,
17197               ordinalRange = scale.range,
17198               range = [0, 1],
17199               step,
17200               bandwidth,
17201               round = false,
17202               paddingInner = 0,
17203               paddingOuter = 0,
17204               align = 0.5;
17205
17206           delete scale.unknown;
17207
17208           function rescale() {
17209             var n = domain().length,
17210                 reverse = range[1] < range[0],
17211                 start = range[reverse - 0],
17212                 stop = range[1 - reverse];
17213             step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
17214             if (round) step = Math.floor(step);
17215             start += (stop - start - step * (n - paddingInner)) * align;
17216             bandwidth = step * (1 - paddingInner);
17217             if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
17218             var values = d3_range(n).map(function(i) { return start + step * i; });
17219             return ordinalRange(reverse ? values.reverse() : values);
17220           }
17221
17222           scale.domain = function(_) {
17223             return arguments.length ? (domain(_), rescale()) : domain();
17224           };
17225
17226           scale.range = function(_) {
17227             return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
17228           };
17229
17230           scale.rangeRound = function(_) {
17231             return range = [+_[0], +_[1]], round = true, rescale();
17232           };
17233
17234           scale.bandwidth = function() {
17235             return bandwidth;
17236           };
17237
17238           scale.step = function() {
17239             return step;
17240           };
17241
17242           scale.round = function(_) {
17243             return arguments.length ? (round = !!_, rescale()) : round;
17244           };
17245
17246           scale.padding = function(_) {
17247             return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
17248           };
17249
17250           scale.paddingInner = function(_) {
17251             return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
17252           };
17253
17254           scale.paddingOuter = function(_) {
17255             return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
17256           };
17257
17258           scale.align = function(_) {
17259             return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
17260           };
17261
17262           scale.copy = function() {
17263             return band(domain(), range)
17264                 .round(round)
17265                 .paddingInner(paddingInner)
17266                 .paddingOuter(paddingOuter)
17267                 .align(align);
17268           };
17269
17270           return initRange.apply(rescale(), arguments);
17271         }
17272
17273         function pointish(scale) {
17274           var copy = scale.copy;
17275
17276           scale.padding = scale.paddingOuter;
17277           delete scale.paddingInner;
17278           delete scale.paddingOuter;
17279
17280           scale.copy = function() {
17281             return pointish(copy());
17282           };
17283
17284           return scale;
17285         }
17286
17287         function point$1() {
17288           return pointish(band.apply(null, arguments).paddingInner(1));
17289         }
17290
17291         function constant$a(x) {
17292           return function() {
17293             return x;
17294           };
17295         }
17296
17297         function number$2(x) {
17298           return +x;
17299         }
17300
17301         var unit = [0, 1];
17302
17303         function identity$5(x) {
17304           return x;
17305         }
17306
17307         function normalize(a, b) {
17308           return (b -= (a = +a))
17309               ? function(x) { return (x - a) / b; }
17310               : constant$a(isNaN(b) ? NaN : 0.5);
17311         }
17312
17313         function clamper(domain) {
17314           var a = domain[0], b = domain[domain.length - 1], t;
17315           if (a > b) t = a, a = b, b = t;
17316           return function(x) { return Math.max(a, Math.min(b, x)); };
17317         }
17318
17319         // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
17320         // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
17321         function bimap(domain, range, interpolate) {
17322           var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
17323           if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);
17324           else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
17325           return function(x) { return r0(d0(x)); };
17326         }
17327
17328         function polymap(domain, range, interpolate) {
17329           var j = Math.min(domain.length, range.length) - 1,
17330               d = new Array(j),
17331               r = new Array(j),
17332               i = -1;
17333
17334           // Reverse descending domains.
17335           if (domain[j] < domain[0]) {
17336             domain = domain.slice().reverse();
17337             range = range.slice().reverse();
17338           }
17339
17340           while (++i < j) {
17341             d[i] = normalize(domain[i], domain[i + 1]);
17342             r[i] = interpolate(range[i], range[i + 1]);
17343           }
17344
17345           return function(x) {
17346             var i = bisectRight(domain, x, 1, j) - 1;
17347             return r[i](d[i](x));
17348           };
17349         }
17350
17351         function copy$1(source, target) {
17352           return target
17353               .domain(source.domain())
17354               .range(source.range())
17355               .interpolate(source.interpolate())
17356               .clamp(source.clamp())
17357               .unknown(source.unknown());
17358         }
17359
17360         function transformer$1() {
17361           var domain = unit,
17362               range = unit,
17363               interpolate = d3_interpolate,
17364               transform,
17365               untransform,
17366               unknown,
17367               clamp = identity$5,
17368               piecewise,
17369               output,
17370               input;
17371
17372           function rescale() {
17373             piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
17374             output = input = null;
17375             return scale;
17376           }
17377
17378           function scale(x) {
17379             return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
17380           }
17381
17382           scale.invert = function(y) {
17383             return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolateNumber)))(y)));
17384           };
17385
17386           scale.domain = function(_) {
17387             return arguments.length ? (domain = map$4.call(_, number$2), clamp === identity$5 || (clamp = clamper(domain)), rescale()) : domain.slice();
17388           };
17389
17390           scale.range = function(_) {
17391             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
17392           };
17393
17394           scale.rangeRound = function(_) {
17395             return range = slice$9.call(_), interpolate = interpolateRound, rescale();
17396           };
17397
17398           scale.clamp = function(_) {
17399             return arguments.length ? (clamp = _ ? clamper(domain) : identity$5, scale) : clamp !== identity$5;
17400           };
17401
17402           scale.interpolate = function(_) {
17403             return arguments.length ? (interpolate = _, rescale()) : interpolate;
17404           };
17405
17406           scale.unknown = function(_) {
17407             return arguments.length ? (unknown = _, scale) : unknown;
17408           };
17409
17410           return function(t, u) {
17411             transform = t, untransform = u;
17412             return rescale();
17413           };
17414         }
17415
17416         function continuous(transform, untransform) {
17417           return transformer$1()(transform, untransform);
17418         }
17419
17420         function tickFormat(start, stop, count, specifier) {
17421           var step = tickStep(start, stop, count),
17422               precision;
17423           specifier = formatSpecifier(specifier == null ? ",f" : specifier);
17424           switch (specifier.type) {
17425             case "s": {
17426               var value = Math.max(Math.abs(start), Math.abs(stop));
17427               if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
17428               return formatPrefix(specifier, value);
17429             }
17430             case "":
17431             case "e":
17432             case "g":
17433             case "p":
17434             case "r": {
17435               if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
17436               break;
17437             }
17438             case "f":
17439             case "%": {
17440               if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
17441               break;
17442             }
17443           }
17444           return format(specifier);
17445         }
17446
17447         function linearish(scale) {
17448           var domain = scale.domain;
17449
17450           scale.ticks = function(count) {
17451             var d = domain();
17452             return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
17453           };
17454
17455           scale.tickFormat = function(count, specifier) {
17456             var d = domain();
17457             return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
17458           };
17459
17460           scale.nice = function(count) {
17461             if (count == null) count = 10;
17462
17463             var d = domain(),
17464                 i0 = 0,
17465                 i1 = d.length - 1,
17466                 start = d[i0],
17467                 stop = d[i1],
17468                 step;
17469
17470             if (stop < start) {
17471               step = start, start = stop, stop = step;
17472               step = i0, i0 = i1, i1 = step;
17473             }
17474
17475             step = tickIncrement(start, stop, count);
17476
17477             if (step > 0) {
17478               start = Math.floor(start / step) * step;
17479               stop = Math.ceil(stop / step) * step;
17480               step = tickIncrement(start, stop, count);
17481             } else if (step < 0) {
17482               start = Math.ceil(start * step) / step;
17483               stop = Math.floor(stop * step) / step;
17484               step = tickIncrement(start, stop, count);
17485             }
17486
17487             if (step > 0) {
17488               d[i0] = Math.floor(start / step) * step;
17489               d[i1] = Math.ceil(stop / step) * step;
17490               domain(d);
17491             } else if (step < 0) {
17492               d[i0] = Math.ceil(start * step) / step;
17493               d[i1] = Math.floor(stop * step) / step;
17494               domain(d);
17495             }
17496
17497             return scale;
17498           };
17499
17500           return scale;
17501         }
17502
17503         function linear$2() {
17504           var scale = continuous(identity$5, identity$5);
17505
17506           scale.copy = function() {
17507             return copy$1(scale, linear$2());
17508           };
17509
17510           initRange.apply(scale, arguments);
17511
17512           return linearish(scale);
17513         }
17514
17515         function identity$6(domain) {
17516           var unknown;
17517
17518           function scale(x) {
17519             return isNaN(x = +x) ? unknown : x;
17520           }
17521
17522           scale.invert = scale;
17523
17524           scale.domain = scale.range = function(_) {
17525             return arguments.length ? (domain = map$4.call(_, number$2), scale) : domain.slice();
17526           };
17527
17528           scale.unknown = function(_) {
17529             return arguments.length ? (unknown = _, scale) : unknown;
17530           };
17531
17532           scale.copy = function() {
17533             return identity$6(domain).unknown(unknown);
17534           };
17535
17536           domain = arguments.length ? map$4.call(domain, number$2) : [0, 1];
17537
17538           return linearish(scale);
17539         }
17540
17541         function nice(domain, interval) {
17542           domain = domain.slice();
17543
17544           var i0 = 0,
17545               i1 = domain.length - 1,
17546               x0 = domain[i0],
17547               x1 = domain[i1],
17548               t;
17549
17550           if (x1 < x0) {
17551             t = i0, i0 = i1, i1 = t;
17552             t = x0, x0 = x1, x1 = t;
17553           }
17554
17555           domain[i0] = interval.floor(x0);
17556           domain[i1] = interval.ceil(x1);
17557           return domain;
17558         }
17559
17560         function transformLog(x) {
17561           return Math.log(x);
17562         }
17563
17564         function transformExp(x) {
17565           return Math.exp(x);
17566         }
17567
17568         function transformLogn(x) {
17569           return -Math.log(-x);
17570         }
17571
17572         function transformExpn(x) {
17573           return -Math.exp(-x);
17574         }
17575
17576         function pow10(x) {
17577           return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
17578         }
17579
17580         function powp(base) {
17581           return base === 10 ? pow10
17582               : base === Math.E ? Math.exp
17583               : function(x) { return Math.pow(base, x); };
17584         }
17585
17586         function logp(base) {
17587           return base === Math.E ? Math.log
17588               : base === 10 && Math.log10
17589               || base === 2 && Math.log2
17590               || (base = Math.log(base), function(x) { return Math.log(x) / base; });
17591         }
17592
17593         function reflect(f) {
17594           return function(x) {
17595             return -f(-x);
17596           };
17597         }
17598
17599         function loggish(transform) {
17600           var scale = transform(transformLog, transformExp),
17601               domain = scale.domain,
17602               base = 10,
17603               logs,
17604               pows;
17605
17606           function rescale() {
17607             logs = logp(base), pows = powp(base);
17608             if (domain()[0] < 0) {
17609               logs = reflect(logs), pows = reflect(pows);
17610               transform(transformLogn, transformExpn);
17611             } else {
17612               transform(transformLog, transformExp);
17613             }
17614             return scale;
17615           }
17616
17617           scale.base = function(_) {
17618             return arguments.length ? (base = +_, rescale()) : base;
17619           };
17620
17621           scale.domain = function(_) {
17622             return arguments.length ? (domain(_), rescale()) : domain();
17623           };
17624
17625           scale.ticks = function(count) {
17626             var d = domain(),
17627                 u = d[0],
17628                 v = d[d.length - 1],
17629                 r;
17630
17631             if (r = v < u) i = u, u = v, v = i;
17632
17633             var i = logs(u),
17634                 j = logs(v),
17635                 p,
17636                 k,
17637                 t,
17638                 n = count == null ? 10 : +count,
17639                 z = [];
17640
17641             if (!(base % 1) && j - i < n) {
17642               i = Math.round(i) - 1, j = Math.round(j) + 1;
17643               if (u > 0) for (; i < j; ++i) {
17644                 for (k = 1, p = pows(i); k < base; ++k) {
17645                   t = p * k;
17646                   if (t < u) continue;
17647                   if (t > v) break;
17648                   z.push(t);
17649                 }
17650               } else for (; i < j; ++i) {
17651                 for (k = base - 1, p = pows(i); k >= 1; --k) {
17652                   t = p * k;
17653                   if (t < u) continue;
17654                   if (t > v) break;
17655                   z.push(t);
17656                 }
17657               }
17658             } else {
17659               z = ticks(i, j, Math.min(j - i, n)).map(pows);
17660             }
17661
17662             return r ? z.reverse() : z;
17663           };
17664
17665           scale.tickFormat = function(count, specifier) {
17666             if (specifier == null) specifier = base === 10 ? ".0e" : ",";
17667             if (typeof specifier !== "function") specifier = format(specifier);
17668             if (count === Infinity) return specifier;
17669             if (count == null) count = 10;
17670             var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
17671             return function(d) {
17672               var i = d / pows(Math.round(logs(d)));
17673               if (i * base < base - 0.5) i *= base;
17674               return i <= k ? specifier(d) : "";
17675             };
17676           };
17677
17678           scale.nice = function() {
17679             return domain(nice(domain(), {
17680               floor: function(x) { return pows(Math.floor(logs(x))); },
17681               ceil: function(x) { return pows(Math.ceil(logs(x))); }
17682             }));
17683           };
17684
17685           return scale;
17686         }
17687
17688         function log$1() {
17689           var scale = loggish(transformer$1()).domain([1, 10]);
17690
17691           scale.copy = function() {
17692             return copy$1(scale, log$1()).base(scale.base());
17693           };
17694
17695           initRange.apply(scale, arguments);
17696
17697           return scale;
17698         }
17699
17700         function transformSymlog(c) {
17701           return function(x) {
17702             return Math.sign(x) * Math.log1p(Math.abs(x / c));
17703           };
17704         }
17705
17706         function transformSymexp(c) {
17707           return function(x) {
17708             return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
17709           };
17710         }
17711
17712         function symlogish(transform) {
17713           var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));
17714
17715           scale.constant = function(_) {
17716             return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
17717           };
17718
17719           return linearish(scale);
17720         }
17721
17722         function symlog() {
17723           var scale = symlogish(transformer$1());
17724
17725           scale.copy = function() {
17726             return copy$1(scale, symlog()).constant(scale.constant());
17727           };
17728
17729           return initRange.apply(scale, arguments);
17730         }
17731
17732         function transformPow(exponent) {
17733           return function(x) {
17734             return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
17735           };
17736         }
17737
17738         function transformSqrt(x) {
17739           return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
17740         }
17741
17742         function transformSquare(x) {
17743           return x < 0 ? -x * x : x * x;
17744         }
17745
17746         function powish(transform) {
17747           var scale = transform(identity$5, identity$5),
17748               exponent = 1;
17749
17750           function rescale() {
17751             return exponent === 1 ? transform(identity$5, identity$5)
17752                 : exponent === 0.5 ? transform(transformSqrt, transformSquare)
17753                 : transform(transformPow(exponent), transformPow(1 / exponent));
17754           }
17755
17756           scale.exponent = function(_) {
17757             return arguments.length ? (exponent = +_, rescale()) : exponent;
17758           };
17759
17760           return linearish(scale);
17761         }
17762
17763         function pow$1() {
17764           var scale = powish(transformer$1());
17765
17766           scale.copy = function() {
17767             return copy$1(scale, pow$1()).exponent(scale.exponent());
17768           };
17769
17770           initRange.apply(scale, arguments);
17771
17772           return scale;
17773         }
17774
17775         function sqrt$1() {
17776           return pow$1.apply(null, arguments).exponent(0.5);
17777         }
17778
17779         function quantile() {
17780           var domain = [],
17781               range = [],
17782               thresholds = [],
17783               unknown;
17784
17785           function rescale() {
17786             var i = 0, n = Math.max(1, range.length);
17787             thresholds = new Array(n - 1);
17788             while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
17789             return scale;
17790           }
17791
17792           function scale(x) {
17793             return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)];
17794           }
17795
17796           scale.invertExtent = function(y) {
17797             var i = range.indexOf(y);
17798             return i < 0 ? [NaN, NaN] : [
17799               i > 0 ? thresholds[i - 1] : domain[0],
17800               i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
17801             ];
17802           };
17803
17804           scale.domain = function(_) {
17805             if (!arguments.length) return domain.slice();
17806             domain = [];
17807             for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
17808             domain.sort(d3_ascending);
17809             return rescale();
17810           };
17811
17812           scale.range = function(_) {
17813             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
17814           };
17815
17816           scale.unknown = function(_) {
17817             return arguments.length ? (unknown = _, scale) : unknown;
17818           };
17819
17820           scale.quantiles = function() {
17821             return thresholds.slice();
17822           };
17823
17824           scale.copy = function() {
17825             return quantile()
17826                 .domain(domain)
17827                 .range(range)
17828                 .unknown(unknown);
17829           };
17830
17831           return initRange.apply(scale, arguments);
17832         }
17833
17834         function quantize() {
17835           var x0 = 0,
17836               x1 = 1,
17837               n = 1,
17838               domain = [0.5],
17839               range = [0, 1],
17840               unknown;
17841
17842           function scale(x) {
17843             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
17844           }
17845
17846           function rescale() {
17847             var i = -1;
17848             domain = new Array(n);
17849             while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
17850             return scale;
17851           }
17852
17853           scale.domain = function(_) {
17854             return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
17855           };
17856
17857           scale.range = function(_) {
17858             return arguments.length ? (n = (range = slice$9.call(_)).length - 1, rescale()) : range.slice();
17859           };
17860
17861           scale.invertExtent = function(y) {
17862             var i = range.indexOf(y);
17863             return i < 0 ? [NaN, NaN]
17864                 : i < 1 ? [x0, domain[0]]
17865                 : i >= n ? [domain[n - 1], x1]
17866                 : [domain[i - 1], domain[i]];
17867           };
17868
17869           scale.unknown = function(_) {
17870             return arguments.length ? (unknown = _, scale) : scale;
17871           };
17872
17873           scale.thresholds = function() {
17874             return domain.slice();
17875           };
17876
17877           scale.copy = function() {
17878             return quantize()
17879                 .domain([x0, x1])
17880                 .range(range)
17881                 .unknown(unknown);
17882           };
17883
17884           return initRange.apply(linearish(scale), arguments);
17885         }
17886
17887         function threshold$1() {
17888           var domain = [0.5],
17889               range = [0, 1],
17890               unknown,
17891               n = 1;
17892
17893           function scale(x) {
17894             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
17895           }
17896
17897           scale.domain = function(_) {
17898             return arguments.length ? (domain = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
17899           };
17900
17901           scale.range = function(_) {
17902             return arguments.length ? (range = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
17903           };
17904
17905           scale.invertExtent = function(y) {
17906             var i = range.indexOf(y);
17907             return [domain[i - 1], domain[i]];
17908           };
17909
17910           scale.unknown = function(_) {
17911             return arguments.length ? (unknown = _, scale) : unknown;
17912           };
17913
17914           scale.copy = function() {
17915             return threshold$1()
17916                 .domain(domain)
17917                 .range(range)
17918                 .unknown(unknown);
17919           };
17920
17921           return initRange.apply(scale, arguments);
17922         }
17923
17924         var t0$1 = new Date,
17925             t1$1 = new Date;
17926
17927         function newInterval(floori, offseti, count, field) {
17928
17929           function interval(date) {
17930             return floori(date = new Date(+date)), date;
17931           }
17932
17933           interval.floor = interval;
17934
17935           interval.ceil = function(date) {
17936             return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
17937           };
17938
17939           interval.round = function(date) {
17940             var d0 = interval(date),
17941                 d1 = interval.ceil(date);
17942             return date - d0 < d1 - date ? d0 : d1;
17943           };
17944
17945           interval.offset = function(date, step) {
17946             return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
17947           };
17948
17949           interval.range = function(start, stop, step) {
17950             var range = [], previous;
17951             start = interval.ceil(start);
17952             step = step == null ? 1 : Math.floor(step);
17953             if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
17954             do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
17955             while (previous < start && start < stop);
17956             return range;
17957           };
17958
17959           interval.filter = function(test) {
17960             return newInterval(function(date) {
17961               if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
17962             }, function(date, step) {
17963               if (date >= date) {
17964                 if (step < 0) while (++step <= 0) {
17965                   while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
17966                 } else while (--step >= 0) {
17967                   while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
17968                 }
17969               }
17970             });
17971           };
17972
17973           if (count) {
17974             interval.count = function(start, end) {
17975               t0$1.setTime(+start), t1$1.setTime(+end);
17976               floori(t0$1), floori(t1$1);
17977               return Math.floor(count(t0$1, t1$1));
17978             };
17979
17980             interval.every = function(step) {
17981               step = Math.floor(step);
17982               return !isFinite(step) || !(step > 0) ? null
17983                   : !(step > 1) ? interval
17984                   : interval.filter(field
17985                       ? function(d) { return field(d) % step === 0; }
17986                       : function(d) { return interval.count(0, d) % step === 0; });
17987             };
17988           }
17989
17990           return interval;
17991         }
17992
17993         var millisecond = newInterval(function() {
17994           // noop
17995         }, function(date, step) {
17996           date.setTime(+date + step);
17997         }, function(start, end) {
17998           return end - start;
17999         });
18000
18001         // An optimized implementation for this simple case.
18002         millisecond.every = function(k) {
18003           k = Math.floor(k);
18004           if (!isFinite(k) || !(k > 0)) return null;
18005           if (!(k > 1)) return millisecond;
18006           return newInterval(function(date) {
18007             date.setTime(Math.floor(date / k) * k);
18008           }, function(date, step) {
18009             date.setTime(+date + step * k);
18010           }, function(start, end) {
18011             return (end - start) / k;
18012           });
18013         };
18014         var milliseconds = millisecond.range;
18015
18016         var durationSecond = 1e3;
18017         var durationMinute = 6e4;
18018         var durationHour = 36e5;
18019         var durationDay = 864e5;
18020         var durationWeek = 6048e5;
18021
18022         var second = newInterval(function(date) {
18023           date.setTime(date - date.getMilliseconds());
18024         }, function(date, step) {
18025           date.setTime(+date + step * durationSecond);
18026         }, function(start, end) {
18027           return (end - start) / durationSecond;
18028         }, function(date) {
18029           return date.getUTCSeconds();
18030         });
18031         var seconds = second.range;
18032
18033         var minute = newInterval(function(date) {
18034           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
18035         }, function(date, step) {
18036           date.setTime(+date + step * durationMinute);
18037         }, function(start, end) {
18038           return (end - start) / durationMinute;
18039         }, function(date) {
18040           return date.getMinutes();
18041         });
18042         var minutes = minute.range;
18043
18044         var hour = newInterval(function(date) {
18045           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
18046         }, function(date, step) {
18047           date.setTime(+date + step * durationHour);
18048         }, function(start, end) {
18049           return (end - start) / durationHour;
18050         }, function(date) {
18051           return date.getHours();
18052         });
18053         var hours = hour.range;
18054
18055         var day = newInterval(function(date) {
18056           date.setHours(0, 0, 0, 0);
18057         }, function(date, step) {
18058           date.setDate(date.getDate() + step);
18059         }, function(start, end) {
18060           return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
18061         }, function(date) {
18062           return date.getDate() - 1;
18063         });
18064         var days = day.range;
18065
18066         function weekday(i) {
18067           return newInterval(function(date) {
18068             date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
18069             date.setHours(0, 0, 0, 0);
18070           }, function(date, step) {
18071             date.setDate(date.getDate() + step * 7);
18072           }, function(start, end) {
18073             return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
18074           });
18075         }
18076
18077         var sunday = weekday(0);
18078         var monday = weekday(1);
18079         var tuesday = weekday(2);
18080         var wednesday = weekday(3);
18081         var thursday = weekday(4);
18082         var friday = weekday(5);
18083         var saturday = weekday(6);
18084
18085         var sundays = sunday.range;
18086         var mondays = monday.range;
18087         var tuesdays = tuesday.range;
18088         var wednesdays = wednesday.range;
18089         var thursdays = thursday.range;
18090         var fridays = friday.range;
18091         var saturdays = saturday.range;
18092
18093         var month = newInterval(function(date) {
18094           date.setDate(1);
18095           date.setHours(0, 0, 0, 0);
18096         }, function(date, step) {
18097           date.setMonth(date.getMonth() + step);
18098         }, function(start, end) {
18099           return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
18100         }, function(date) {
18101           return date.getMonth();
18102         });
18103         var months = month.range;
18104
18105         var year = newInterval(function(date) {
18106           date.setMonth(0, 1);
18107           date.setHours(0, 0, 0, 0);
18108         }, function(date, step) {
18109           date.setFullYear(date.getFullYear() + step);
18110         }, function(start, end) {
18111           return end.getFullYear() - start.getFullYear();
18112         }, function(date) {
18113           return date.getFullYear();
18114         });
18115
18116         // An optimized implementation for this simple case.
18117         year.every = function(k) {
18118           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
18119             date.setFullYear(Math.floor(date.getFullYear() / k) * k);
18120             date.setMonth(0, 1);
18121             date.setHours(0, 0, 0, 0);
18122           }, function(date, step) {
18123             date.setFullYear(date.getFullYear() + step * k);
18124           });
18125         };
18126         var years = year.range;
18127
18128         var utcMinute = newInterval(function(date) {
18129           date.setUTCSeconds(0, 0);
18130         }, function(date, step) {
18131           date.setTime(+date + step * durationMinute);
18132         }, function(start, end) {
18133           return (end - start) / durationMinute;
18134         }, function(date) {
18135           return date.getUTCMinutes();
18136         });
18137         var utcMinutes = utcMinute.range;
18138
18139         var utcHour = newInterval(function(date) {
18140           date.setUTCMinutes(0, 0, 0);
18141         }, function(date, step) {
18142           date.setTime(+date + step * durationHour);
18143         }, function(start, end) {
18144           return (end - start) / durationHour;
18145         }, function(date) {
18146           return date.getUTCHours();
18147         });
18148         var utcHours = utcHour.range;
18149
18150         var utcDay = newInterval(function(date) {
18151           date.setUTCHours(0, 0, 0, 0);
18152         }, function(date, step) {
18153           date.setUTCDate(date.getUTCDate() + step);
18154         }, function(start, end) {
18155           return (end - start) / durationDay;
18156         }, function(date) {
18157           return date.getUTCDate() - 1;
18158         });
18159         var utcDays = utcDay.range;
18160
18161         function utcWeekday(i) {
18162           return newInterval(function(date) {
18163             date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
18164             date.setUTCHours(0, 0, 0, 0);
18165           }, function(date, step) {
18166             date.setUTCDate(date.getUTCDate() + step * 7);
18167           }, function(start, end) {
18168             return (end - start) / durationWeek;
18169           });
18170         }
18171
18172         var utcSunday = utcWeekday(0);
18173         var utcMonday = utcWeekday(1);
18174         var utcTuesday = utcWeekday(2);
18175         var utcWednesday = utcWeekday(3);
18176         var utcThursday = utcWeekday(4);
18177         var utcFriday = utcWeekday(5);
18178         var utcSaturday = utcWeekday(6);
18179
18180         var utcSundays = utcSunday.range;
18181         var utcMondays = utcMonday.range;
18182         var utcTuesdays = utcTuesday.range;
18183         var utcWednesdays = utcWednesday.range;
18184         var utcThursdays = utcThursday.range;
18185         var utcFridays = utcFriday.range;
18186         var utcSaturdays = utcSaturday.range;
18187
18188         var utcMonth = newInterval(function(date) {
18189           date.setUTCDate(1);
18190           date.setUTCHours(0, 0, 0, 0);
18191         }, function(date, step) {
18192           date.setUTCMonth(date.getUTCMonth() + step);
18193         }, function(start, end) {
18194           return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
18195         }, function(date) {
18196           return date.getUTCMonth();
18197         });
18198         var utcMonths = utcMonth.range;
18199
18200         var utcYear = newInterval(function(date) {
18201           date.setUTCMonth(0, 1);
18202           date.setUTCHours(0, 0, 0, 0);
18203         }, function(date, step) {
18204           date.setUTCFullYear(date.getUTCFullYear() + step);
18205         }, function(start, end) {
18206           return end.getUTCFullYear() - start.getUTCFullYear();
18207         }, function(date) {
18208           return date.getUTCFullYear();
18209         });
18210
18211         // An optimized implementation for this simple case.
18212         utcYear.every = function(k) {
18213           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
18214             date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
18215             date.setUTCMonth(0, 1);
18216             date.setUTCHours(0, 0, 0, 0);
18217           }, function(date, step) {
18218             date.setUTCFullYear(date.getUTCFullYear() + step * k);
18219           });
18220         };
18221         var utcYears = utcYear.range;
18222
18223         function localDate(d) {
18224           if (0 <= d.y && d.y < 100) {
18225             var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
18226             date.setFullYear(d.y);
18227             return date;
18228           }
18229           return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
18230         }
18231
18232         function utcDate(d) {
18233           if (0 <= d.y && d.y < 100) {
18234             var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
18235             date.setUTCFullYear(d.y);
18236             return date;
18237           }
18238           return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
18239         }
18240
18241         function newYear(y) {
18242           return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
18243         }
18244
18245         function formatLocale$1(locale) {
18246           var locale_dateTime = locale.dateTime,
18247               locale_date = locale.date,
18248               locale_time = locale.time,
18249               locale_periods = locale.periods,
18250               locale_weekdays = locale.days,
18251               locale_shortWeekdays = locale.shortDays,
18252               locale_months = locale.months,
18253               locale_shortMonths = locale.shortMonths;
18254
18255           var periodRe = formatRe(locale_periods),
18256               periodLookup = formatLookup(locale_periods),
18257               weekdayRe = formatRe(locale_weekdays),
18258               weekdayLookup = formatLookup(locale_weekdays),
18259               shortWeekdayRe = formatRe(locale_shortWeekdays),
18260               shortWeekdayLookup = formatLookup(locale_shortWeekdays),
18261               monthRe = formatRe(locale_months),
18262               monthLookup = formatLookup(locale_months),
18263               shortMonthRe = formatRe(locale_shortMonths),
18264               shortMonthLookup = formatLookup(locale_shortMonths);
18265
18266           var formats = {
18267             "a": formatShortWeekday,
18268             "A": formatWeekday,
18269             "b": formatShortMonth,
18270             "B": formatMonth,
18271             "c": null,
18272             "d": formatDayOfMonth,
18273             "e": formatDayOfMonth,
18274             "f": formatMicroseconds,
18275             "H": formatHour24,
18276             "I": formatHour12,
18277             "j": formatDayOfYear,
18278             "L": formatMilliseconds,
18279             "m": formatMonthNumber,
18280             "M": formatMinutes,
18281             "p": formatPeriod,
18282             "Q": formatUnixTimestamp,
18283             "s": formatUnixTimestampSeconds,
18284             "S": formatSeconds,
18285             "u": formatWeekdayNumberMonday,
18286             "U": formatWeekNumberSunday,
18287             "V": formatWeekNumberISO,
18288             "w": formatWeekdayNumberSunday,
18289             "W": formatWeekNumberMonday,
18290             "x": null,
18291             "X": null,
18292             "y": formatYear$1,
18293             "Y": formatFullYear,
18294             "Z": formatZone,
18295             "%": formatLiteralPercent
18296           };
18297
18298           var utcFormats = {
18299             "a": formatUTCShortWeekday,
18300             "A": formatUTCWeekday,
18301             "b": formatUTCShortMonth,
18302             "B": formatUTCMonth,
18303             "c": null,
18304             "d": formatUTCDayOfMonth,
18305             "e": formatUTCDayOfMonth,
18306             "f": formatUTCMicroseconds,
18307             "H": formatUTCHour24,
18308             "I": formatUTCHour12,
18309             "j": formatUTCDayOfYear,
18310             "L": formatUTCMilliseconds,
18311             "m": formatUTCMonthNumber,
18312             "M": formatUTCMinutes,
18313             "p": formatUTCPeriod,
18314             "Q": formatUnixTimestamp,
18315             "s": formatUnixTimestampSeconds,
18316             "S": formatUTCSeconds,
18317             "u": formatUTCWeekdayNumberMonday,
18318             "U": formatUTCWeekNumberSunday,
18319             "V": formatUTCWeekNumberISO,
18320             "w": formatUTCWeekdayNumberSunday,
18321             "W": formatUTCWeekNumberMonday,
18322             "x": null,
18323             "X": null,
18324             "y": formatUTCYear,
18325             "Y": formatUTCFullYear,
18326             "Z": formatUTCZone,
18327             "%": formatLiteralPercent
18328           };
18329
18330           var parses = {
18331             "a": parseShortWeekday,
18332             "A": parseWeekday,
18333             "b": parseShortMonth,
18334             "B": parseMonth,
18335             "c": parseLocaleDateTime,
18336             "d": parseDayOfMonth,
18337             "e": parseDayOfMonth,
18338             "f": parseMicroseconds,
18339             "H": parseHour24,
18340             "I": parseHour24,
18341             "j": parseDayOfYear,
18342             "L": parseMilliseconds,
18343             "m": parseMonthNumber,
18344             "M": parseMinutes,
18345             "p": parsePeriod,
18346             "Q": parseUnixTimestamp,
18347             "s": parseUnixTimestampSeconds,
18348             "S": parseSeconds,
18349             "u": parseWeekdayNumberMonday,
18350             "U": parseWeekNumberSunday,
18351             "V": parseWeekNumberISO,
18352             "w": parseWeekdayNumberSunday,
18353             "W": parseWeekNumberMonday,
18354             "x": parseLocaleDate,
18355             "X": parseLocaleTime,
18356             "y": parseYear,
18357             "Y": parseFullYear,
18358             "Z": parseZone,
18359             "%": parseLiteralPercent
18360           };
18361
18362           // These recursive directive definitions must be deferred.
18363           formats.x = newFormat(locale_date, formats);
18364           formats.X = newFormat(locale_time, formats);
18365           formats.c = newFormat(locale_dateTime, formats);
18366           utcFormats.x = newFormat(locale_date, utcFormats);
18367           utcFormats.X = newFormat(locale_time, utcFormats);
18368           utcFormats.c = newFormat(locale_dateTime, utcFormats);
18369
18370           function newFormat(specifier, formats) {
18371             return function(date) {
18372               var string = [],
18373                   i = -1,
18374                   j = 0,
18375                   n = specifier.length,
18376                   c,
18377                   pad,
18378                   format;
18379
18380               if (!(date instanceof Date)) date = new Date(+date);
18381
18382               while (++i < n) {
18383                 if (specifier.charCodeAt(i) === 37) {
18384                   string.push(specifier.slice(j, i));
18385                   if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
18386                   else pad = c === "e" ? " " : "0";
18387                   if (format = formats[c]) c = format(date, pad);
18388                   string.push(c);
18389                   j = i + 1;
18390                 }
18391               }
18392
18393               string.push(specifier.slice(j, i));
18394               return string.join("");
18395             };
18396           }
18397
18398           function newParse(specifier, newDate) {
18399             return function(string) {
18400               var d = newYear(1900),
18401                   i = parseSpecifier(d, specifier, string += "", 0),
18402                   week, day$1;
18403               if (i != string.length) return null;
18404
18405               // If a UNIX timestamp is specified, return it.
18406               if ("Q" in d) return new Date(d.Q);
18407
18408               // The am-pm flag is 0 for AM, and 1 for PM.
18409               if ("p" in d) d.H = d.H % 12 + d.p * 12;
18410
18411               // Convert day-of-week and week-of-year to day-of-year.
18412               if ("V" in d) {
18413                 if (d.V < 1 || d.V > 53) return null;
18414                 if (!("w" in d)) d.w = 1;
18415                 if ("Z" in d) {
18416                   week = utcDate(newYear(d.y)), day$1 = week.getUTCDay();
18417                   week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
18418                   week = utcDay.offset(week, (d.V - 1) * 7);
18419                   d.y = week.getUTCFullYear();
18420                   d.m = week.getUTCMonth();
18421                   d.d = week.getUTCDate() + (d.w + 6) % 7;
18422                 } else {
18423                   week = newDate(newYear(d.y)), day$1 = week.getDay();
18424                   week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
18425                   week = day.offset(week, (d.V - 1) * 7);
18426                   d.y = week.getFullYear();
18427                   d.m = week.getMonth();
18428                   d.d = week.getDate() + (d.w + 6) % 7;
18429                 }
18430               } else if ("W" in d || "U" in d) {
18431                 if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
18432                 day$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
18433                 d.m = 0;
18434                 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;
18435               }
18436
18437               // If a time zone is specified, all fields are interpreted as UTC and then
18438               // offset according to the specified time zone.
18439               if ("Z" in d) {
18440                 d.H += d.Z / 100 | 0;
18441                 d.M += d.Z % 100;
18442                 return utcDate(d);
18443               }
18444
18445               // Otherwise, all fields are in local time.
18446               return newDate(d);
18447             };
18448           }
18449
18450           function parseSpecifier(d, specifier, string, j) {
18451             var i = 0,
18452                 n = specifier.length,
18453                 m = string.length,
18454                 c,
18455                 parse;
18456
18457             while (i < n) {
18458               if (j >= m) return -1;
18459               c = specifier.charCodeAt(i++);
18460               if (c === 37) {
18461                 c = specifier.charAt(i++);
18462                 parse = parses[c in pads ? specifier.charAt(i++) : c];
18463                 if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
18464               } else if (c != string.charCodeAt(j++)) {
18465                 return -1;
18466               }
18467             }
18468
18469             return j;
18470           }
18471
18472           function parsePeriod(d, string, i) {
18473             var n = periodRe.exec(string.slice(i));
18474             return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18475           }
18476
18477           function parseShortWeekday(d, string, i) {
18478             var n = shortWeekdayRe.exec(string.slice(i));
18479             return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18480           }
18481
18482           function parseWeekday(d, string, i) {
18483             var n = weekdayRe.exec(string.slice(i));
18484             return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18485           }
18486
18487           function parseShortMonth(d, string, i) {
18488             var n = shortMonthRe.exec(string.slice(i));
18489             return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18490           }
18491
18492           function parseMonth(d, string, i) {
18493             var n = monthRe.exec(string.slice(i));
18494             return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18495           }
18496
18497           function parseLocaleDateTime(d, string, i) {
18498             return parseSpecifier(d, locale_dateTime, string, i);
18499           }
18500
18501           function parseLocaleDate(d, string, i) {
18502             return parseSpecifier(d, locale_date, string, i);
18503           }
18504
18505           function parseLocaleTime(d, string, i) {
18506             return parseSpecifier(d, locale_time, string, i);
18507           }
18508
18509           function formatShortWeekday(d) {
18510             return locale_shortWeekdays[d.getDay()];
18511           }
18512
18513           function formatWeekday(d) {
18514             return locale_weekdays[d.getDay()];
18515           }
18516
18517           function formatShortMonth(d) {
18518             return locale_shortMonths[d.getMonth()];
18519           }
18520
18521           function formatMonth(d) {
18522             return locale_months[d.getMonth()];
18523           }
18524
18525           function formatPeriod(d) {
18526             return locale_periods[+(d.getHours() >= 12)];
18527           }
18528
18529           function formatUTCShortWeekday(d) {
18530             return locale_shortWeekdays[d.getUTCDay()];
18531           }
18532
18533           function formatUTCWeekday(d) {
18534             return locale_weekdays[d.getUTCDay()];
18535           }
18536
18537           function formatUTCShortMonth(d) {
18538             return locale_shortMonths[d.getUTCMonth()];
18539           }
18540
18541           function formatUTCMonth(d) {
18542             return locale_months[d.getUTCMonth()];
18543           }
18544
18545           function formatUTCPeriod(d) {
18546             return locale_periods[+(d.getUTCHours() >= 12)];
18547           }
18548
18549           return {
18550             format: function(specifier) {
18551               var f = newFormat(specifier += "", formats);
18552               f.toString = function() { return specifier; };
18553               return f;
18554             },
18555             parse: function(specifier) {
18556               var p = newParse(specifier += "", localDate);
18557               p.toString = function() { return specifier; };
18558               return p;
18559             },
18560             utcFormat: function(specifier) {
18561               var f = newFormat(specifier += "", utcFormats);
18562               f.toString = function() { return specifier; };
18563               return f;
18564             },
18565             utcParse: function(specifier) {
18566               var p = newParse(specifier, utcDate);
18567               p.toString = function() { return specifier; };
18568               return p;
18569             }
18570           };
18571         }
18572
18573         var pads = {"-": "", "_": " ", "0": "0"},
18574             numberRe = /^\s*\d+/, // note: ignores next directive
18575             percentRe = /^%/,
18576             requoteRe = /[\\^$*+?|[\]().{}]/g;
18577
18578         function pad$1(value, fill, width) {
18579           var sign = value < 0 ? "-" : "",
18580               string = (sign ? -value : value) + "",
18581               length = string.length;
18582           return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
18583         }
18584
18585         function requote(s) {
18586           return s.replace(requoteRe, "\\$&");
18587         }
18588
18589         function formatRe(names) {
18590           return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
18591         }
18592
18593         function formatLookup(names) {
18594           var map = {}, i = -1, n = names.length;
18595           while (++i < n) map[names[i].toLowerCase()] = i;
18596           return map;
18597         }
18598
18599         function parseWeekdayNumberSunday(d, string, i) {
18600           var n = numberRe.exec(string.slice(i, i + 1));
18601           return n ? (d.w = +n[0], i + n[0].length) : -1;
18602         }
18603
18604         function parseWeekdayNumberMonday(d, string, i) {
18605           var n = numberRe.exec(string.slice(i, i + 1));
18606           return n ? (d.u = +n[0], i + n[0].length) : -1;
18607         }
18608
18609         function parseWeekNumberSunday(d, string, i) {
18610           var n = numberRe.exec(string.slice(i, i + 2));
18611           return n ? (d.U = +n[0], i + n[0].length) : -1;
18612         }
18613
18614         function parseWeekNumberISO(d, string, i) {
18615           var n = numberRe.exec(string.slice(i, i + 2));
18616           return n ? (d.V = +n[0], i + n[0].length) : -1;
18617         }
18618
18619         function parseWeekNumberMonday(d, string, i) {
18620           var n = numberRe.exec(string.slice(i, i + 2));
18621           return n ? (d.W = +n[0], i + n[0].length) : -1;
18622         }
18623
18624         function parseFullYear(d, string, i) {
18625           var n = numberRe.exec(string.slice(i, i + 4));
18626           return n ? (d.y = +n[0], i + n[0].length) : -1;
18627         }
18628
18629         function parseYear(d, string, i) {
18630           var n = numberRe.exec(string.slice(i, i + 2));
18631           return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
18632         }
18633
18634         function parseZone(d, string, i) {
18635           var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
18636           return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
18637         }
18638
18639         function parseMonthNumber(d, string, i) {
18640           var n = numberRe.exec(string.slice(i, i + 2));
18641           return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
18642         }
18643
18644         function parseDayOfMonth(d, string, i) {
18645           var n = numberRe.exec(string.slice(i, i + 2));
18646           return n ? (d.d = +n[0], i + n[0].length) : -1;
18647         }
18648
18649         function parseDayOfYear(d, string, i) {
18650           var n = numberRe.exec(string.slice(i, i + 3));
18651           return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
18652         }
18653
18654         function parseHour24(d, string, i) {
18655           var n = numberRe.exec(string.slice(i, i + 2));
18656           return n ? (d.H = +n[0], i + n[0].length) : -1;
18657         }
18658
18659         function parseMinutes(d, string, i) {
18660           var n = numberRe.exec(string.slice(i, i + 2));
18661           return n ? (d.M = +n[0], i + n[0].length) : -1;
18662         }
18663
18664         function parseSeconds(d, string, i) {
18665           var n = numberRe.exec(string.slice(i, i + 2));
18666           return n ? (d.S = +n[0], i + n[0].length) : -1;
18667         }
18668
18669         function parseMilliseconds(d, string, i) {
18670           var n = numberRe.exec(string.slice(i, i + 3));
18671           return n ? (d.L = +n[0], i + n[0].length) : -1;
18672         }
18673
18674         function parseMicroseconds(d, string, i) {
18675           var n = numberRe.exec(string.slice(i, i + 6));
18676           return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
18677         }
18678
18679         function parseLiteralPercent(d, string, i) {
18680           var n = percentRe.exec(string.slice(i, i + 1));
18681           return n ? i + n[0].length : -1;
18682         }
18683
18684         function parseUnixTimestamp(d, string, i) {
18685           var n = numberRe.exec(string.slice(i));
18686           return n ? (d.Q = +n[0], i + n[0].length) : -1;
18687         }
18688
18689         function parseUnixTimestampSeconds(d, string, i) {
18690           var n = numberRe.exec(string.slice(i));
18691           return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;
18692         }
18693
18694         function formatDayOfMonth(d, p) {
18695           return pad$1(d.getDate(), p, 2);
18696         }
18697
18698         function formatHour24(d, p) {
18699           return pad$1(d.getHours(), p, 2);
18700         }
18701
18702         function formatHour12(d, p) {
18703           return pad$1(d.getHours() % 12 || 12, p, 2);
18704         }
18705
18706         function formatDayOfYear(d, p) {
18707           return pad$1(1 + day.count(year(d), d), p, 3);
18708         }
18709
18710         function formatMilliseconds(d, p) {
18711           return pad$1(d.getMilliseconds(), p, 3);
18712         }
18713
18714         function formatMicroseconds(d, p) {
18715           return formatMilliseconds(d, p) + "000";
18716         }
18717
18718         function formatMonthNumber(d, p) {
18719           return pad$1(d.getMonth() + 1, p, 2);
18720         }
18721
18722         function formatMinutes(d, p) {
18723           return pad$1(d.getMinutes(), p, 2);
18724         }
18725
18726         function formatSeconds(d, p) {
18727           return pad$1(d.getSeconds(), p, 2);
18728         }
18729
18730         function formatWeekdayNumberMonday(d) {
18731           var day = d.getDay();
18732           return day === 0 ? 7 : day;
18733         }
18734
18735         function formatWeekNumberSunday(d, p) {
18736           return pad$1(sunday.count(year(d), d), p, 2);
18737         }
18738
18739         function formatWeekNumberISO(d, p) {
18740           var day = d.getDay();
18741           d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
18742           return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
18743         }
18744
18745         function formatWeekdayNumberSunday(d) {
18746           return d.getDay();
18747         }
18748
18749         function formatWeekNumberMonday(d, p) {
18750           return pad$1(monday.count(year(d), d), p, 2);
18751         }
18752
18753         function formatYear$1(d, p) {
18754           return pad$1(d.getFullYear() % 100, p, 2);
18755         }
18756
18757         function formatFullYear(d, p) {
18758           return pad$1(d.getFullYear() % 10000, p, 4);
18759         }
18760
18761         function formatZone(d) {
18762           var z = d.getTimezoneOffset();
18763           return (z > 0 ? "-" : (z *= -1, "+"))
18764               + pad$1(z / 60 | 0, "0", 2)
18765               + pad$1(z % 60, "0", 2);
18766         }
18767
18768         function formatUTCDayOfMonth(d, p) {
18769           return pad$1(d.getUTCDate(), p, 2);
18770         }
18771
18772         function formatUTCHour24(d, p) {
18773           return pad$1(d.getUTCHours(), p, 2);
18774         }
18775
18776         function formatUTCHour12(d, p) {
18777           return pad$1(d.getUTCHours() % 12 || 12, p, 2);
18778         }
18779
18780         function formatUTCDayOfYear(d, p) {
18781           return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);
18782         }
18783
18784         function formatUTCMilliseconds(d, p) {
18785           return pad$1(d.getUTCMilliseconds(), p, 3);
18786         }
18787
18788         function formatUTCMicroseconds(d, p) {
18789           return formatUTCMilliseconds(d, p) + "000";
18790         }
18791
18792         function formatUTCMonthNumber(d, p) {
18793           return pad$1(d.getUTCMonth() + 1, p, 2);
18794         }
18795
18796         function formatUTCMinutes(d, p) {
18797           return pad$1(d.getUTCMinutes(), p, 2);
18798         }
18799
18800         function formatUTCSeconds(d, p) {
18801           return pad$1(d.getUTCSeconds(), p, 2);
18802         }
18803
18804         function formatUTCWeekdayNumberMonday(d) {
18805           var dow = d.getUTCDay();
18806           return dow === 0 ? 7 : dow;
18807         }
18808
18809         function formatUTCWeekNumberSunday(d, p) {
18810           return pad$1(utcSunday.count(utcYear(d), d), p, 2);
18811         }
18812
18813         function formatUTCWeekNumberISO(d, p) {
18814           var day = d.getUTCDay();
18815           d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
18816           return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
18817         }
18818
18819         function formatUTCWeekdayNumberSunday(d) {
18820           return d.getUTCDay();
18821         }
18822
18823         function formatUTCWeekNumberMonday(d, p) {
18824           return pad$1(utcMonday.count(utcYear(d), d), p, 2);
18825         }
18826
18827         function formatUTCYear(d, p) {
18828           return pad$1(d.getUTCFullYear() % 100, p, 2);
18829         }
18830
18831         function formatUTCFullYear(d, p) {
18832           return pad$1(d.getUTCFullYear() % 10000, p, 4);
18833         }
18834
18835         function formatUTCZone() {
18836           return "+0000";
18837         }
18838
18839         function formatLiteralPercent() {
18840           return "%";
18841         }
18842
18843         function formatUnixTimestamp(d) {
18844           return +d;
18845         }
18846
18847         function formatUnixTimestampSeconds(d) {
18848           return Math.floor(+d / 1000);
18849         }
18850
18851         var locale$1;
18852         var timeFormat;
18853         var timeParse;
18854         var utcFormat;
18855         var utcParse;
18856
18857         defaultLocale$1({
18858           dateTime: "%x, %X",
18859           date: "%-m/%-d/%Y",
18860           time: "%-I:%M:%S %p",
18861           periods: ["AM", "PM"],
18862           days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
18863           shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
18864           months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
18865           shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
18866         });
18867
18868         function defaultLocale$1(definition) {
18869           locale$1 = formatLocale$1(definition);
18870           timeFormat = locale$1.format;
18871           timeParse = locale$1.parse;
18872           utcFormat = locale$1.utcFormat;
18873           utcParse = locale$1.utcParse;
18874           return locale$1;
18875         }
18876
18877         var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
18878
18879         function formatIsoNative(date) {
18880           return date.toISOString();
18881         }
18882
18883         var formatIso = Date.prototype.toISOString
18884             ? formatIsoNative
18885             : utcFormat(isoSpecifier);
18886
18887         function parseIsoNative(string) {
18888           var date = new Date(string);
18889           return isNaN(date) ? null : date;
18890         }
18891
18892         var parseIso = +new Date("2000-01-01T00:00:00.000Z")
18893             ? parseIsoNative
18894             : utcParse(isoSpecifier);
18895
18896         var durationSecond$1 = 1000,
18897             durationMinute$1 = durationSecond$1 * 60,
18898             durationHour$1 = durationMinute$1 * 60,
18899             durationDay$1 = durationHour$1 * 24,
18900             durationWeek$1 = durationDay$1 * 7,
18901             durationMonth = durationDay$1 * 30,
18902             durationYear = durationDay$1 * 365;
18903
18904         function date$1(t) {
18905           return new Date(t);
18906         }
18907
18908         function number$3(t) {
18909           return t instanceof Date ? +t : +new Date(+t);
18910         }
18911
18912         function calendar(year, month, week, day, hour, minute, second, millisecond, format) {
18913           var scale = continuous(identity$5, identity$5),
18914               invert = scale.invert,
18915               domain = scale.domain;
18916
18917           var formatMillisecond = format(".%L"),
18918               formatSecond = format(":%S"),
18919               formatMinute = format("%I:%M"),
18920               formatHour = format("%I %p"),
18921               formatDay = format("%a %d"),
18922               formatWeek = format("%b %d"),
18923               formatMonth = format("%B"),
18924               formatYear = format("%Y");
18925
18926           var tickIntervals = [
18927             [second,  1,      durationSecond$1],
18928             [second,  5,  5 * durationSecond$1],
18929             [second, 15, 15 * durationSecond$1],
18930             [second, 30, 30 * durationSecond$1],
18931             [minute,  1,      durationMinute$1],
18932             [minute,  5,  5 * durationMinute$1],
18933             [minute, 15, 15 * durationMinute$1],
18934             [minute, 30, 30 * durationMinute$1],
18935             [  hour,  1,      durationHour$1  ],
18936             [  hour,  3,  3 * durationHour$1  ],
18937             [  hour,  6,  6 * durationHour$1  ],
18938             [  hour, 12, 12 * durationHour$1  ],
18939             [   day,  1,      durationDay$1   ],
18940             [   day,  2,  2 * durationDay$1   ],
18941             [  week,  1,      durationWeek$1  ],
18942             [ month,  1,      durationMonth ],
18943             [ month,  3,  3 * durationMonth ],
18944             [  year,  1,      durationYear  ]
18945           ];
18946
18947           function tickFormat(date) {
18948             return (second(date) < date ? formatMillisecond
18949                 : minute(date) < date ? formatSecond
18950                 : hour(date) < date ? formatMinute
18951                 : day(date) < date ? formatHour
18952                 : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
18953                 : year(date) < date ? formatMonth
18954                 : formatYear)(date);
18955           }
18956
18957           function tickInterval(interval, start, stop, step) {
18958             if (interval == null) interval = 10;
18959
18960             // If a desired tick count is specified, pick a reasonable tick interval
18961             // based on the extent of the domain and a rough estimate of tick size.
18962             // Otherwise, assume interval is already a time interval and use it.
18963             if (typeof interval === "number") {
18964               var target = Math.abs(stop - start) / interval,
18965                   i = d3_bisector(function(i) { return i[2]; }).right(tickIntervals, target);
18966               if (i === tickIntervals.length) {
18967                 step = tickStep(start / durationYear, stop / durationYear, interval);
18968                 interval = year;
18969               } else if (i) {
18970                 i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
18971                 step = i[1];
18972                 interval = i[0];
18973               } else {
18974                 step = Math.max(tickStep(start, stop, interval), 1);
18975                 interval = millisecond;
18976               }
18977             }
18978
18979             return step == null ? interval : interval.every(step);
18980           }
18981
18982           scale.invert = function(y) {
18983             return new Date(invert(y));
18984           };
18985
18986           scale.domain = function(_) {
18987             return arguments.length ? domain(map$4.call(_, number$3)) : domain().map(date$1);
18988           };
18989
18990           scale.ticks = function(interval, step) {
18991             var d = domain(),
18992                 t0 = d[0],
18993                 t1 = d[d.length - 1],
18994                 r = t1 < t0,
18995                 t;
18996             if (r) t = t0, t0 = t1, t1 = t;
18997             t = tickInterval(interval, t0, t1, step);
18998             t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
18999             return r ? t.reverse() : t;
19000           };
19001
19002           scale.tickFormat = function(count, specifier) {
19003             return specifier == null ? tickFormat : format(specifier);
19004           };
19005
19006           scale.nice = function(interval, step) {
19007             var d = domain();
19008             return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
19009                 ? domain(nice(d, interval))
19010                 : scale;
19011           };
19012
19013           scale.copy = function() {
19014             return copy$1(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));
19015           };
19016
19017           return scale;
19018         }
19019
19020         function time() {
19021           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);
19022         }
19023
19024         function utcTime() {
19025           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);
19026         }
19027
19028         function transformer$2() {
19029           var x0 = 0,
19030               x1 = 1,
19031               t0,
19032               t1,
19033               k10,
19034               transform,
19035               interpolator = identity$5,
19036               clamp = false,
19037               unknown;
19038
19039           function scale(x) {
19040             return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
19041           }
19042
19043           scale.domain = function(_) {
19044             return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
19045           };
19046
19047           scale.clamp = function(_) {
19048             return arguments.length ? (clamp = !!_, scale) : clamp;
19049           };
19050
19051           scale.interpolator = function(_) {
19052             return arguments.length ? (interpolator = _, scale) : interpolator;
19053           };
19054
19055           scale.unknown = function(_) {
19056             return arguments.length ? (unknown = _, scale) : unknown;
19057           };
19058
19059           return function(t) {
19060             transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
19061             return scale;
19062           };
19063         }
19064
19065         function copy$2(source, target) {
19066           return target
19067               .domain(source.domain())
19068               .interpolator(source.interpolator())
19069               .clamp(source.clamp())
19070               .unknown(source.unknown());
19071         }
19072
19073         function sequential() {
19074           var scale = linearish(transformer$2()(identity$5));
19075
19076           scale.copy = function() {
19077             return copy$2(scale, sequential());
19078           };
19079
19080           return initInterpolator.apply(scale, arguments);
19081         }
19082
19083         function sequentialLog() {
19084           var scale = loggish(transformer$2()).domain([1, 10]);
19085
19086           scale.copy = function() {
19087             return copy$2(scale, sequentialLog()).base(scale.base());
19088           };
19089
19090           return initInterpolator.apply(scale, arguments);
19091         }
19092
19093         function sequentialSymlog() {
19094           var scale = symlogish(transformer$2());
19095
19096           scale.copy = function() {
19097             return copy$2(scale, sequentialSymlog()).constant(scale.constant());
19098           };
19099
19100           return initInterpolator.apply(scale, arguments);
19101         }
19102
19103         function sequentialPow() {
19104           var scale = powish(transformer$2());
19105
19106           scale.copy = function() {
19107             return copy$2(scale, sequentialPow()).exponent(scale.exponent());
19108           };
19109
19110           return initInterpolator.apply(scale, arguments);
19111         }
19112
19113         function sequentialSqrt() {
19114           return sequentialPow.apply(null, arguments).exponent(0.5);
19115         }
19116
19117         function sequentialQuantile() {
19118           var domain = [],
19119               interpolator = identity$5;
19120
19121           function scale(x) {
19122             if (!isNaN(x = +x)) return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1));
19123           }
19124
19125           scale.domain = function(_) {
19126             if (!arguments.length) return domain.slice();
19127             domain = [];
19128             for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
19129             domain.sort(d3_ascending);
19130             return scale;
19131           };
19132
19133           scale.interpolator = function(_) {
19134             return arguments.length ? (interpolator = _, scale) : interpolator;
19135           };
19136
19137           scale.copy = function() {
19138             return sequentialQuantile(interpolator).domain(domain);
19139           };
19140
19141           return initInterpolator.apply(scale, arguments);
19142         }
19143
19144         function transformer$3() {
19145           var x0 = 0,
19146               x1 = 0.5,
19147               x2 = 1,
19148               t0,
19149               t1,
19150               t2,
19151               k10,
19152               k21,
19153               interpolator = identity$5,
19154               transform,
19155               clamp = false,
19156               unknown;
19157
19158           function scale(x) {
19159             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));
19160           }
19161
19162           scale.domain = function(_) {
19163             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];
19164           };
19165
19166           scale.clamp = function(_) {
19167             return arguments.length ? (clamp = !!_, scale) : clamp;
19168           };
19169
19170           scale.interpolator = function(_) {
19171             return arguments.length ? (interpolator = _, scale) : interpolator;
19172           };
19173
19174           scale.unknown = function(_) {
19175             return arguments.length ? (unknown = _, scale) : unknown;
19176           };
19177
19178           return function(t) {
19179             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);
19180             return scale;
19181           };
19182         }
19183
19184         function diverging() {
19185           var scale = linearish(transformer$3()(identity$5));
19186
19187           scale.copy = function() {
19188             return copy$2(scale, diverging());
19189           };
19190
19191           return initInterpolator.apply(scale, arguments);
19192         }
19193
19194         function divergingLog() {
19195           var scale = loggish(transformer$3()).domain([0.1, 1, 10]);
19196
19197           scale.copy = function() {
19198             return copy$2(scale, divergingLog()).base(scale.base());
19199           };
19200
19201           return initInterpolator.apply(scale, arguments);
19202         }
19203
19204         function divergingSymlog() {
19205           var scale = symlogish(transformer$3());
19206
19207           scale.copy = function() {
19208             return copy$2(scale, divergingSymlog()).constant(scale.constant());
19209           };
19210
19211           return initInterpolator.apply(scale, arguments);
19212         }
19213
19214         function divergingPow() {
19215           var scale = powish(transformer$3());
19216
19217           scale.copy = function() {
19218             return copy$2(scale, divergingPow()).exponent(scale.exponent());
19219           };
19220
19221           return initInterpolator.apply(scale, arguments);
19222         }
19223
19224         function divergingSqrt() {
19225           return divergingPow.apply(null, arguments).exponent(0.5);
19226         }
19227
19228         function colors(specifier) {
19229           var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;
19230           while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6);
19231           return colors;
19232         }
19233
19234         var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
19235
19236         var Accent = colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666");
19237
19238         var Dark2 = colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666");
19239
19240         var Paired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928");
19241
19242         var Pastel1 = colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2");
19243
19244         var Pastel2 = colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc");
19245
19246         var Set1 = colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999");
19247
19248         var Set2 = colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3");
19249
19250         var Set3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f");
19251
19252         function ramp(scheme) {
19253           return rgbBasis(scheme[scheme.length - 1]);
19254         }
19255
19256         var scheme = new Array(3).concat(
19257           "d8b365f5f5f55ab4ac",
19258           "a6611adfc27d80cdc1018571",
19259           "a6611adfc27df5f5f580cdc1018571",
19260           "8c510ad8b365f6e8c3c7eae55ab4ac01665e",
19261           "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e",
19262           "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e",
19263           "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e",
19264           "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30",
19265           "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30"
19266         ).map(colors);
19267
19268         var BrBG = ramp(scheme);
19269
19270         var scheme$1 = new Array(3).concat(
19271           "af8dc3f7f7f77fbf7b",
19272           "7b3294c2a5cfa6dba0008837",
19273           "7b3294c2a5cff7f7f7a6dba0008837",
19274           "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837",
19275           "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837",
19276           "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837",
19277           "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837",
19278           "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b",
19279           "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b"
19280         ).map(colors);
19281
19282         var PRGn = ramp(scheme$1);
19283
19284         var scheme$2 = new Array(3).concat(
19285           "e9a3c9f7f7f7a1d76a",
19286           "d01c8bf1b6dab8e1864dac26",
19287           "d01c8bf1b6daf7f7f7b8e1864dac26",
19288           "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221",
19289           "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221",
19290           "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221",
19291           "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221",
19292           "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419",
19293           "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419"
19294         ).map(colors);
19295
19296         var PiYG = ramp(scheme$2);
19297
19298         var scheme$3 = new Array(3).concat(
19299           "998ec3f7f7f7f1a340",
19300           "5e3c99b2abd2fdb863e66101",
19301           "5e3c99b2abd2f7f7f7fdb863e66101",
19302           "542788998ec3d8daebfee0b6f1a340b35806",
19303           "542788998ec3d8daebf7f7f7fee0b6f1a340b35806",
19304           "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806",
19305           "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806",
19306           "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08",
19307           "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08"
19308         ).map(colors);
19309
19310         var PuOr = ramp(scheme$3);
19311
19312         var scheme$4 = new Array(3).concat(
19313           "ef8a62f7f7f767a9cf",
19314           "ca0020f4a58292c5de0571b0",
19315           "ca0020f4a582f7f7f792c5de0571b0",
19316           "b2182bef8a62fddbc7d1e5f067a9cf2166ac",
19317           "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac",
19318           "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac",
19319           "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac",
19320           "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061",
19321           "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061"
19322         ).map(colors);
19323
19324         var RdBu = ramp(scheme$4);
19325
19326         var scheme$5 = new Array(3).concat(
19327           "ef8a62ffffff999999",
19328           "ca0020f4a582bababa404040",
19329           "ca0020f4a582ffffffbababa404040",
19330           "b2182bef8a62fddbc7e0e0e09999994d4d4d",
19331           "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d",
19332           "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d",
19333           "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d",
19334           "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a",
19335           "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a"
19336         ).map(colors);
19337
19338         var RdGy = ramp(scheme$5);
19339
19340         var scheme$6 = new Array(3).concat(
19341           "fc8d59ffffbf91bfdb",
19342           "d7191cfdae61abd9e92c7bb6",
19343           "d7191cfdae61ffffbfabd9e92c7bb6",
19344           "d73027fc8d59fee090e0f3f891bfdb4575b4",
19345           "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4",
19346           "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4",
19347           "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4",
19348           "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695",
19349           "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695"
19350         ).map(colors);
19351
19352         var RdYlBu = ramp(scheme$6);
19353
19354         var scheme$7 = new Array(3).concat(
19355           "fc8d59ffffbf91cf60",
19356           "d7191cfdae61a6d96a1a9641",
19357           "d7191cfdae61ffffbfa6d96a1a9641",
19358           "d73027fc8d59fee08bd9ef8b91cf601a9850",
19359           "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850",
19360           "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850",
19361           "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850",
19362           "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837",
19363           "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837"
19364         ).map(colors);
19365
19366         var RdYlGn = ramp(scheme$7);
19367
19368         var scheme$8 = new Array(3).concat(
19369           "fc8d59ffffbf99d594",
19370           "d7191cfdae61abdda42b83ba",
19371           "d7191cfdae61ffffbfabdda42b83ba",
19372           "d53e4ffc8d59fee08be6f59899d5943288bd",
19373           "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd",
19374           "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd",
19375           "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd",
19376           "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2",
19377           "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2"
19378         ).map(colors);
19379
19380         var Spectral = ramp(scheme$8);
19381
19382         var scheme$9 = new Array(3).concat(
19383           "e5f5f999d8c92ca25f",
19384           "edf8fbb2e2e266c2a4238b45",
19385           "edf8fbb2e2e266c2a42ca25f006d2c",
19386           "edf8fbccece699d8c966c2a42ca25f006d2c",
19387           "edf8fbccece699d8c966c2a441ae76238b45005824",
19388           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824",
19389           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b"
19390         ).map(colors);
19391
19392         var BuGn = ramp(scheme$9);
19393
19394         var scheme$a = new Array(3).concat(
19395           "e0ecf49ebcda8856a7",
19396           "edf8fbb3cde38c96c688419d",
19397           "edf8fbb3cde38c96c68856a7810f7c",
19398           "edf8fbbfd3e69ebcda8c96c68856a7810f7c",
19399           "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b",
19400           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b",
19401           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b"
19402         ).map(colors);
19403
19404         var BuPu = ramp(scheme$a);
19405
19406         var scheme$b = new Array(3).concat(
19407           "e0f3dba8ddb543a2ca",
19408           "f0f9e8bae4bc7bccc42b8cbe",
19409           "f0f9e8bae4bc7bccc443a2ca0868ac",
19410           "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac",
19411           "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e",
19412           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e",
19413           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081"
19414         ).map(colors);
19415
19416         var GnBu = ramp(scheme$b);
19417
19418         var scheme$c = new Array(3).concat(
19419           "fee8c8fdbb84e34a33",
19420           "fef0d9fdcc8afc8d59d7301f",
19421           "fef0d9fdcc8afc8d59e34a33b30000",
19422           "fef0d9fdd49efdbb84fc8d59e34a33b30000",
19423           "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000",
19424           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000",
19425           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000"
19426         ).map(colors);
19427
19428         var OrRd = ramp(scheme$c);
19429
19430         var scheme$d = new Array(3).concat(
19431           "ece2f0a6bddb1c9099",
19432           "f6eff7bdc9e167a9cf02818a",
19433           "f6eff7bdc9e167a9cf1c9099016c59",
19434           "f6eff7d0d1e6a6bddb67a9cf1c9099016c59",
19435           "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450",
19436           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450",
19437           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636"
19438         ).map(colors);
19439
19440         var PuBuGn = ramp(scheme$d);
19441
19442         var scheme$e = new Array(3).concat(
19443           "ece7f2a6bddb2b8cbe",
19444           "f1eef6bdc9e174a9cf0570b0",
19445           "f1eef6bdc9e174a9cf2b8cbe045a8d",
19446           "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d",
19447           "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b",
19448           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b",
19449           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858"
19450         ).map(colors);
19451
19452         var PuBu = ramp(scheme$e);
19453
19454         var scheme$f = new Array(3).concat(
19455           "e7e1efc994c7dd1c77",
19456           "f1eef6d7b5d8df65b0ce1256",
19457           "f1eef6d7b5d8df65b0dd1c77980043",
19458           "f1eef6d4b9dac994c7df65b0dd1c77980043",
19459           "f1eef6d4b9dac994c7df65b0e7298ace125691003f",
19460           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f",
19461           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f"
19462         ).map(colors);
19463
19464         var PuRd = ramp(scheme$f);
19465
19466         var scheme$g = new Array(3).concat(
19467           "fde0ddfa9fb5c51b8a",
19468           "feebe2fbb4b9f768a1ae017e",
19469           "feebe2fbb4b9f768a1c51b8a7a0177",
19470           "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177",
19471           "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177",
19472           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177",
19473           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a"
19474         ).map(colors);
19475
19476         var RdPu = ramp(scheme$g);
19477
19478         var scheme$h = new Array(3).concat(
19479           "edf8b17fcdbb2c7fb8",
19480           "ffffcca1dab441b6c4225ea8",
19481           "ffffcca1dab441b6c42c7fb8253494",
19482           "ffffccc7e9b47fcdbb41b6c42c7fb8253494",
19483           "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84",
19484           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84",
19485           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58"
19486         ).map(colors);
19487
19488         var YlGnBu = ramp(scheme$h);
19489
19490         var scheme$i = new Array(3).concat(
19491           "f7fcb9addd8e31a354",
19492           "ffffccc2e69978c679238443",
19493           "ffffccc2e69978c67931a354006837",
19494           "ffffccd9f0a3addd8e78c67931a354006837",
19495           "ffffccd9f0a3addd8e78c67941ab5d238443005a32",
19496           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32",
19497           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529"
19498         ).map(colors);
19499
19500         var YlGn = ramp(scheme$i);
19501
19502         var scheme$j = new Array(3).concat(
19503           "fff7bcfec44fd95f0e",
19504           "ffffd4fed98efe9929cc4c02",
19505           "ffffd4fed98efe9929d95f0e993404",
19506           "ffffd4fee391fec44ffe9929d95f0e993404",
19507           "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04",
19508           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04",
19509           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506"
19510         ).map(colors);
19511
19512         var YlOrBr = ramp(scheme$j);
19513
19514         var scheme$k = new Array(3).concat(
19515           "ffeda0feb24cf03b20",
19516           "ffffb2fecc5cfd8d3ce31a1c",
19517           "ffffb2fecc5cfd8d3cf03b20bd0026",
19518           "ffffb2fed976feb24cfd8d3cf03b20bd0026",
19519           "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026",
19520           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026",
19521           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026"
19522         ).map(colors);
19523
19524         var YlOrRd = ramp(scheme$k);
19525
19526         var scheme$l = new Array(3).concat(
19527           "deebf79ecae13182bd",
19528           "eff3ffbdd7e76baed62171b5",
19529           "eff3ffbdd7e76baed63182bd08519c",
19530           "eff3ffc6dbef9ecae16baed63182bd08519c",
19531           "eff3ffc6dbef9ecae16baed64292c62171b5084594",
19532           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594",
19533           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b"
19534         ).map(colors);
19535
19536         var Blues = ramp(scheme$l);
19537
19538         var scheme$m = new Array(3).concat(
19539           "e5f5e0a1d99b31a354",
19540           "edf8e9bae4b374c476238b45",
19541           "edf8e9bae4b374c47631a354006d2c",
19542           "edf8e9c7e9c0a1d99b74c47631a354006d2c",
19543           "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32",
19544           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32",
19545           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b"
19546         ).map(colors);
19547
19548         var Greens = ramp(scheme$m);
19549
19550         var scheme$n = new Array(3).concat(
19551           "f0f0f0bdbdbd636363",
19552           "f7f7f7cccccc969696525252",
19553           "f7f7f7cccccc969696636363252525",
19554           "f7f7f7d9d9d9bdbdbd969696636363252525",
19555           "f7f7f7d9d9d9bdbdbd969696737373525252252525",
19556           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525",
19557           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000"
19558         ).map(colors);
19559
19560         var Greys = ramp(scheme$n);
19561
19562         var scheme$o = new Array(3).concat(
19563           "efedf5bcbddc756bb1",
19564           "f2f0f7cbc9e29e9ac86a51a3",
19565           "f2f0f7cbc9e29e9ac8756bb154278f",
19566           "f2f0f7dadaebbcbddc9e9ac8756bb154278f",
19567           "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486",
19568           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486",
19569           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d"
19570         ).map(colors);
19571
19572         var Purples = ramp(scheme$o);
19573
19574         var scheme$p = new Array(3).concat(
19575           "fee0d2fc9272de2d26",
19576           "fee5d9fcae91fb6a4acb181d",
19577           "fee5d9fcae91fb6a4ade2d26a50f15",
19578           "fee5d9fcbba1fc9272fb6a4ade2d26a50f15",
19579           "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d",
19580           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d",
19581           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d"
19582         ).map(colors);
19583
19584         var Reds = ramp(scheme$p);
19585
19586         var scheme$q = new Array(3).concat(
19587           "fee6cefdae6be6550d",
19588           "feeddefdbe85fd8d3cd94701",
19589           "feeddefdbe85fd8d3ce6550da63603",
19590           "feeddefdd0a2fdae6bfd8d3ce6550da63603",
19591           "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04",
19592           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04",
19593           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704"
19594         ).map(colors);
19595
19596         var Oranges = ramp(scheme$q);
19597
19598         var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
19599
19600         var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
19601
19602         var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
19603
19604         var c = cubehelix();
19605
19606         function rainbow(t) {
19607           if (t < 0 || t > 1) t -= Math.floor(t);
19608           var ts = Math.abs(t - 0.5);
19609           c.h = 360 * t - 100;
19610           c.s = 1.5 - 1.5 * ts;
19611           c.l = 0.8 - 0.9 * ts;
19612           return c + "";
19613         }
19614
19615         var c$1 = rgb(),
19616             pi_1_3 = Math.PI / 3,
19617             pi_2_3 = Math.PI * 2 / 3;
19618
19619         function sinebow(t) {
19620           var x;
19621           t = (0.5 - t) * Math.PI;
19622           c$1.r = 255 * (x = Math.sin(t)) * x;
19623           c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;
19624           c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;
19625           return c$1 + "";
19626         }
19627
19628         function ramp$1(range) {
19629           var n = range.length;
19630           return function(t) {
19631             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
19632           };
19633         }
19634
19635         var viridis = ramp$1(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
19636
19637         var magma = ramp$1(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
19638
19639         var inferno = ramp$1(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
19640
19641         var plasma = ramp$1(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
19642
19643         function constant$b(x) {
19644           return function constant() {
19645             return x;
19646           };
19647         }
19648
19649         var abs$3 = Math.abs;
19650         var atan2$1 = Math.atan2;
19651         var cos$2 = Math.cos;
19652         var max$4 = Math.max;
19653         var min$1 = Math.min;
19654         var sin$2 = Math.sin;
19655         var sqrt$2 = Math.sqrt;
19656
19657         var epsilon$3 = 1e-12;
19658         var pi$4 = Math.PI;
19659         var halfPi$3 = pi$4 / 2;
19660         var tau$4 = 2 * pi$4;
19661
19662         function acos$1(x) {
19663           return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
19664         }
19665
19666         function asin$1(x) {
19667           return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
19668         }
19669
19670         function arcInnerRadius(d) {
19671           return d.innerRadius;
19672         }
19673
19674         function arcOuterRadius(d) {
19675           return d.outerRadius;
19676         }
19677
19678         function arcStartAngle(d) {
19679           return d.startAngle;
19680         }
19681
19682         function arcEndAngle(d) {
19683           return d.endAngle;
19684         }
19685
19686         function arcPadAngle(d) {
19687           return d && d.padAngle; // Note: optional!
19688         }
19689
19690         function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
19691           var x10 = x1 - x0, y10 = y1 - y0,
19692               x32 = x3 - x2, y32 = y3 - y2,
19693               t = y32 * x10 - x32 * y10;
19694           if (t * t < epsilon$3) return;
19695           t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
19696           return [x0 + t * x10, y0 + t * y10];
19697         }
19698
19699         // Compute perpendicular offset line of length rc.
19700         // http://mathworld.wolfram.com/Circle-LineIntersection.html
19701         function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
19702           var x01 = x0 - x1,
19703               y01 = y0 - y1,
19704               lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
19705               ox = lo * y01,
19706               oy = -lo * x01,
19707               x11 = x0 + ox,
19708               y11 = y0 + oy,
19709               x10 = x1 + ox,
19710               y10 = y1 + oy,
19711               x00 = (x11 + x10) / 2,
19712               y00 = (y11 + y10) / 2,
19713               dx = x10 - x11,
19714               dy = y10 - y11,
19715               d2 = dx * dx + dy * dy,
19716               r = r1 - rc,
19717               D = x11 * y10 - x10 * y11,
19718               d = (dy < 0 ? -1 : 1) * sqrt$2(max$4(0, r * r * d2 - D * D)),
19719               cx0 = (D * dy - dx * d) / d2,
19720               cy0 = (-D * dx - dy * d) / d2,
19721               cx1 = (D * dy + dx * d) / d2,
19722               cy1 = (-D * dx + dy * d) / d2,
19723               dx0 = cx0 - x00,
19724               dy0 = cy0 - y00,
19725               dx1 = cx1 - x00,
19726               dy1 = cy1 - y00;
19727
19728           // Pick the closer of the two intersection points.
19729           // TODO Is there a faster way to determine which intersection to use?
19730           if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
19731
19732           return {
19733             cx: cx0,
19734             cy: cy0,
19735             x01: -ox,
19736             y01: -oy,
19737             x11: cx0 * (r1 / r - 1),
19738             y11: cy0 * (r1 / r - 1)
19739           };
19740         }
19741
19742         function arc() {
19743           var innerRadius = arcInnerRadius,
19744               outerRadius = arcOuterRadius,
19745               cornerRadius = constant$b(0),
19746               padRadius = null,
19747               startAngle = arcStartAngle,
19748               endAngle = arcEndAngle,
19749               padAngle = arcPadAngle,
19750               context = null;
19751
19752           function arc() {
19753             var buffer,
19754                 r,
19755                 r0 = +innerRadius.apply(this, arguments),
19756                 r1 = +outerRadius.apply(this, arguments),
19757                 a0 = startAngle.apply(this, arguments) - halfPi$3,
19758                 a1 = endAngle.apply(this, arguments) - halfPi$3,
19759                 da = abs$3(a1 - a0),
19760                 cw = a1 > a0;
19761
19762             if (!context) context = buffer = path();
19763
19764             // Ensure that the outer radius is always larger than the inner radius.
19765             if (r1 < r0) r = r1, r1 = r0, r0 = r;
19766
19767             // Is it a point?
19768             if (!(r1 > epsilon$3)) context.moveTo(0, 0);
19769
19770             // Or is it a circle or annulus?
19771             else if (da > tau$4 - epsilon$3) {
19772               context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
19773               context.arc(0, 0, r1, a0, a1, !cw);
19774               if (r0 > epsilon$3) {
19775                 context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
19776                 context.arc(0, 0, r0, a1, a0, cw);
19777               }
19778             }
19779
19780             // Or is it a circular or annular sector?
19781             else {
19782               var a01 = a0,
19783                   a11 = a1,
19784                   a00 = a0,
19785                   a10 = a1,
19786                   da0 = da,
19787                   da1 = da,
19788                   ap = padAngle.apply(this, arguments) / 2,
19789                   rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
19790                   rc = min$1(abs$3(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
19791                   rc0 = rc,
19792                   rc1 = rc,
19793                   t0,
19794                   t1;
19795
19796               // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
19797               if (rp > epsilon$3) {
19798                 var p0 = asin$1(rp / r0 * sin$2(ap)),
19799                     p1 = asin$1(rp / r1 * sin$2(ap));
19800                 if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
19801                 else da0 = 0, a00 = a10 = (a0 + a1) / 2;
19802                 if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
19803                 else da1 = 0, a01 = a11 = (a0 + a1) / 2;
19804               }
19805
19806               var x01 = r1 * cos$2(a01),
19807                   y01 = r1 * sin$2(a01),
19808                   x10 = r0 * cos$2(a10),
19809                   y10 = r0 * sin$2(a10);
19810
19811               // Apply rounded corners?
19812               if (rc > epsilon$3) {
19813                 var x11 = r1 * cos$2(a11),
19814                     y11 = r1 * sin$2(a11),
19815                     x00 = r0 * cos$2(a00),
19816                     y00 = r0 * sin$2(a00),
19817                     oc;
19818
19819                 // Restrict the corner radius according to the sector angle.
19820                 if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {
19821                   var ax = x01 - oc[0],
19822                       ay = y01 - oc[1],
19823                       bx = x11 - oc[0],
19824                       by = y11 - oc[1],
19825                       kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
19826                       lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
19827                   rc0 = min$1(rc, (r0 - lc) / (kc - 1));
19828                   rc1 = min$1(rc, (r1 - lc) / (kc + 1));
19829                 }
19830               }
19831
19832               // Is the sector collapsed to a line?
19833               if (!(da1 > epsilon$3)) context.moveTo(x01, y01);
19834
19835               // Does the sector’s outer ring have rounded corners?
19836               else if (rc1 > epsilon$3) {
19837                 t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
19838                 t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
19839
19840                 context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
19841
19842                 // Have the corners merged?
19843                 if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
19844
19845                 // Otherwise, draw the two corners and the ring.
19846                 else {
19847                   context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
19848                   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);
19849                   context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
19850                 }
19851               }
19852
19853               // Or is the outer ring just a circular arc?
19854               else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
19855
19856               // Is there no inner ring, and it’s a circular sector?
19857               // Or perhaps it’s an annular sector collapsed due to padding?
19858               if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10);
19859
19860               // Does the sector’s inner ring (or point) have rounded corners?
19861               else if (rc0 > epsilon$3) {
19862                 t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
19863                 t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
19864
19865                 context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
19866
19867                 // Have the corners merged?
19868                 if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
19869
19870                 // Otherwise, draw the two corners and the ring.
19871                 else {
19872                   context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
19873                   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);
19874                   context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
19875                 }
19876               }
19877
19878               // Or is the inner ring just a circular arc?
19879               else context.arc(0, 0, r0, a10, a00, cw);
19880             }
19881
19882             context.closePath();
19883
19884             if (buffer) return context = null, buffer + "" || null;
19885           }
19886
19887           arc.centroid = function() {
19888             var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
19889                 a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
19890             return [cos$2(a) * r, sin$2(a) * r];
19891           };
19892
19893           arc.innerRadius = function(_) {
19894             return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : innerRadius;
19895           };
19896
19897           arc.outerRadius = function(_) {
19898             return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : outerRadius;
19899           };
19900
19901           arc.cornerRadius = function(_) {
19902             return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : cornerRadius;
19903           };
19904
19905           arc.padRadius = function(_) {
19906             return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), arc) : padRadius;
19907           };
19908
19909           arc.startAngle = function(_) {
19910             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : startAngle;
19911           };
19912
19913           arc.endAngle = function(_) {
19914             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : endAngle;
19915           };
19916
19917           arc.padAngle = function(_) {
19918             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : padAngle;
19919           };
19920
19921           arc.context = function(_) {
19922             return arguments.length ? ((context = _ == null ? null : _), arc) : context;
19923           };
19924
19925           return arc;
19926         }
19927
19928         function Linear(context) {
19929           this._context = context;
19930         }
19931
19932         Linear.prototype = {
19933           areaStart: function() {
19934             this._line = 0;
19935           },
19936           areaEnd: function() {
19937             this._line = NaN;
19938           },
19939           lineStart: function() {
19940             this._point = 0;
19941           },
19942           lineEnd: function() {
19943             if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
19944             this._line = 1 - this._line;
19945           },
19946           point: function(x, y) {
19947             x = +x, y = +y;
19948             switch (this._point) {
19949               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
19950               case 1: this._point = 2; // proceed
19951               default: this._context.lineTo(x, y); break;
19952             }
19953           }
19954         };
19955
19956         function curveLinear(context) {
19957           return new Linear(context);
19958         }
19959
19960         function x$3(p) {
19961           return p[0];
19962         }
19963
19964         function y$3(p) {
19965           return p[1];
19966         }
19967
19968         function line() {
19969           var x = x$3,
19970               y = y$3,
19971               defined = constant$b(true),
19972               context = null,
19973               curve = curveLinear,
19974               output = null;
19975
19976           function line(data) {
19977             var i,
19978                 n = data.length,
19979                 d,
19980                 defined0 = false,
19981                 buffer;
19982
19983             if (context == null) output = curve(buffer = path());
19984
19985             for (i = 0; i <= n; ++i) {
19986               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
19987                 if (defined0 = !defined0) output.lineStart();
19988                 else output.lineEnd();
19989               }
19990               if (defined0) output.point(+x(d, i, data), +y(d, i, data));
19991             }
19992
19993             if (buffer) return output = null, buffer + "" || null;
19994           }
19995
19996           line.x = function(_) {
19997             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), line) : x;
19998           };
19999
20000           line.y = function(_) {
20001             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), line) : y;
20002           };
20003
20004           line.defined = function(_) {
20005             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), line) : defined;
20006           };
20007
20008           line.curve = function(_) {
20009             return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
20010           };
20011
20012           line.context = function(_) {
20013             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
20014           };
20015
20016           return line;
20017         }
20018
20019         function area$1() {
20020           var x0 = x$3,
20021               x1 = null,
20022               y0 = constant$b(0),
20023               y1 = y$3,
20024               defined = constant$b(true),
20025               context = null,
20026               curve = curveLinear,
20027               output = null;
20028
20029           function area(data) {
20030             var i,
20031                 j,
20032                 k,
20033                 n = data.length,
20034                 d,
20035                 defined0 = false,
20036                 buffer,
20037                 x0z = new Array(n),
20038                 y0z = new Array(n);
20039
20040             if (context == null) output = curve(buffer = path());
20041
20042             for (i = 0; i <= n; ++i) {
20043               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
20044                 if (defined0 = !defined0) {
20045                   j = i;
20046                   output.areaStart();
20047                   output.lineStart();
20048                 } else {
20049                   output.lineEnd();
20050                   output.lineStart();
20051                   for (k = i - 1; k >= j; --k) {
20052                     output.point(x0z[k], y0z[k]);
20053                   }
20054                   output.lineEnd();
20055                   output.areaEnd();
20056                 }
20057               }
20058               if (defined0) {
20059                 x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
20060                 output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
20061               }
20062             }
20063
20064             if (buffer) return output = null, buffer + "" || null;
20065           }
20066
20067           function arealine() {
20068             return line().defined(defined).curve(curve).context(context);
20069           }
20070
20071           area.x = function(_) {
20072             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), x1 = null, area) : x0;
20073           };
20074
20075           area.x0 = function(_) {
20076             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), area) : x0;
20077           };
20078
20079           area.x1 = function(_) {
20080             return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : x1;
20081           };
20082
20083           area.y = function(_) {
20084             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), y1 = null, area) : y0;
20085           };
20086
20087           area.y0 = function(_) {
20088             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), area) : y0;
20089           };
20090
20091           area.y1 = function(_) {
20092             return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : y1;
20093           };
20094
20095           area.lineX0 =
20096           area.lineY0 = function() {
20097             return arealine().x(x0).y(y0);
20098           };
20099
20100           area.lineY1 = function() {
20101             return arealine().x(x0).y(y1);
20102           };
20103
20104           area.lineX1 = function() {
20105             return arealine().x(x1).y(y0);
20106           };
20107
20108           area.defined = function(_) {
20109             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), area) : defined;
20110           };
20111
20112           area.curve = function(_) {
20113             return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
20114           };
20115
20116           area.context = function(_) {
20117             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
20118           };
20119
20120           return area;
20121         }
20122
20123         function descending(a, b) {
20124           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
20125         }
20126
20127         function identity$7(d) {
20128           return d;
20129         }
20130
20131         function pie() {
20132           var value = identity$7,
20133               sortValues = descending,
20134               sort = null,
20135               startAngle = constant$b(0),
20136               endAngle = constant$b(tau$4),
20137               padAngle = constant$b(0);
20138
20139           function pie(data) {
20140             var i,
20141                 n = data.length,
20142                 j,
20143                 k,
20144                 sum = 0,
20145                 index = new Array(n),
20146                 arcs = new Array(n),
20147                 a0 = +startAngle.apply(this, arguments),
20148                 da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),
20149                 a1,
20150                 p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
20151                 pa = p * (da < 0 ? -1 : 1),
20152                 v;
20153
20154             for (i = 0; i < n; ++i) {
20155               if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
20156                 sum += v;
20157               }
20158             }
20159
20160             // Optionally sort the arcs by previously-computed values or by data.
20161             if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
20162             else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
20163
20164             // Compute the arcs! They are stored in the original data's order.
20165             for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
20166               j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
20167                 data: data[j],
20168                 index: i,
20169                 value: v,
20170                 startAngle: a0,
20171                 endAngle: a1,
20172                 padAngle: p
20173               };
20174             }
20175
20176             return arcs;
20177           }
20178
20179           pie.value = function(_) {
20180             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), pie) : value;
20181           };
20182
20183           pie.sortValues = function(_) {
20184             return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
20185           };
20186
20187           pie.sort = function(_) {
20188             return arguments.length ? (sort = _, sortValues = null, pie) : sort;
20189           };
20190
20191           pie.startAngle = function(_) {
20192             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : startAngle;
20193           };
20194
20195           pie.endAngle = function(_) {
20196             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : endAngle;
20197           };
20198
20199           pie.padAngle = function(_) {
20200             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : padAngle;
20201           };
20202
20203           return pie;
20204         }
20205
20206         var curveRadialLinear = curveRadial(curveLinear);
20207
20208         function Radial(curve) {
20209           this._curve = curve;
20210         }
20211
20212         Radial.prototype = {
20213           areaStart: function() {
20214             this._curve.areaStart();
20215           },
20216           areaEnd: function() {
20217             this._curve.areaEnd();
20218           },
20219           lineStart: function() {
20220             this._curve.lineStart();
20221           },
20222           lineEnd: function() {
20223             this._curve.lineEnd();
20224           },
20225           point: function(a, r) {
20226             this._curve.point(r * Math.sin(a), r * -Math.cos(a));
20227           }
20228         };
20229
20230         function curveRadial(curve) {
20231
20232           function radial(context) {
20233             return new Radial(curve(context));
20234           }
20235
20236           radial._curve = curve;
20237
20238           return radial;
20239         }
20240
20241         function lineRadial(l) {
20242           var c = l.curve;
20243
20244           l.angle = l.x, delete l.x;
20245           l.radius = l.y, delete l.y;
20246
20247           l.curve = function(_) {
20248             return arguments.length ? c(curveRadial(_)) : c()._curve;
20249           };
20250
20251           return l;
20252         }
20253
20254         function lineRadial$1() {
20255           return lineRadial(line().curve(curveRadialLinear));
20256         }
20257
20258         function areaRadial() {
20259           var a = area$1().curve(curveRadialLinear),
20260               c = a.curve,
20261               x0 = a.lineX0,
20262               x1 = a.lineX1,
20263               y0 = a.lineY0,
20264               y1 = a.lineY1;
20265
20266           a.angle = a.x, delete a.x;
20267           a.startAngle = a.x0, delete a.x0;
20268           a.endAngle = a.x1, delete a.x1;
20269           a.radius = a.y, delete a.y;
20270           a.innerRadius = a.y0, delete a.y0;
20271           a.outerRadius = a.y1, delete a.y1;
20272           a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
20273           a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
20274           a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
20275           a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
20276
20277           a.curve = function(_) {
20278             return arguments.length ? c(curveRadial(_)) : c()._curve;
20279           };
20280
20281           return a;
20282         }
20283
20284         function pointRadial(x, y) {
20285           return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
20286         }
20287
20288         var slice$a = Array.prototype.slice;
20289
20290         function linkSource(d) {
20291           return d.source;
20292         }
20293
20294         function linkTarget(d) {
20295           return d.target;
20296         }
20297
20298         function link$2(curve) {
20299           var source = linkSource,
20300               target = linkTarget,
20301               x = x$3,
20302               y = y$3,
20303               context = null;
20304
20305           function link() {
20306             var buffer, argv = slice$a.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
20307             if (!context) context = buffer = path();
20308             curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));
20309             if (buffer) return context = null, buffer + "" || null;
20310           }
20311
20312           link.source = function(_) {
20313             return arguments.length ? (source = _, link) : source;
20314           };
20315
20316           link.target = function(_) {
20317             return arguments.length ? (target = _, link) : target;
20318           };
20319
20320           link.x = function(_) {
20321             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), link) : x;
20322           };
20323
20324           link.y = function(_) {
20325             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), link) : y;
20326           };
20327
20328           link.context = function(_) {
20329             return arguments.length ? ((context = _ == null ? null : _), link) : context;
20330           };
20331
20332           return link;
20333         }
20334
20335         function curveHorizontal(context, x0, y0, x1, y1) {
20336           context.moveTo(x0, y0);
20337           context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
20338         }
20339
20340         function curveVertical(context, x0, y0, x1, y1) {
20341           context.moveTo(x0, y0);
20342           context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
20343         }
20344
20345         function curveRadial$1(context, x0, y0, x1, y1) {
20346           var p0 = pointRadial(x0, y0),
20347               p1 = pointRadial(x0, y0 = (y0 + y1) / 2),
20348               p2 = pointRadial(x1, y0),
20349               p3 = pointRadial(x1, y1);
20350           context.moveTo(p0[0], p0[1]);
20351           context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
20352         }
20353
20354         function linkHorizontal() {
20355           return link$2(curveHorizontal);
20356         }
20357
20358         function linkVertical() {
20359           return link$2(curveVertical);
20360         }
20361
20362         function linkRadial() {
20363           var l = link$2(curveRadial$1);
20364           l.angle = l.x, delete l.x;
20365           l.radius = l.y, delete l.y;
20366           return l;
20367         }
20368
20369         var circle$2 = {
20370           draw: function(context, size) {
20371             var r = Math.sqrt(size / pi$4);
20372             context.moveTo(r, 0);
20373             context.arc(0, 0, r, 0, tau$4);
20374           }
20375         };
20376
20377         var cross$2 = {
20378           draw: function(context, size) {
20379             var r = Math.sqrt(size / 5) / 2;
20380             context.moveTo(-3 * r, -r);
20381             context.lineTo(-r, -r);
20382             context.lineTo(-r, -3 * r);
20383             context.lineTo(r, -3 * r);
20384             context.lineTo(r, -r);
20385             context.lineTo(3 * r, -r);
20386             context.lineTo(3 * r, r);
20387             context.lineTo(r, r);
20388             context.lineTo(r, 3 * r);
20389             context.lineTo(-r, 3 * r);
20390             context.lineTo(-r, r);
20391             context.lineTo(-3 * r, r);
20392             context.closePath();
20393           }
20394         };
20395
20396         var tan30 = Math.sqrt(1 / 3),
20397             tan30_2 = tan30 * 2;
20398
20399         var diamond = {
20400           draw: function(context, size) {
20401             var y = Math.sqrt(size / tan30_2),
20402                 x = y * tan30;
20403             context.moveTo(0, -y);
20404             context.lineTo(x, 0);
20405             context.lineTo(0, y);
20406             context.lineTo(-x, 0);
20407             context.closePath();
20408           }
20409         };
20410
20411         var ka = 0.89081309152928522810,
20412             kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10),
20413             kx = Math.sin(tau$4 / 10) * kr,
20414             ky = -Math.cos(tau$4 / 10) * kr;
20415
20416         var star = {
20417           draw: function(context, size) {
20418             var r = Math.sqrt(size * ka),
20419                 x = kx * r,
20420                 y = ky * r;
20421             context.moveTo(0, -r);
20422             context.lineTo(x, y);
20423             for (var i = 1; i < 5; ++i) {
20424               var a = tau$4 * i / 5,
20425                   c = Math.cos(a),
20426                   s = Math.sin(a);
20427               context.lineTo(s * r, -c * r);
20428               context.lineTo(c * x - s * y, s * x + c * y);
20429             }
20430             context.closePath();
20431           }
20432         };
20433
20434         var square = {
20435           draw: function(context, size) {
20436             var w = Math.sqrt(size),
20437                 x = -w / 2;
20438             context.rect(x, x, w, w);
20439           }
20440         };
20441
20442         var sqrt3 = Math.sqrt(3);
20443
20444         var triangle = {
20445           draw: function(context, size) {
20446             var y = -Math.sqrt(size / (sqrt3 * 3));
20447             context.moveTo(0, y * 2);
20448             context.lineTo(-sqrt3 * y, -y);
20449             context.lineTo(sqrt3 * y, -y);
20450             context.closePath();
20451           }
20452         };
20453
20454         var c$2 = -0.5,
20455             s = Math.sqrt(3) / 2,
20456             k = 1 / Math.sqrt(12),
20457             a = (k / 2 + 1) * 3;
20458
20459         var wye = {
20460           draw: function(context, size) {
20461             var r = Math.sqrt(size / a),
20462                 x0 = r / 2,
20463                 y0 = r * k,
20464                 x1 = x0,
20465                 y1 = r * k + r,
20466                 x2 = -x1,
20467                 y2 = y1;
20468             context.moveTo(x0, y0);
20469             context.lineTo(x1, y1);
20470             context.lineTo(x2, y2);
20471             context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0);
20472             context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1);
20473             context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2);
20474             context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0);
20475             context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1);
20476             context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2);
20477             context.closePath();
20478           }
20479         };
20480
20481         var symbols = [
20482           circle$2,
20483           cross$2,
20484           diamond,
20485           square,
20486           star,
20487           triangle,
20488           wye
20489         ];
20490
20491         function symbol() {
20492           var type = constant$b(circle$2),
20493               size = constant$b(64),
20494               context = null;
20495
20496           function symbol() {
20497             var buffer;
20498             if (!context) context = buffer = path();
20499             type.apply(this, arguments).draw(context, +size.apply(this, arguments));
20500             if (buffer) return context = null, buffer + "" || null;
20501           }
20502
20503           symbol.type = function(_) {
20504             return arguments.length ? (type = typeof _ === "function" ? _ : constant$b(_), symbol) : type;
20505           };
20506
20507           symbol.size = function(_) {
20508             return arguments.length ? (size = typeof _ === "function" ? _ : constant$b(+_), symbol) : size;
20509           };
20510
20511           symbol.context = function(_) {
20512             return arguments.length ? (context = _ == null ? null : _, symbol) : context;
20513           };
20514
20515           return symbol;
20516         }
20517
20518         function noop$5() {}
20519
20520         function point$2(that, x, y) {
20521           that._context.bezierCurveTo(
20522             (2 * that._x0 + that._x1) / 3,
20523             (2 * that._y0 + that._y1) / 3,
20524             (that._x0 + 2 * that._x1) / 3,
20525             (that._y0 + 2 * that._y1) / 3,
20526             (that._x0 + 4 * that._x1 + x) / 6,
20527             (that._y0 + 4 * that._y1 + y) / 6
20528           );
20529         }
20530
20531         function Basis(context) {
20532           this._context = context;
20533         }
20534
20535         Basis.prototype = {
20536           areaStart: function() {
20537             this._line = 0;
20538           },
20539           areaEnd: function() {
20540             this._line = NaN;
20541           },
20542           lineStart: function() {
20543             this._x0 = this._x1 =
20544             this._y0 = this._y1 = NaN;
20545             this._point = 0;
20546           },
20547           lineEnd: function() {
20548             switch (this._point) {
20549               case 3: point$2(this, this._x1, this._y1); // proceed
20550               case 2: this._context.lineTo(this._x1, this._y1); break;
20551             }
20552             if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
20553             this._line = 1 - this._line;
20554           },
20555           point: function(x, y) {
20556             x = +x, y = +y;
20557             switch (this._point) {
20558               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
20559               case 1: this._point = 2; break;
20560               case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
20561               default: point$2(this, x, y); break;
20562             }
20563             this._x0 = this._x1, this._x1 = x;
20564             this._y0 = this._y1, this._y1 = y;
20565           }
20566         };
20567
20568         function basis$2(context) {
20569           return new Basis(context);
20570         }
20571
20572         function BasisClosed(context) {
20573           this._context = context;
20574         }
20575
20576         BasisClosed.prototype = {
20577           areaStart: noop$5,
20578           areaEnd: noop$5,
20579           lineStart: function() {
20580             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
20581             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
20582             this._point = 0;
20583           },
20584           lineEnd: function() {
20585             switch (this._point) {
20586               case 1: {
20587                 this._context.moveTo(this._x2, this._y2);
20588                 this._context.closePath();
20589                 break;
20590               }
20591               case 2: {
20592                 this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
20593                 this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
20594                 this._context.closePath();
20595                 break;
20596               }
20597               case 3: {
20598                 this.point(this._x2, this._y2);
20599                 this.point(this._x3, this._y3);
20600                 this.point(this._x4, this._y4);
20601                 break;
20602               }
20603             }
20604           },
20605           point: function(x, y) {
20606             x = +x, y = +y;
20607             switch (this._point) {
20608               case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
20609               case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
20610               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;
20611               default: point$2(this, x, y); break;
20612             }
20613             this._x0 = this._x1, this._x1 = x;
20614             this._y0 = this._y1, this._y1 = y;
20615           }
20616         };
20617
20618         function basisClosed$1(context) {
20619           return new BasisClosed(context);
20620         }
20621
20622         function BasisOpen(context) {
20623           this._context = context;
20624         }
20625
20626         BasisOpen.prototype = {
20627           areaStart: function() {
20628             this._line = 0;
20629           },
20630           areaEnd: function() {
20631             this._line = NaN;
20632           },
20633           lineStart: function() {
20634             this._x0 = this._x1 =
20635             this._y0 = this._y1 = NaN;
20636             this._point = 0;
20637           },
20638           lineEnd: function() {
20639             if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
20640             this._line = 1 - this._line;
20641           },
20642           point: function(x, y) {
20643             x = +x, y = +y;
20644             switch (this._point) {
20645               case 0: this._point = 1; break;
20646               case 1: this._point = 2; break;
20647               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;
20648               case 3: this._point = 4; // proceed
20649               default: point$2(this, x, y); break;
20650             }
20651             this._x0 = this._x1, this._x1 = x;
20652             this._y0 = this._y1, this._y1 = y;
20653           }
20654         };
20655
20656         function basisOpen(context) {
20657           return new BasisOpen(context);
20658         }
20659
20660         function Bundle(context, beta) {
20661           this._basis = new Basis(context);
20662           this._beta = beta;
20663         }
20664
20665         Bundle.prototype = {
20666           lineStart: function() {
20667             this._x = [];
20668             this._y = [];
20669             this._basis.lineStart();
20670           },
20671           lineEnd: function() {
20672             var x = this._x,
20673                 y = this._y,
20674                 j = x.length - 1;
20675
20676             if (j > 0) {
20677               var x0 = x[0],
20678                   y0 = y[0],
20679                   dx = x[j] - x0,
20680                   dy = y[j] - y0,
20681                   i = -1,
20682                   t;
20683
20684               while (++i <= j) {
20685                 t = i / j;
20686                 this._basis.point(
20687                   this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
20688                   this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
20689                 );
20690               }
20691             }
20692
20693             this._x = this._y = null;
20694             this._basis.lineEnd();
20695           },
20696           point: function(x, y) {
20697             this._x.push(+x);
20698             this._y.push(+y);
20699           }
20700         };
20701
20702         var bundle = (function custom(beta) {
20703
20704           function bundle(context) {
20705             return beta === 1 ? new Basis(context) : new Bundle(context, beta);
20706           }
20707
20708           bundle.beta = function(beta) {
20709             return custom(+beta);
20710           };
20711
20712           return bundle;
20713         })(0.85);
20714
20715         function point$3(that, x, y) {
20716           that._context.bezierCurveTo(
20717             that._x1 + that._k * (that._x2 - that._x0),
20718             that._y1 + that._k * (that._y2 - that._y0),
20719             that._x2 + that._k * (that._x1 - x),
20720             that._y2 + that._k * (that._y1 - y),
20721             that._x2,
20722             that._y2
20723           );
20724         }
20725
20726         function Cardinal(context, tension) {
20727           this._context = context;
20728           this._k = (1 - tension) / 6;
20729         }
20730
20731         Cardinal.prototype = {
20732           areaStart: function() {
20733             this._line = 0;
20734           },
20735           areaEnd: function() {
20736             this._line = NaN;
20737           },
20738           lineStart: function() {
20739             this._x0 = this._x1 = this._x2 =
20740             this._y0 = this._y1 = this._y2 = NaN;
20741             this._point = 0;
20742           },
20743           lineEnd: function() {
20744             switch (this._point) {
20745               case 2: this._context.lineTo(this._x2, this._y2); break;
20746               case 3: point$3(this, this._x1, this._y1); break;
20747             }
20748             if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
20749             this._line = 1 - this._line;
20750           },
20751           point: function(x, y) {
20752             x = +x, y = +y;
20753             switch (this._point) {
20754               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
20755               case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
20756               case 2: this._point = 3; // proceed
20757               default: point$3(this, x, y); break;
20758             }
20759             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20760             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20761           }
20762         };
20763
20764         var cardinal = (function custom(tension) {
20765
20766           function cardinal(context) {
20767             return new Cardinal(context, tension);
20768           }
20769
20770           cardinal.tension = function(tension) {
20771             return custom(+tension);
20772           };
20773
20774           return cardinal;
20775         })(0);
20776
20777         function CardinalClosed(context, tension) {
20778           this._context = context;
20779           this._k = (1 - tension) / 6;
20780         }
20781
20782         CardinalClosed.prototype = {
20783           areaStart: noop$5,
20784           areaEnd: noop$5,
20785           lineStart: function() {
20786             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
20787             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
20788             this._point = 0;
20789           },
20790           lineEnd: function() {
20791             switch (this._point) {
20792               case 1: {
20793                 this._context.moveTo(this._x3, this._y3);
20794                 this._context.closePath();
20795                 break;
20796               }
20797               case 2: {
20798                 this._context.lineTo(this._x3, this._y3);
20799                 this._context.closePath();
20800                 break;
20801               }
20802               case 3: {
20803                 this.point(this._x3, this._y3);
20804                 this.point(this._x4, this._y4);
20805                 this.point(this._x5, this._y5);
20806                 break;
20807               }
20808             }
20809           },
20810           point: function(x, y) {
20811             x = +x, y = +y;
20812             switch (this._point) {
20813               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
20814               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
20815               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
20816               default: point$3(this, x, y); break;
20817             }
20818             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20819             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20820           }
20821         };
20822
20823         var cardinalClosed = (function custom(tension) {
20824
20825           function cardinal(context) {
20826             return new CardinalClosed(context, tension);
20827           }
20828
20829           cardinal.tension = function(tension) {
20830             return custom(+tension);
20831           };
20832
20833           return cardinal;
20834         })(0);
20835
20836         function CardinalOpen(context, tension) {
20837           this._context = context;
20838           this._k = (1 - tension) / 6;
20839         }
20840
20841         CardinalOpen.prototype = {
20842           areaStart: function() {
20843             this._line = 0;
20844           },
20845           areaEnd: function() {
20846             this._line = NaN;
20847           },
20848           lineStart: function() {
20849             this._x0 = this._x1 = this._x2 =
20850             this._y0 = this._y1 = this._y2 = NaN;
20851             this._point = 0;
20852           },
20853           lineEnd: function() {
20854             if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
20855             this._line = 1 - this._line;
20856           },
20857           point: function(x, y) {
20858             x = +x, y = +y;
20859             switch (this._point) {
20860               case 0: this._point = 1; break;
20861               case 1: this._point = 2; break;
20862               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
20863               case 3: this._point = 4; // proceed
20864               default: point$3(this, x, y); break;
20865             }
20866             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20867             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20868           }
20869         };
20870
20871         var cardinalOpen = (function custom(tension) {
20872
20873           function cardinal(context) {
20874             return new CardinalOpen(context, tension);
20875           }
20876
20877           cardinal.tension = function(tension) {
20878             return custom(+tension);
20879           };
20880
20881           return cardinal;
20882         })(0);
20883
20884         function point$4(that, x, y) {
20885           var x1 = that._x1,
20886               y1 = that._y1,
20887               x2 = that._x2,
20888               y2 = that._y2;
20889
20890           if (that._l01_a > epsilon$3) {
20891             var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
20892                 n = 3 * that._l01_a * (that._l01_a + that._l12_a);
20893             x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
20894             y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
20895           }
20896
20897           if (that._l23_a > epsilon$3) {
20898             var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
20899                 m = 3 * that._l23_a * (that._l23_a + that._l12_a);
20900             x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
20901             y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
20902           }
20903
20904           that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
20905         }
20906
20907         function CatmullRom(context, alpha) {
20908           this._context = context;
20909           this._alpha = alpha;
20910         }
20911
20912         CatmullRom.prototype = {
20913           areaStart: function() {
20914             this._line = 0;
20915           },
20916           areaEnd: function() {
20917             this._line = NaN;
20918           },
20919           lineStart: function() {
20920             this._x0 = this._x1 = this._x2 =
20921             this._y0 = this._y1 = this._y2 = NaN;
20922             this._l01_a = this._l12_a = this._l23_a =
20923             this._l01_2a = this._l12_2a = this._l23_2a =
20924             this._point = 0;
20925           },
20926           lineEnd: function() {
20927             switch (this._point) {
20928               case 2: this._context.lineTo(this._x2, this._y2); break;
20929               case 3: this.point(this._x2, this._y2); break;
20930             }
20931             if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
20932             this._line = 1 - this._line;
20933           },
20934           point: function(x, y) {
20935             x = +x, y = +y;
20936
20937             if (this._point) {
20938               var x23 = this._x2 - x,
20939                   y23 = this._y2 - y;
20940               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
20941             }
20942
20943             switch (this._point) {
20944               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
20945               case 1: this._point = 2; break;
20946               case 2: this._point = 3; // proceed
20947               default: point$4(this, x, y); break;
20948             }
20949
20950             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
20951             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
20952             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20953             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20954           }
20955         };
20956
20957         var catmullRom = (function custom(alpha) {
20958
20959           function catmullRom(context) {
20960             return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
20961           }
20962
20963           catmullRom.alpha = function(alpha) {
20964             return custom(+alpha);
20965           };
20966
20967           return catmullRom;
20968         })(0.5);
20969
20970         function CatmullRomClosed(context, alpha) {
20971           this._context = context;
20972           this._alpha = alpha;
20973         }
20974
20975         CatmullRomClosed.prototype = {
20976           areaStart: noop$5,
20977           areaEnd: noop$5,
20978           lineStart: function() {
20979             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
20980             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
20981             this._l01_a = this._l12_a = this._l23_a =
20982             this._l01_2a = this._l12_2a = this._l23_2a =
20983             this._point = 0;
20984           },
20985           lineEnd: function() {
20986             switch (this._point) {
20987               case 1: {
20988                 this._context.moveTo(this._x3, this._y3);
20989                 this._context.closePath();
20990                 break;
20991               }
20992               case 2: {
20993                 this._context.lineTo(this._x3, this._y3);
20994                 this._context.closePath();
20995                 break;
20996               }
20997               case 3: {
20998                 this.point(this._x3, this._y3);
20999                 this.point(this._x4, this._y4);
21000                 this.point(this._x5, this._y5);
21001                 break;
21002               }
21003             }
21004           },
21005           point: function(x, y) {
21006             x = +x, y = +y;
21007
21008             if (this._point) {
21009               var x23 = this._x2 - x,
21010                   y23 = this._y2 - y;
21011               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
21012             }
21013
21014             switch (this._point) {
21015               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
21016               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
21017               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
21018               default: point$4(this, x, y); break;
21019             }
21020
21021             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
21022             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
21023             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
21024             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
21025           }
21026         };
21027
21028         var catmullRomClosed = (function custom(alpha) {
21029
21030           function catmullRom(context) {
21031             return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
21032           }
21033
21034           catmullRom.alpha = function(alpha) {
21035             return custom(+alpha);
21036           };
21037
21038           return catmullRom;
21039         })(0.5);
21040
21041         function CatmullRomOpen(context, alpha) {
21042           this._context = context;
21043           this._alpha = alpha;
21044         }
21045
21046         CatmullRomOpen.prototype = {
21047           areaStart: function() {
21048             this._line = 0;
21049           },
21050           areaEnd: function() {
21051             this._line = NaN;
21052           },
21053           lineStart: function() {
21054             this._x0 = this._x1 = this._x2 =
21055             this._y0 = this._y1 = this._y2 = NaN;
21056             this._l01_a = this._l12_a = this._l23_a =
21057             this._l01_2a = this._l12_2a = this._l23_2a =
21058             this._point = 0;
21059           },
21060           lineEnd: function() {
21061             if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
21062             this._line = 1 - this._line;
21063           },
21064           point: function(x, y) {
21065             x = +x, y = +y;
21066
21067             if (this._point) {
21068               var x23 = this._x2 - x,
21069                   y23 = this._y2 - y;
21070               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
21071             }
21072
21073             switch (this._point) {
21074               case 0: this._point = 1; break;
21075               case 1: this._point = 2; break;
21076               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
21077               case 3: this._point = 4; // proceed
21078               default: point$4(this, x, y); break;
21079             }
21080
21081             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
21082             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
21083             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
21084             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
21085           }
21086         };
21087
21088         var catmullRomOpen = (function custom(alpha) {
21089
21090           function catmullRom(context) {
21091             return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
21092           }
21093
21094           catmullRom.alpha = function(alpha) {
21095             return custom(+alpha);
21096           };
21097
21098           return catmullRom;
21099         })(0.5);
21100
21101         function LinearClosed(context) {
21102           this._context = context;
21103         }
21104
21105         LinearClosed.prototype = {
21106           areaStart: noop$5,
21107           areaEnd: noop$5,
21108           lineStart: function() {
21109             this._point = 0;
21110           },
21111           lineEnd: function() {
21112             if (this._point) this._context.closePath();
21113           },
21114           point: function(x, y) {
21115             x = +x, y = +y;
21116             if (this._point) this._context.lineTo(x, y);
21117             else this._point = 1, this._context.moveTo(x, y);
21118           }
21119         };
21120
21121         function linearClosed(context) {
21122           return new LinearClosed(context);
21123         }
21124
21125         function sign$3(x) {
21126           return x < 0 ? -1 : 1;
21127         }
21128
21129         // Calculate the slopes of the tangents (Hermite-type interpolation) based on
21130         // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
21131         // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
21132         // NOV(II), P. 443, 1990.
21133         function slope3(that, x2, y2) {
21134           var h0 = that._x1 - that._x0,
21135               h1 = x2 - that._x1,
21136               s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
21137               s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
21138               p = (s0 * h1 + s1 * h0) / (h0 + h1);
21139           return (sign$3(s0) + sign$3(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
21140         }
21141
21142         // Calculate a one-sided slope.
21143         function slope2(that, t) {
21144           var h = that._x1 - that._x0;
21145           return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
21146         }
21147
21148         // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
21149         // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
21150         // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
21151         function point$5(that, t0, t1) {
21152           var x0 = that._x0,
21153               y0 = that._y0,
21154               x1 = that._x1,
21155               y1 = that._y1,
21156               dx = (x1 - x0) / 3;
21157           that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
21158         }
21159
21160         function MonotoneX(context) {
21161           this._context = context;
21162         }
21163
21164         MonotoneX.prototype = {
21165           areaStart: function() {
21166             this._line = 0;
21167           },
21168           areaEnd: function() {
21169             this._line = NaN;
21170           },
21171           lineStart: function() {
21172             this._x0 = this._x1 =
21173             this._y0 = this._y1 =
21174             this._t0 = NaN;
21175             this._point = 0;
21176           },
21177           lineEnd: function() {
21178             switch (this._point) {
21179               case 2: this._context.lineTo(this._x1, this._y1); break;
21180               case 3: point$5(this, this._t0, slope2(this, this._t0)); break;
21181             }
21182             if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
21183             this._line = 1 - this._line;
21184           },
21185           point: function(x, y) {
21186             var t1 = NaN;
21187
21188             x = +x, y = +y;
21189             if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
21190             switch (this._point) {
21191               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
21192               case 1: this._point = 2; break;
21193               case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
21194               default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;
21195             }
21196
21197             this._x0 = this._x1, this._x1 = x;
21198             this._y0 = this._y1, this._y1 = y;
21199             this._t0 = t1;
21200           }
21201         };
21202
21203         function MonotoneY(context) {
21204           this._context = new ReflectContext(context);
21205         }
21206
21207         (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
21208           MonotoneX.prototype.point.call(this, y, x);
21209         };
21210
21211         function ReflectContext(context) {
21212           this._context = context;
21213         }
21214
21215         ReflectContext.prototype = {
21216           moveTo: function(x, y) { this._context.moveTo(y, x); },
21217           closePath: function() { this._context.closePath(); },
21218           lineTo: function(x, y) { this._context.lineTo(y, x); },
21219           bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
21220         };
21221
21222         function monotoneX(context) {
21223           return new MonotoneX(context);
21224         }
21225
21226         function monotoneY(context) {
21227           return new MonotoneY(context);
21228         }
21229
21230         function Natural(context) {
21231           this._context = context;
21232         }
21233
21234         Natural.prototype = {
21235           areaStart: function() {
21236             this._line = 0;
21237           },
21238           areaEnd: function() {
21239             this._line = NaN;
21240           },
21241           lineStart: function() {
21242             this._x = [];
21243             this._y = [];
21244           },
21245           lineEnd: function() {
21246             var x = this._x,
21247                 y = this._y,
21248                 n = x.length;
21249
21250             if (n) {
21251               this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
21252               if (n === 2) {
21253                 this._context.lineTo(x[1], y[1]);
21254               } else {
21255                 var px = controlPoints(x),
21256                     py = controlPoints(y);
21257                 for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
21258                   this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
21259                 }
21260               }
21261             }
21262
21263             if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
21264             this._line = 1 - this._line;
21265             this._x = this._y = null;
21266           },
21267           point: function(x, y) {
21268             this._x.push(+x);
21269             this._y.push(+y);
21270           }
21271         };
21272
21273         // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
21274         function controlPoints(x) {
21275           var i,
21276               n = x.length - 1,
21277               m,
21278               a = new Array(n),
21279               b = new Array(n),
21280               r = new Array(n);
21281           a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
21282           for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
21283           a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
21284           for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
21285           a[n - 1] = r[n - 1] / b[n - 1];
21286           for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
21287           b[n - 1] = (x[n] + a[n - 1]) / 2;
21288           for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
21289           return [a, b];
21290         }
21291
21292         function natural(context) {
21293           return new Natural(context);
21294         }
21295
21296         function Step(context, t) {
21297           this._context = context;
21298           this._t = t;
21299         }
21300
21301         Step.prototype = {
21302           areaStart: function() {
21303             this._line = 0;
21304           },
21305           areaEnd: function() {
21306             this._line = NaN;
21307           },
21308           lineStart: function() {
21309             this._x = this._y = NaN;
21310             this._point = 0;
21311           },
21312           lineEnd: function() {
21313             if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
21314             if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
21315             if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
21316           },
21317           point: function(x, y) {
21318             x = +x, y = +y;
21319             switch (this._point) {
21320               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
21321               case 1: this._point = 2; // proceed
21322               default: {
21323                 if (this._t <= 0) {
21324                   this._context.lineTo(this._x, y);
21325                   this._context.lineTo(x, y);
21326                 } else {
21327                   var x1 = this._x * (1 - this._t) + x * this._t;
21328                   this._context.lineTo(x1, this._y);
21329                   this._context.lineTo(x1, y);
21330                 }
21331                 break;
21332               }
21333             }
21334             this._x = x, this._y = y;
21335           }
21336         };
21337
21338         function step(context) {
21339           return new Step(context, 0.5);
21340         }
21341
21342         function stepBefore(context) {
21343           return new Step(context, 0);
21344         }
21345
21346         function stepAfter(context) {
21347           return new Step(context, 1);
21348         }
21349
21350         function none$1(series, order) {
21351           if (!((n = series.length) > 1)) return;
21352           for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
21353             s0 = s1, s1 = series[order[i]];
21354             for (j = 0; j < m; ++j) {
21355               s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
21356             }
21357           }
21358         }
21359
21360         function none$2(series) {
21361           var n = series.length, o = new Array(n);
21362           while (--n >= 0) o[n] = n;
21363           return o;
21364         }
21365
21366         function stackValue(d, key) {
21367           return d[key];
21368         }
21369
21370         function stack() {
21371           var keys = constant$b([]),
21372               order = none$2,
21373               offset = none$1,
21374               value = stackValue;
21375
21376           function stack(data) {
21377             var kz = keys.apply(this, arguments),
21378                 i,
21379                 m = data.length,
21380                 n = kz.length,
21381                 sz = new Array(n),
21382                 oz;
21383
21384             for (i = 0; i < n; ++i) {
21385               for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
21386                 si[j] = sij = [0, +value(data[j], ki, j, data)];
21387                 sij.data = data[j];
21388               }
21389               si.key = ki;
21390             }
21391
21392             for (i = 0, oz = order(sz); i < n; ++i) {
21393               sz[oz[i]].index = i;
21394             }
21395
21396             offset(sz, oz);
21397             return sz;
21398           }
21399
21400           stack.keys = function(_) {
21401             return arguments.length ? (keys = typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : keys;
21402           };
21403
21404           stack.value = function(_) {
21405             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), stack) : value;
21406           };
21407
21408           stack.order = function(_) {
21409             return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : order;
21410           };
21411
21412           stack.offset = function(_) {
21413             return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
21414           };
21415
21416           return stack;
21417         }
21418
21419         function expand(series, order) {
21420           if (!((n = series.length) > 0)) return;
21421           for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
21422             for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
21423             if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
21424           }
21425           none$1(series, order);
21426         }
21427
21428         function diverging$1(series, order) {
21429           if (!((n = series.length) > 0)) return;
21430           for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
21431             for (yp = yn = 0, i = 0; i < n; ++i) {
21432               if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {
21433                 d[0] = yp, d[1] = yp += dy;
21434               } else if (dy < 0) {
21435                 d[1] = yn, d[0] = yn += dy;
21436               } else {
21437                 d[0] = yp;
21438               }
21439             }
21440           }
21441         }
21442
21443         function silhouette(series, order) {
21444           if (!((n = series.length) > 0)) return;
21445           for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
21446             for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
21447             s0[j][1] += s0[j][0] = -y / 2;
21448           }
21449           none$1(series, order);
21450         }
21451
21452         function wiggle(series, order) {
21453           if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
21454           for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
21455             for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
21456               var si = series[order[i]],
21457                   sij0 = si[j][1] || 0,
21458                   sij1 = si[j - 1][1] || 0,
21459                   s3 = (sij0 - sij1) / 2;
21460               for (var k = 0; k < i; ++k) {
21461                 var sk = series[order[k]],
21462                     skj0 = sk[j][1] || 0,
21463                     skj1 = sk[j - 1][1] || 0;
21464                 s3 += skj0 - skj1;
21465               }
21466               s1 += sij0, s2 += s3 * sij0;
21467             }
21468             s0[j - 1][1] += s0[j - 1][0] = y;
21469             if (s1) y -= s2 / s1;
21470           }
21471           s0[j - 1][1] += s0[j - 1][0] = y;
21472           none$1(series, order);
21473         }
21474
21475         function appearance(series) {
21476           var peaks = series.map(peak);
21477           return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; });
21478         }
21479
21480         function peak(series) {
21481           var i = -1, j = 0, n = series.length, vi, vj = -Infinity;
21482           while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;
21483           return j;
21484         }
21485
21486         function ascending$2(series) {
21487           var sums = series.map(sum$2);
21488           return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });
21489         }
21490
21491         function sum$2(series) {
21492           var s = 0, i = -1, n = series.length, v;
21493           while (++i < n) if (v = +series[i][1]) s += v;
21494           return s;
21495         }
21496
21497         function descending$1(series) {
21498           return ascending$2(series).reverse();
21499         }
21500
21501         function insideOut(series) {
21502           var n = series.length,
21503               i,
21504               j,
21505               sums = series.map(sum$2),
21506               order = appearance(series),
21507               top = 0,
21508               bottom = 0,
21509               tops = [],
21510               bottoms = [];
21511
21512           for (i = 0; i < n; ++i) {
21513             j = order[i];
21514             if (top < bottom) {
21515               top += sums[j];
21516               tops.push(j);
21517             } else {
21518               bottom += sums[j];
21519               bottoms.push(j);
21520             }
21521           }
21522
21523           return bottoms.reverse().concat(tops);
21524         }
21525
21526         function reverse(series) {
21527           return none$2(series).reverse();
21528         }
21529
21530         function constant$c(x) {
21531           return function() {
21532             return x;
21533           };
21534         }
21535
21536         function x$4(d) {
21537           return d[0];
21538         }
21539
21540         function y$4(d) {
21541           return d[1];
21542         }
21543
21544         function RedBlackTree() {
21545           this._ = null; // root node
21546         }
21547
21548         function RedBlackNode(node) {
21549           node.U = // parent node
21550           node.C = // color - true for red, false for black
21551           node.L = // left node
21552           node.R = // right node
21553           node.P = // previous node
21554           node.N = null; // next node
21555         }
21556
21557         RedBlackTree.prototype = {
21558           constructor: RedBlackTree,
21559
21560           insert: function(after, node) {
21561             var parent, grandpa, uncle;
21562
21563             if (after) {
21564               node.P = after;
21565               node.N = after.N;
21566               if (after.N) after.N.P = node;
21567               after.N = node;
21568               if (after.R) {
21569                 after = after.R;
21570                 while (after.L) after = after.L;
21571                 after.L = node;
21572               } else {
21573                 after.R = node;
21574               }
21575               parent = after;
21576             } else if (this._) {
21577               after = RedBlackFirst(this._);
21578               node.P = null;
21579               node.N = after;
21580               after.P = after.L = node;
21581               parent = after;
21582             } else {
21583               node.P = node.N = null;
21584               this._ = node;
21585               parent = null;
21586             }
21587             node.L = node.R = null;
21588             node.U = parent;
21589             node.C = true;
21590
21591             after = node;
21592             while (parent && parent.C) {
21593               grandpa = parent.U;
21594               if (parent === grandpa.L) {
21595                 uncle = grandpa.R;
21596                 if (uncle && uncle.C) {
21597                   parent.C = uncle.C = false;
21598                   grandpa.C = true;
21599                   after = grandpa;
21600                 } else {
21601                   if (after === parent.R) {
21602                     RedBlackRotateLeft(this, parent);
21603                     after = parent;
21604                     parent = after.U;
21605                   }
21606                   parent.C = false;
21607                   grandpa.C = true;
21608                   RedBlackRotateRight(this, grandpa);
21609                 }
21610               } else {
21611                 uncle = grandpa.L;
21612                 if (uncle && uncle.C) {
21613                   parent.C = uncle.C = false;
21614                   grandpa.C = true;
21615                   after = grandpa;
21616                 } else {
21617                   if (after === parent.L) {
21618                     RedBlackRotateRight(this, parent);
21619                     after = parent;
21620                     parent = after.U;
21621                   }
21622                   parent.C = false;
21623                   grandpa.C = true;
21624                   RedBlackRotateLeft(this, grandpa);
21625                 }
21626               }
21627               parent = after.U;
21628             }
21629             this._.C = false;
21630           },
21631
21632           remove: function(node) {
21633             if (node.N) node.N.P = node.P;
21634             if (node.P) node.P.N = node.N;
21635             node.N = node.P = null;
21636
21637             var parent = node.U,
21638                 sibling,
21639                 left = node.L,
21640                 right = node.R,
21641                 next,
21642                 red;
21643
21644             if (!left) next = right;
21645             else if (!right) next = left;
21646             else next = RedBlackFirst(right);
21647
21648             if (parent) {
21649               if (parent.L === node) parent.L = next;
21650               else parent.R = next;
21651             } else {
21652               this._ = next;
21653             }
21654
21655             if (left && right) {
21656               red = next.C;
21657               next.C = node.C;
21658               next.L = left;
21659               left.U = next;
21660               if (next !== right) {
21661                 parent = next.U;
21662                 next.U = node.U;
21663                 node = next.R;
21664                 parent.L = node;
21665                 next.R = right;
21666                 right.U = next;
21667               } else {
21668                 next.U = parent;
21669                 parent = next;
21670                 node = next.R;
21671               }
21672             } else {
21673               red = node.C;
21674               node = next;
21675             }
21676
21677             if (node) node.U = parent;
21678             if (red) return;
21679             if (node && node.C) { node.C = false; return; }
21680
21681             do {
21682               if (node === this._) break;
21683               if (node === parent.L) {
21684                 sibling = parent.R;
21685                 if (sibling.C) {
21686                   sibling.C = false;
21687                   parent.C = true;
21688                   RedBlackRotateLeft(this, parent);
21689                   sibling = parent.R;
21690                 }
21691                 if ((sibling.L && sibling.L.C)
21692                     || (sibling.R && sibling.R.C)) {
21693                   if (!sibling.R || !sibling.R.C) {
21694                     sibling.L.C = false;
21695                     sibling.C = true;
21696                     RedBlackRotateRight(this, sibling);
21697                     sibling = parent.R;
21698                   }
21699                   sibling.C = parent.C;
21700                   parent.C = sibling.R.C = false;
21701                   RedBlackRotateLeft(this, parent);
21702                   node = this._;
21703                   break;
21704                 }
21705               } else {
21706                 sibling = parent.L;
21707                 if (sibling.C) {
21708                   sibling.C = false;
21709                   parent.C = true;
21710                   RedBlackRotateRight(this, parent);
21711                   sibling = parent.L;
21712                 }
21713                 if ((sibling.L && sibling.L.C)
21714                   || (sibling.R && sibling.R.C)) {
21715                   if (!sibling.L || !sibling.L.C) {
21716                     sibling.R.C = false;
21717                     sibling.C = true;
21718                     RedBlackRotateLeft(this, sibling);
21719                     sibling = parent.L;
21720                   }
21721                   sibling.C = parent.C;
21722                   parent.C = sibling.L.C = false;
21723                   RedBlackRotateRight(this, parent);
21724                   node = this._;
21725                   break;
21726                 }
21727               }
21728               sibling.C = true;
21729               node = parent;
21730               parent = parent.U;
21731             } while (!node.C);
21732
21733             if (node) node.C = false;
21734           }
21735         };
21736
21737         function RedBlackRotateLeft(tree, node) {
21738           var p = node,
21739               q = node.R,
21740               parent = p.U;
21741
21742           if (parent) {
21743             if (parent.L === p) parent.L = q;
21744             else parent.R = q;
21745           } else {
21746             tree._ = q;
21747           }
21748
21749           q.U = parent;
21750           p.U = q;
21751           p.R = q.L;
21752           if (p.R) p.R.U = p;
21753           q.L = p;
21754         }
21755
21756         function RedBlackRotateRight(tree, node) {
21757           var p = node,
21758               q = node.L,
21759               parent = p.U;
21760
21761           if (parent) {
21762             if (parent.L === p) parent.L = q;
21763             else parent.R = q;
21764           } else {
21765             tree._ = q;
21766           }
21767
21768           q.U = parent;
21769           p.U = q;
21770           p.L = q.R;
21771           if (p.L) p.L.U = p;
21772           q.R = p;
21773         }
21774
21775         function RedBlackFirst(node) {
21776           while (node.L) node = node.L;
21777           return node;
21778         }
21779
21780         function createEdge(left, right, v0, v1) {
21781           var edge = [null, null],
21782               index = edges.push(edge) - 1;
21783           edge.left = left;
21784           edge.right = right;
21785           if (v0) setEdgeEnd(edge, left, right, v0);
21786           if (v1) setEdgeEnd(edge, right, left, v1);
21787           cells[left.index].halfedges.push(index);
21788           cells[right.index].halfedges.push(index);
21789           return edge;
21790         }
21791
21792         function createBorderEdge(left, v0, v1) {
21793           var edge = [v0, v1];
21794           edge.left = left;
21795           return edge;
21796         }
21797
21798         function setEdgeEnd(edge, left, right, vertex) {
21799           if (!edge[0] && !edge[1]) {
21800             edge[0] = vertex;
21801             edge.left = left;
21802             edge.right = right;
21803           } else if (edge.left === right) {
21804             edge[1] = vertex;
21805           } else {
21806             edge[0] = vertex;
21807           }
21808         }
21809
21810         // Liang–Barsky line clipping.
21811         function clipEdge(edge, x0, y0, x1, y1) {
21812           var a = edge[0],
21813               b = edge[1],
21814               ax = a[0],
21815               ay = a[1],
21816               bx = b[0],
21817               by = b[1],
21818               t0 = 0,
21819               t1 = 1,
21820               dx = bx - ax,
21821               dy = by - ay,
21822               r;
21823
21824           r = x0 - ax;
21825           if (!dx && r > 0) return;
21826           r /= dx;
21827           if (dx < 0) {
21828             if (r < t0) return;
21829             if (r < t1) t1 = r;
21830           } else if (dx > 0) {
21831             if (r > t1) return;
21832             if (r > t0) t0 = r;
21833           }
21834
21835           r = x1 - ax;
21836           if (!dx && r < 0) return;
21837           r /= dx;
21838           if (dx < 0) {
21839             if (r > t1) return;
21840             if (r > t0) t0 = r;
21841           } else if (dx > 0) {
21842             if (r < t0) return;
21843             if (r < t1) t1 = r;
21844           }
21845
21846           r = y0 - ay;
21847           if (!dy && r > 0) return;
21848           r /= dy;
21849           if (dy < 0) {
21850             if (r < t0) return;
21851             if (r < t1) t1 = r;
21852           } else if (dy > 0) {
21853             if (r > t1) return;
21854             if (r > t0) t0 = r;
21855           }
21856
21857           r = y1 - ay;
21858           if (!dy && r < 0) return;
21859           r /= dy;
21860           if (dy < 0) {
21861             if (r > t1) return;
21862             if (r > t0) t0 = r;
21863           } else if (dy > 0) {
21864             if (r < t0) return;
21865             if (r < t1) t1 = r;
21866           }
21867
21868           if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
21869
21870           if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
21871           if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
21872           return true;
21873         }
21874
21875         function connectEdge(edge, x0, y0, x1, y1) {
21876           var v1 = edge[1];
21877           if (v1) return true;
21878
21879           var v0 = edge[0],
21880               left = edge.left,
21881               right = edge.right,
21882               lx = left[0],
21883               ly = left[1],
21884               rx = right[0],
21885               ry = right[1],
21886               fx = (lx + rx) / 2,
21887               fy = (ly + ry) / 2,
21888               fm,
21889               fb;
21890
21891           if (ry === ly) {
21892             if (fx < x0 || fx >= x1) return;
21893             if (lx > rx) {
21894               if (!v0) v0 = [fx, y0];
21895               else if (v0[1] >= y1) return;
21896               v1 = [fx, y1];
21897             } else {
21898               if (!v0) v0 = [fx, y1];
21899               else if (v0[1] < y0) return;
21900               v1 = [fx, y0];
21901             }
21902           } else {
21903             fm = (lx - rx) / (ry - ly);
21904             fb = fy - fm * fx;
21905             if (fm < -1 || fm > 1) {
21906               if (lx > rx) {
21907                 if (!v0) v0 = [(y0 - fb) / fm, y0];
21908                 else if (v0[1] >= y1) return;
21909                 v1 = [(y1 - fb) / fm, y1];
21910               } else {
21911                 if (!v0) v0 = [(y1 - fb) / fm, y1];
21912                 else if (v0[1] < y0) return;
21913                 v1 = [(y0 - fb) / fm, y0];
21914               }
21915             } else {
21916               if (ly < ry) {
21917                 if (!v0) v0 = [x0, fm * x0 + fb];
21918                 else if (v0[0] >= x1) return;
21919                 v1 = [x1, fm * x1 + fb];
21920               } else {
21921                 if (!v0) v0 = [x1, fm * x1 + fb];
21922                 else if (v0[0] < x0) return;
21923                 v1 = [x0, fm * x0 + fb];
21924               }
21925             }
21926           }
21927
21928           edge[0] = v0;
21929           edge[1] = v1;
21930           return true;
21931         }
21932
21933         function clipEdges(x0, y0, x1, y1) {
21934           var i = edges.length,
21935               edge;
21936
21937           while (i--) {
21938             if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
21939                 || !clipEdge(edge, x0, y0, x1, y1)
21940                 || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4
21941                     || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {
21942               delete edges[i];
21943             }
21944           }
21945         }
21946
21947         function createCell(site) {
21948           return cells[site.index] = {
21949             site: site,
21950             halfedges: []
21951           };
21952         }
21953
21954         function cellHalfedgeAngle(cell, edge) {
21955           var site = cell.site,
21956               va = edge.left,
21957               vb = edge.right;
21958           if (site === vb) vb = va, va = site;
21959           if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
21960           if (site === va) va = edge[1], vb = edge[0];
21961           else va = edge[0], vb = edge[1];
21962           return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
21963         }
21964
21965         function cellHalfedgeStart(cell, edge) {
21966           return edge[+(edge.left !== cell.site)];
21967         }
21968
21969         function cellHalfedgeEnd(cell, edge) {
21970           return edge[+(edge.left === cell.site)];
21971         }
21972
21973         function sortCellHalfedges() {
21974           for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
21975             if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
21976               var index = new Array(m),
21977                   array = new Array(m);
21978               for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
21979               index.sort(function(i, j) { return array[j] - array[i]; });
21980               for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
21981               for (j = 0; j < m; ++j) halfedges[j] = array[j];
21982             }
21983           }
21984         }
21985
21986         function clipCells(x0, y0, x1, y1) {
21987           var nCells = cells.length,
21988               iCell,
21989               cell,
21990               site,
21991               iHalfedge,
21992               halfedges,
21993               nHalfedges,
21994               start,
21995               startX,
21996               startY,
21997               end,
21998               endX,
21999               endY,
22000               cover = true;
22001
22002           for (iCell = 0; iCell < nCells; ++iCell) {
22003             if (cell = cells[iCell]) {
22004               site = cell.site;
22005               halfedges = cell.halfedges;
22006               iHalfedge = halfedges.length;
22007
22008               // Remove any dangling clipped edges.
22009               while (iHalfedge--) {
22010                 if (!edges[halfedges[iHalfedge]]) {
22011                   halfedges.splice(iHalfedge, 1);
22012                 }
22013               }
22014
22015               // Insert any border edges as necessary.
22016               iHalfedge = 0, nHalfedges = halfedges.length;
22017               while (iHalfedge < nHalfedges) {
22018                 end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
22019                 start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
22020                 if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {
22021                   halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
22022                       Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]
22023                       : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]
22024                       : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]
22025                       : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]
22026                       : null)) - 1);
22027                   ++nHalfedges;
22028                 }
22029               }
22030
22031               if (nHalfedges) cover = false;
22032             }
22033           }
22034
22035           // If there weren’t any edges, have the closest site cover the extent.
22036           // It doesn’t matter which corner of the extent we measure!
22037           if (cover) {
22038             var dx, dy, d2, dc = Infinity;
22039
22040             for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
22041               if (cell = cells[iCell]) {
22042                 site = cell.site;
22043                 dx = site[0] - x0;
22044                 dy = site[1] - y0;
22045                 d2 = dx * dx + dy * dy;
22046                 if (d2 < dc) dc = d2, cover = cell;
22047               }
22048             }
22049
22050             if (cover) {
22051               var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
22052               cover.halfedges.push(
22053                 edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
22054                 edges.push(createBorderEdge(site, v01, v11)) - 1,
22055                 edges.push(createBorderEdge(site, v11, v10)) - 1,
22056                 edges.push(createBorderEdge(site, v10, v00)) - 1
22057               );
22058             }
22059           }
22060
22061           // Lastly delete any cells with no edges; these were entirely clipped.
22062           for (iCell = 0; iCell < nCells; ++iCell) {
22063             if (cell = cells[iCell]) {
22064               if (!cell.halfedges.length) {
22065                 delete cells[iCell];
22066               }
22067             }
22068           }
22069         }
22070
22071         var circlePool = [];
22072
22073         var firstCircle;
22074
22075         function Circle() {
22076           RedBlackNode(this);
22077           this.x =
22078           this.y =
22079           this.arc =
22080           this.site =
22081           this.cy = null;
22082         }
22083
22084         function attachCircle(arc) {
22085           var lArc = arc.P,
22086               rArc = arc.N;
22087
22088           if (!lArc || !rArc) return;
22089
22090           var lSite = lArc.site,
22091               cSite = arc.site,
22092               rSite = rArc.site;
22093
22094           if (lSite === rSite) return;
22095
22096           var bx = cSite[0],
22097               by = cSite[1],
22098               ax = lSite[0] - bx,
22099               ay = lSite[1] - by,
22100               cx = rSite[0] - bx,
22101               cy = rSite[1] - by;
22102
22103           var d = 2 * (ax * cy - ay * cx);
22104           if (d >= -epsilon2$2) return;
22105
22106           var ha = ax * ax + ay * ay,
22107               hc = cx * cx + cy * cy,
22108               x = (cy * ha - ay * hc) / d,
22109               y = (ax * hc - cx * ha) / d;
22110
22111           var circle = circlePool.pop() || new Circle;
22112           circle.arc = arc;
22113           circle.site = cSite;
22114           circle.x = x + bx;
22115           circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
22116
22117           arc.circle = circle;
22118
22119           var before = null,
22120               node = circles._;
22121
22122           while (node) {
22123             if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
22124               if (node.L) node = node.L;
22125               else { before = node.P; break; }
22126             } else {
22127               if (node.R) node = node.R;
22128               else { before = node; break; }
22129             }
22130           }
22131
22132           circles.insert(before, circle);
22133           if (!before) firstCircle = circle;
22134         }
22135
22136         function detachCircle(arc) {
22137           var circle = arc.circle;
22138           if (circle) {
22139             if (!circle.P) firstCircle = circle.N;
22140             circles.remove(circle);
22141             circlePool.push(circle);
22142             RedBlackNode(circle);
22143             arc.circle = null;
22144           }
22145         }
22146
22147         var beachPool = [];
22148
22149         function Beach() {
22150           RedBlackNode(this);
22151           this.edge =
22152           this.site =
22153           this.circle = null;
22154         }
22155
22156         function createBeach(site) {
22157           var beach = beachPool.pop() || new Beach;
22158           beach.site = site;
22159           return beach;
22160         }
22161
22162         function detachBeach(beach) {
22163           detachCircle(beach);
22164           beaches.remove(beach);
22165           beachPool.push(beach);
22166           RedBlackNode(beach);
22167         }
22168
22169         function removeBeach(beach) {
22170           var circle = beach.circle,
22171               x = circle.x,
22172               y = circle.cy,
22173               vertex = [x, y],
22174               previous = beach.P,
22175               next = beach.N,
22176               disappearing = [beach];
22177
22178           detachBeach(beach);
22179
22180           var lArc = previous;
22181           while (lArc.circle
22182               && Math.abs(x - lArc.circle.x) < epsilon$4
22183               && Math.abs(y - lArc.circle.cy) < epsilon$4) {
22184             previous = lArc.P;
22185             disappearing.unshift(lArc);
22186             detachBeach(lArc);
22187             lArc = previous;
22188           }
22189
22190           disappearing.unshift(lArc);
22191           detachCircle(lArc);
22192
22193           var rArc = next;
22194           while (rArc.circle
22195               && Math.abs(x - rArc.circle.x) < epsilon$4
22196               && Math.abs(y - rArc.circle.cy) < epsilon$4) {
22197             next = rArc.N;
22198             disappearing.push(rArc);
22199             detachBeach(rArc);
22200             rArc = next;
22201           }
22202
22203           disappearing.push(rArc);
22204           detachCircle(rArc);
22205
22206           var nArcs = disappearing.length,
22207               iArc;
22208           for (iArc = 1; iArc < nArcs; ++iArc) {
22209             rArc = disappearing[iArc];
22210             lArc = disappearing[iArc - 1];
22211             setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
22212           }
22213
22214           lArc = disappearing[0];
22215           rArc = disappearing[nArcs - 1];
22216           rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
22217
22218           attachCircle(lArc);
22219           attachCircle(rArc);
22220         }
22221
22222         function addBeach(site) {
22223           var x = site[0],
22224               directrix = site[1],
22225               lArc,
22226               rArc,
22227               dxl,
22228               dxr,
22229               node = beaches._;
22230
22231           while (node) {
22232             dxl = leftBreakPoint(node, directrix) - x;
22233             if (dxl > epsilon$4) node = node.L; else {
22234               dxr = x - rightBreakPoint(node, directrix);
22235               if (dxr > epsilon$4) {
22236                 if (!node.R) {
22237                   lArc = node;
22238                   break;
22239                 }
22240                 node = node.R;
22241               } else {
22242                 if (dxl > -epsilon$4) {
22243                   lArc = node.P;
22244                   rArc = node;
22245                 } else if (dxr > -epsilon$4) {
22246                   lArc = node;
22247                   rArc = node.N;
22248                 } else {
22249                   lArc = rArc = node;
22250                 }
22251                 break;
22252               }
22253             }
22254           }
22255
22256           createCell(site);
22257           var newArc = createBeach(site);
22258           beaches.insert(lArc, newArc);
22259
22260           if (!lArc && !rArc) return;
22261
22262           if (lArc === rArc) {
22263             detachCircle(lArc);
22264             rArc = createBeach(lArc.site);
22265             beaches.insert(newArc, rArc);
22266             newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
22267             attachCircle(lArc);
22268             attachCircle(rArc);
22269             return;
22270           }
22271
22272           if (!rArc) { // && lArc
22273             newArc.edge = createEdge(lArc.site, newArc.site);
22274             return;
22275           }
22276
22277           // else lArc !== rArc
22278           detachCircle(lArc);
22279           detachCircle(rArc);
22280
22281           var lSite = lArc.site,
22282               ax = lSite[0],
22283               ay = lSite[1],
22284               bx = site[0] - ax,
22285               by = site[1] - ay,
22286               rSite = rArc.site,
22287               cx = rSite[0] - ax,
22288               cy = rSite[1] - ay,
22289               d = 2 * (bx * cy - by * cx),
22290               hb = bx * bx + by * by,
22291               hc = cx * cx + cy * cy,
22292               vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
22293
22294           setEdgeEnd(rArc.edge, lSite, rSite, vertex);
22295           newArc.edge = createEdge(lSite, site, null, vertex);
22296           rArc.edge = createEdge(site, rSite, null, vertex);
22297           attachCircle(lArc);
22298           attachCircle(rArc);
22299         }
22300
22301         function leftBreakPoint(arc, directrix) {
22302           var site = arc.site,
22303               rfocx = site[0],
22304               rfocy = site[1],
22305               pby2 = rfocy - directrix;
22306
22307           if (!pby2) return rfocx;
22308
22309           var lArc = arc.P;
22310           if (!lArc) return -Infinity;
22311
22312           site = lArc.site;
22313           var lfocx = site[0],
22314               lfocy = site[1],
22315               plby2 = lfocy - directrix;
22316
22317           if (!plby2) return lfocx;
22318
22319           var hl = lfocx - rfocx,
22320               aby2 = 1 / pby2 - 1 / plby2,
22321               b = hl / plby2;
22322
22323           if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
22324
22325           return (rfocx + lfocx) / 2;
22326         }
22327
22328         function rightBreakPoint(arc, directrix) {
22329           var rArc = arc.N;
22330           if (rArc) return leftBreakPoint(rArc, directrix);
22331           var site = arc.site;
22332           return site[1] === directrix ? site[0] : Infinity;
22333         }
22334
22335         var epsilon$4 = 1e-6;
22336         var epsilon2$2 = 1e-12;
22337         var beaches;
22338         var cells;
22339         var circles;
22340         var edges;
22341
22342         function triangleArea(a, b, c) {
22343           return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
22344         }
22345
22346         function lexicographic(a, b) {
22347           return b[1] - a[1]
22348               || b[0] - a[0];
22349         }
22350
22351         function Diagram(sites, extent) {
22352           var site = sites.sort(lexicographic).pop(),
22353               x,
22354               y,
22355               circle;
22356
22357           edges = [];
22358           cells = new Array(sites.length);
22359           beaches = new RedBlackTree;
22360           circles = new RedBlackTree;
22361
22362           while (true) {
22363             circle = firstCircle;
22364             if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
22365               if (site[0] !== x || site[1] !== y) {
22366                 addBeach(site);
22367                 x = site[0], y = site[1];
22368               }
22369               site = sites.pop();
22370             } else if (circle) {
22371               removeBeach(circle.arc);
22372             } else {
22373               break;
22374             }
22375           }
22376
22377           sortCellHalfedges();
22378
22379           if (extent) {
22380             var x0 = +extent[0][0],
22381                 y0 = +extent[0][1],
22382                 x1 = +extent[1][0],
22383                 y1 = +extent[1][1];
22384             clipEdges(x0, y0, x1, y1);
22385             clipCells(x0, y0, x1, y1);
22386           }
22387
22388           this.edges = edges;
22389           this.cells = cells;
22390
22391           beaches =
22392           circles =
22393           edges =
22394           cells = null;
22395         }
22396
22397         Diagram.prototype = {
22398           constructor: Diagram,
22399
22400           polygons: function() {
22401             var edges = this.edges;
22402
22403             return this.cells.map(function(cell) {
22404               var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
22405               polygon.data = cell.site.data;
22406               return polygon;
22407             });
22408           },
22409
22410           triangles: function() {
22411             var triangles = [],
22412                 edges = this.edges;
22413
22414             this.cells.forEach(function(cell, i) {
22415               if (!(m = (halfedges = cell.halfedges).length)) return;
22416               var site = cell.site,
22417                   halfedges,
22418                   j = -1,
22419                   m,
22420                   s0,
22421                   e1 = edges[halfedges[m - 1]],
22422                   s1 = e1.left === site ? e1.right : e1.left;
22423
22424               while (++j < m) {
22425                 s0 = s1;
22426                 e1 = edges[halfedges[j]];
22427                 s1 = e1.left === site ? e1.right : e1.left;
22428                 if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
22429                   triangles.push([site.data, s0.data, s1.data]);
22430                 }
22431               }
22432             });
22433
22434             return triangles;
22435           },
22436
22437           links: function() {
22438             return this.edges.filter(function(edge) {
22439               return edge.right;
22440             }).map(function(edge) {
22441               return {
22442                 source: edge.left.data,
22443                 target: edge.right.data
22444               };
22445             });
22446           },
22447
22448           find: function(x, y, radius) {
22449             var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;
22450
22451             // Use the previously-found cell, or start with an arbitrary one.
22452             while (!(cell = that.cells[i1])) if (++i1 >= n) return null;
22453             var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;
22454
22455             // Traverse the half-edges to find a closer cell, if any.
22456             do {
22457               cell = that.cells[i0 = i1], i1 = null;
22458               cell.halfedges.forEach(function(e) {
22459                 var edge = that.edges[e], v = edge.left;
22460                 if ((v === cell.site || !v) && !(v = edge.right)) return;
22461                 var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;
22462                 if (v2 < d2) d2 = v2, i1 = v.index;
22463               });
22464             } while (i1 !== null);
22465
22466             that._found = i0;
22467
22468             return radius == null || d2 <= radius * radius ? cell.site : null;
22469           }
22470         };
22471
22472         function voronoi() {
22473           var x = x$4,
22474               y = y$4,
22475               extent = null;
22476
22477           function voronoi(data) {
22478             return new Diagram(data.map(function(d, i) {
22479               var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4];
22480               s.index = i;
22481               s.data = d;
22482               return s;
22483             }), extent);
22484           }
22485
22486           voronoi.polygons = function(data) {
22487             return voronoi(data).polygons();
22488           };
22489
22490           voronoi.links = function(data) {
22491             return voronoi(data).links();
22492           };
22493
22494           voronoi.triangles = function(data) {
22495             return voronoi(data).triangles();
22496           };
22497
22498           voronoi.x = function(_) {
22499             return arguments.length ? (x = typeof _ === "function" ? _ : constant$c(+_), voronoi) : x;
22500           };
22501
22502           voronoi.y = function(_) {
22503             return arguments.length ? (y = typeof _ === "function" ? _ : constant$c(+_), voronoi) : y;
22504           };
22505
22506           voronoi.extent = function(_) {
22507             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]]];
22508           };
22509
22510           voronoi.size = function(_) {
22511             return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
22512           };
22513
22514           return voronoi;
22515         }
22516
22517         function constant$d(x) {
22518           return function() {
22519             return x;
22520           };
22521         }
22522
22523         function ZoomEvent(target, type, transform) {
22524           this.target = target;
22525           this.type = type;
22526           this.transform = transform;
22527         }
22528
22529         function Transform(k, x, y) {
22530           this.k = k;
22531           this.x = x;
22532           this.y = y;
22533         }
22534
22535         Transform.prototype = {
22536           constructor: Transform,
22537           scale: function(k) {
22538             return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
22539           },
22540           translate: function(x, y) {
22541             return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
22542           },
22543           apply: function(point) {
22544             return [point[0] * this.k + this.x, point[1] * this.k + this.y];
22545           },
22546           applyX: function(x) {
22547             return x * this.k + this.x;
22548           },
22549           applyY: function(y) {
22550             return y * this.k + this.y;
22551           },
22552           invert: function(location) {
22553             return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
22554           },
22555           invertX: function(x) {
22556             return (x - this.x) / this.k;
22557           },
22558           invertY: function(y) {
22559             return (y - this.y) / this.k;
22560           },
22561           rescaleX: function(x) {
22562             return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
22563           },
22564           rescaleY: function(y) {
22565             return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
22566           },
22567           toString: function() {
22568             return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
22569           }
22570         };
22571
22572         var identity$8 = new Transform(1, 0, 0);
22573
22574         transform.prototype = Transform.prototype;
22575
22576         function transform(node) {
22577           return node.__zoom || identity$8;
22578         }
22579
22580         function nopropagation$2() {
22581           event.stopImmediatePropagation();
22582         }
22583
22584         function noevent$2() {
22585           event.preventDefault();
22586           event.stopImmediatePropagation();
22587         }
22588
22589         // Ignore right-click, since that should open the context menu.
22590         function defaultFilter$2() {
22591           return !event.button;
22592         }
22593
22594         function defaultExtent$1() {
22595           var e = this, w, h;
22596           if (e instanceof SVGElement) {
22597             e = e.ownerSVGElement || e;
22598             w = e.width.baseVal.value;
22599             h = e.height.baseVal.value;
22600           } else {
22601             w = e.clientWidth;
22602             h = e.clientHeight;
22603           }
22604           return [[0, 0], [w, h]];
22605         }
22606
22607         function defaultTransform() {
22608           return this.__zoom || identity$8;
22609         }
22610
22611         function defaultWheelDelta() {
22612           return -event.deltaY * (event.deltaMode ? 120 : 1) / 500;
22613         }
22614
22615         function defaultTouchable$1() {
22616           return "ontouchstart" in this;
22617         }
22618
22619         function defaultConstrain(transform, extent, translateExtent) {
22620           var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
22621               dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
22622               dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
22623               dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
22624           return transform.translate(
22625             dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
22626             dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
22627           );
22628         }
22629
22630         function d3_zoom() {
22631           var filter = defaultFilter$2,
22632               extent = defaultExtent$1,
22633               constrain = defaultConstrain,
22634               wheelDelta = defaultWheelDelta,
22635               touchable = defaultTouchable$1,
22636               scaleExtent = [0, Infinity],
22637               translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
22638               duration = 250,
22639               interpolate = interpolateZoom,
22640               gestures = [],
22641               listeners = dispatch("start", "zoom", "end"),
22642               touchstarting,
22643               touchending,
22644               touchDelay = 500,
22645               wheelDelay = 150,
22646               clickDistance2 = 0;
22647
22648           function zoom(selection) {
22649             selection
22650                 .property("__zoom", defaultTransform)
22651                 .on("wheel.zoom", wheeled)
22652                 .on("mousedown.zoom", mousedowned)
22653                 .on("dblclick.zoom", dblclicked)
22654               .filter(touchable)
22655                 .on("touchstart.zoom", touchstarted)
22656                 .on("touchmove.zoom", touchmoved)
22657                 .on("touchend.zoom touchcancel.zoom", touchended)
22658                 .style("touch-action", "none")
22659                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
22660           }
22661
22662           zoom.transform = function(collection, transform) {
22663             var selection = collection.selection ? collection.selection() : collection;
22664             selection.property("__zoom", defaultTransform);
22665             if (collection !== selection) {
22666               schedule(collection, transform);
22667             } else {
22668               selection.interrupt().each(function() {
22669                 gesture(this, arguments)
22670                     .start()
22671                     .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
22672                     .end();
22673               });
22674             }
22675           };
22676
22677           zoom.scaleBy = function(selection, k) {
22678             zoom.scaleTo(selection, function() {
22679               var k0 = this.__zoom.k,
22680                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
22681               return k0 * k1;
22682             });
22683           };
22684
22685           zoom.scaleTo = function(selection, k) {
22686             zoom.transform(selection, function() {
22687               var e = extent.apply(this, arguments),
22688                   t0 = this.__zoom,
22689                   p0 = centroid(e),
22690                   p1 = t0.invert(p0),
22691                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
22692               return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);
22693             });
22694           };
22695
22696           zoom.translateBy = function(selection, x, y) {
22697             zoom.transform(selection, function() {
22698               return constrain(this.__zoom.translate(
22699                 typeof x === "function" ? x.apply(this, arguments) : x,
22700                 typeof y === "function" ? y.apply(this, arguments) : y
22701               ), extent.apply(this, arguments), translateExtent);
22702             });
22703           };
22704
22705           zoom.translateTo = function(selection, x, y) {
22706             zoom.transform(selection, function() {
22707               var e = extent.apply(this, arguments),
22708                   t = this.__zoom,
22709                   p = centroid(e);
22710               return constrain(identity$8.translate(p[0], p[1]).scale(t.k).translate(
22711                 typeof x === "function" ? -x.apply(this, arguments) : -x,
22712                 typeof y === "function" ? -y.apply(this, arguments) : -y
22713               ), e, translateExtent);
22714             });
22715           };
22716
22717           function scale(transform, k) {
22718             k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
22719             return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
22720           }
22721
22722           function translate(transform, p0, p1) {
22723             var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
22724             return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
22725           }
22726
22727           function centroid(extent) {
22728             return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
22729           }
22730
22731           function schedule(transition, transform, center) {
22732             transition
22733                 .on("start.zoom", function() { gesture(this, arguments).start(); })
22734                 .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
22735                 .tween("zoom", function() {
22736                   var that = this,
22737                       args = arguments,
22738                       g = gesture(that, args),
22739                       e = extent.apply(that, args),
22740                       p = center || centroid(e),
22741                       w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
22742                       a = that.__zoom,
22743                       b = typeof transform === "function" ? transform.apply(that, args) : transform,
22744                       i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
22745                   return function(t) {
22746                     if (t === 1) t = b; // Avoid rounding error on end.
22747                     else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
22748                     g.zoom(null, t);
22749                   };
22750                 });
22751           }
22752
22753           function gesture(that, args) {
22754             for (var i = 0, n = gestures.length, g; i < n; ++i) {
22755               if ((g = gestures[i]).that === that) {
22756                 return g;
22757               }
22758             }
22759             return new Gesture(that, args);
22760           }
22761
22762           function Gesture(that, args) {
22763             this.that = that;
22764             this.args = args;
22765             this.index = -1;
22766             this.active = 0;
22767             this.extent = extent.apply(that, args);
22768           }
22769
22770           Gesture.prototype = {
22771             start: function() {
22772               if (++this.active === 1) {
22773                 this.index = gestures.push(this) - 1;
22774                 this.emit("start");
22775               }
22776               return this;
22777             },
22778             zoom: function(key, transform) {
22779               if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
22780               if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
22781               if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
22782               this.that.__zoom = transform;
22783               this.emit("zoom");
22784               return this;
22785             },
22786             end: function() {
22787               if (--this.active === 0) {
22788                 gestures.splice(this.index, 1);
22789                 this.index = -1;
22790                 this.emit("end");
22791               }
22792               return this;
22793             },
22794             emit: function(type) {
22795               customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
22796             }
22797           };
22798
22799           function wheeled() {
22800             if (!filter.apply(this, arguments)) return;
22801             var g = gesture(this, arguments),
22802                 t = this.__zoom,
22803                 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),
22804                 p = d3_mouse(this);
22805
22806             // If the mouse is in the same location as before, reuse it.
22807             // If there were recent wheel events, reset the wheel idle timeout.
22808             if (g.wheel) {
22809               if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
22810                 g.mouse[1] = t.invert(g.mouse[0] = p);
22811               }
22812               clearTimeout(g.wheel);
22813             }
22814
22815             // If this wheel event won’t trigger a transform change, ignore it.
22816             else if (t.k === k) return;
22817
22818             // Otherwise, capture the mouse point and location at the start.
22819             else {
22820               g.mouse = [p, t.invert(p)];
22821               interrupt(this);
22822               g.start();
22823             }
22824
22825             noevent$2();
22826             g.wheel = setTimeout(wheelidled, wheelDelay);
22827             g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));
22828
22829             function wheelidled() {
22830               g.wheel = null;
22831               g.end();
22832             }
22833           }
22834
22835           function mousedowned() {
22836             if (touchending || !filter.apply(this, arguments)) return;
22837             var g = gesture(this, arguments),
22838                 v = d3_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
22839                 p = d3_mouse(this),
22840                 x0 = event.clientX,
22841                 y0 = event.clientY;
22842
22843             dragDisable(event.view);
22844             nopropagation$2();
22845             g.mouse = [p, this.__zoom.invert(p)];
22846             interrupt(this);
22847             g.start();
22848
22849             function mousemoved() {
22850               noevent$2();
22851               if (!g.moved) {
22852                 var dx = event.clientX - x0, dy = event.clientY - y0;
22853                 g.moved = dx * dx + dy * dy > clickDistance2;
22854               }
22855               g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = d3_mouse(g.that), g.mouse[1]), g.extent, translateExtent));
22856             }
22857
22858             function mouseupped() {
22859               v.on("mousemove.zoom mouseup.zoom", null);
22860               yesdrag(event.view, g.moved);
22861               noevent$2();
22862               g.end();
22863             }
22864           }
22865
22866           function dblclicked() {
22867             if (!filter.apply(this, arguments)) return;
22868             var t0 = this.__zoom,
22869                 p0 = d3_mouse(this),
22870                 p1 = t0.invert(p0),
22871                 k1 = t0.k * (event.shiftKey ? 0.5 : 2),
22872                 t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);
22873
22874             noevent$2();
22875             if (duration > 0) d3_select(this).transition().duration(duration).call(schedule, t1, p0);
22876             else d3_select(this).call(zoom.transform, t1);
22877           }
22878
22879           function touchstarted() {
22880             if (!filter.apply(this, arguments)) return;
22881             var g = gesture(this, arguments),
22882                 touches = event.changedTouches,
22883                 started,
22884                 n = touches.length, i, t, p;
22885
22886             nopropagation$2();
22887             for (i = 0; i < n; ++i) {
22888               t = touches[i], p = touch(this, touches, t.identifier);
22889               p = [p, this.__zoom.invert(p), t.identifier];
22890               if (!g.touch0) g.touch0 = p, started = true;
22891               else if (!g.touch1) g.touch1 = p;
22892             }
22893
22894             // If this is a dbltap, reroute to the (optional) dblclick.zoom handler.
22895             if (touchstarting) {
22896               touchstarting = clearTimeout(touchstarting);
22897               if (!g.touch1) {
22898                 g.end();
22899                 p = d3_select(this).on("dblclick.zoom");
22900                 if (p) p.apply(this, arguments);
22901                 return;
22902               }
22903             }
22904
22905             if (started) {
22906               touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
22907               interrupt(this);
22908               g.start();
22909             }
22910           }
22911
22912           function touchmoved() {
22913             var g = gesture(this, arguments),
22914                 touches = event.changedTouches,
22915                 n = touches.length, i, t, p, l;
22916
22917             noevent$2();
22918             if (touchstarting) touchstarting = clearTimeout(touchstarting);
22919             for (i = 0; i < n; ++i) {
22920               t = touches[i], p = touch(this, touches, t.identifier);
22921               if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
22922               else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
22923             }
22924             t = g.that.__zoom;
22925             if (g.touch1) {
22926               var p0 = g.touch0[0], l0 = g.touch0[1],
22927                   p1 = g.touch1[0], l1 = g.touch1[1],
22928                   dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
22929                   dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
22930               t = scale(t, Math.sqrt(dp / dl));
22931               p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
22932               l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
22933             }
22934             else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
22935             else return;
22936             g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));
22937           }
22938
22939           function touchended() {
22940             var g = gesture(this, arguments),
22941                 touches = event.changedTouches,
22942                 n = touches.length, i, t;
22943
22944             nopropagation$2();
22945             if (touchending) clearTimeout(touchending);
22946             touchending = setTimeout(function() { touchending = null; }, touchDelay);
22947             for (i = 0; i < n; ++i) {
22948               t = touches[i];
22949               if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
22950               else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
22951             }
22952             if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
22953             if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);
22954             else g.end();
22955           }
22956
22957           zoom.wheelDelta = function(_) {
22958             return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$d(+_), zoom) : wheelDelta;
22959           };
22960
22961           zoom.filter = function(_) {
22962             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$d(!!_), zoom) : filter;
22963           };
22964
22965           zoom.touchable = function(_) {
22966             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$d(!!_), zoom) : touchable;
22967           };
22968
22969           zoom.extent = function(_) {
22970             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
22971           };
22972
22973           zoom.scaleExtent = function(_) {
22974             return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];
22975           };
22976
22977           zoom.translateExtent = function(_) {
22978             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]]];
22979           };
22980
22981           zoom.constrain = function(_) {
22982             return arguments.length ? (constrain = _, zoom) : constrain;
22983           };
22984
22985           zoom.duration = function(_) {
22986             return arguments.length ? (duration = +_, zoom) : duration;
22987           };
22988
22989           zoom.interpolate = function(_) {
22990             return arguments.length ? (interpolate = _, zoom) : interpolate;
22991           };
22992
22993           zoom.on = function() {
22994             var value = listeners.on.apply(listeners, arguments);
22995             return value === listeners ? zoom : value;
22996           };
22997
22998           zoom.clickDistance = function(_) {
22999             return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
23000           };
23001
23002           return zoom;
23003         }
23004
23005
23006
23007         var index$3 = /*#__PURE__*/Object.freeze({
23008                 version: version,
23009                 cluster: cluster,
23010                 hierarchy: hierarchy,
23011                 pack: index$1,
23012                 packSiblings: siblings,
23013                 packEnclose: enclose,
23014                 partition: partition,
23015                 stratify: stratify,
23016                 tree: tree,
23017                 treemap: index$2,
23018                 treemapBinary: binary,
23019                 treemapDice: treemapDice,
23020                 treemapSlice: treemapSlice,
23021                 treemapSliceDice: sliceDice,
23022                 treemapSquarify: squarify,
23023                 treemapResquarify: resquarify,
23024                 bisect: bisectRight,
23025                 bisectRight: bisectRight,
23026                 bisectLeft: bisectLeft,
23027                 ascending: d3_ascending,
23028                 bisector: d3_bisector,
23029                 cross: cross,
23030                 descending: d3_descending,
23031                 deviation: deviation,
23032                 extent: extent,
23033                 histogram: histogram,
23034                 thresholdFreedmanDiaconis: freedmanDiaconis,
23035                 thresholdScott: scott,
23036                 thresholdSturges: thresholdSturges,
23037                 max: max$2,
23038                 mean: mean,
23039                 median: d3_median,
23040                 merge: merge,
23041                 min: min,
23042                 pairs: pairs,
23043                 permute: permute,
23044                 quantile: threshold,
23045                 range: d3_range,
23046                 scan: scan,
23047                 shuffle: shuffle,
23048                 sum: sum,
23049                 ticks: ticks,
23050                 tickIncrement: tickIncrement,
23051                 tickStep: tickStep,
23052                 transpose: transpose,
23053                 variance: variance,
23054                 zip: zip,
23055                 brush: brush,
23056                 brushX: brushX,
23057                 brushY: brushY,
23058                 brushSelection: brushSelection,
23059                 chord: chord,
23060                 ribbon: ribbon,
23061                 nest: nest,
23062                 set: set$2,
23063                 map: map$3,
23064                 keys: keys$3,
23065                 values: values,
23066                 entries: entries,
23067                 color: color,
23068                 rgb: rgb,
23069                 hsl: hsl,
23070                 lab: lab,
23071                 hcl: hcl,
23072                 lch: lch,
23073                 gray: gray,
23074                 cubehelix: cubehelix,
23075                 contours: contours,
23076                 contourDensity: density,
23077                 dispatch: dispatch,
23078                 drag: d3_drag,
23079                 dragDisable: dragDisable,
23080                 dragEnable: yesdrag,
23081                 dsvFormat: dsvFormat,
23082                 csvParse: csvParse,
23083                 csvParseRows: csvParseRows,
23084                 csvFormat: csvFormat,
23085                 csvFormatBody: csvFormatBody,
23086                 csvFormatRows: csvFormatRows,
23087                 tsvParse: tsvParse,
23088                 tsvParseRows: tsvParseRows,
23089                 tsvFormat: tsvFormat,
23090                 tsvFormatBody: tsvFormatBody,
23091                 tsvFormatRows: tsvFormatRows,
23092                 autoType: autoType,
23093                 easeLinear: linear$1,
23094                 easeQuad: quadInOut,
23095                 easeQuadIn: quadIn,
23096                 easeQuadOut: quadOut,
23097                 easeQuadInOut: quadInOut,
23098                 easeCubic: cubicInOut,
23099                 easeCubicIn: cubicIn,
23100                 easeCubicOut: cubicOut,
23101                 easeCubicInOut: cubicInOut,
23102                 easePoly: polyInOut,
23103                 easePolyIn: polyIn,
23104                 easePolyOut: polyOut,
23105                 easePolyInOut: polyInOut,
23106                 easeSin: sinInOut,
23107                 easeSinIn: sinIn,
23108                 easeSinOut: sinOut,
23109                 easeSinInOut: sinInOut,
23110                 easeExp: expInOut,
23111                 easeExpIn: expIn,
23112                 easeExpOut: expOut,
23113                 easeExpInOut: expInOut,
23114                 easeCircle: circleInOut,
23115                 easeCircleIn: circleIn,
23116                 easeCircleOut: circleOut,
23117                 easeCircleInOut: circleInOut,
23118                 easeBounce: bounceOut,
23119                 easeBounceIn: bounceIn,
23120                 easeBounceOut: bounceOut,
23121                 easeBounceInOut: bounceInOut,
23122                 easeBack: backInOut,
23123                 easeBackIn: backIn,
23124                 easeBackOut: backOut,
23125                 easeBackInOut: backInOut,
23126                 easeElastic: elasticOut,
23127                 easeElasticIn: elasticIn,
23128                 easeElasticOut: elasticOut,
23129                 easeElasticInOut: elasticInOut,
23130                 blob: blob,
23131                 buffer: buffer,
23132                 dsv: dsv,
23133                 csv: csv$1,
23134                 tsv: tsv$1,
23135                 image: image,
23136                 json: d3_json,
23137                 text: d3_text,
23138                 xml: d3_xml,
23139                 html: html,
23140                 svg: svg,
23141                 forceCenter: center$1,
23142                 forceCollide: collide,
23143                 forceLink: link,
23144                 forceManyBody: manyBody,
23145                 forceRadial: radial,
23146                 forceSimulation: simulation,
23147                 forceX: x$2,
23148                 forceY: y$2,
23149                 formatDefaultLocale: defaultLocale,
23150                 get format () { return format; },
23151                 get formatPrefix () { return formatPrefix; },
23152                 formatLocale: formatLocale,
23153                 formatSpecifier: formatSpecifier,
23154                 precisionFixed: precisionFixed,
23155                 precisionPrefix: precisionPrefix,
23156                 precisionRound: precisionRound,
23157                 geoArea: d3_geoArea,
23158                 geoBounds: d3_geoBounds,
23159                 geoCentroid: d3_geoCentroid,
23160                 geoCircle: circle,
23161                 geoClipAntimeridian: clipAntimeridian,
23162                 geoClipCircle: clipCircle,
23163                 geoClipExtent: extent$1,
23164                 geoClipRectangle: clipRectangle,
23165                 geoContains: contains$2,
23166                 geoDistance: distance,
23167                 geoGraticule: graticule,
23168                 geoGraticule10: graticule10,
23169                 geoInterpolate: interpolate$1,
23170                 geoLength: d3_geoLength,
23171                 geoPath: d3_geoPath,
23172                 geoAlbers: albers,
23173                 geoAlbersUsa: albersUsa,
23174                 geoAzimuthalEqualArea: azimuthalEqualArea,
23175                 geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw,
23176                 geoAzimuthalEquidistant: azimuthalEquidistant,
23177                 geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw,
23178                 geoConicConformal: conicConformal,
23179                 geoConicConformalRaw: conicConformalRaw,
23180                 geoConicEqualArea: conicEqualArea,
23181                 geoConicEqualAreaRaw: conicEqualAreaRaw,
23182                 geoConicEquidistant: conicEquidistant,
23183                 geoConicEquidistantRaw: conicEquidistantRaw,
23184                 geoEqualEarth: equalEarth,
23185                 geoEqualEarthRaw: equalEarthRaw,
23186                 geoEquirectangular: equirectangular,
23187                 geoEquirectangularRaw: equirectangularRaw,
23188                 geoGnomonic: gnomonic,
23189                 geoGnomonicRaw: gnomonicRaw,
23190                 geoIdentity: d3_geoIdentity,
23191                 geoProjection: projection,
23192                 geoProjectionMutator: projectionMutator,
23193                 geoMercator: mercator,
23194                 geoMercatorRaw: mercatorRaw,
23195                 geoNaturalEarth1: naturalEarth1,
23196                 geoNaturalEarth1Raw: naturalEarth1Raw,
23197                 geoOrthographic: orthographic,
23198                 geoOrthographicRaw: orthographicRaw,
23199                 geoStereographic: stereographic,
23200                 geoStereographicRaw: stereographicRaw,
23201                 geoTransverseMercator: transverseMercator,
23202                 geoTransverseMercatorRaw: transverseMercatorRaw,
23203                 geoRotation: rotation,
23204                 geoStream: d3_geoStream,
23205                 geoTransform: d3_geoTransform,
23206                 axisTop: axisTop,
23207                 axisRight: axisRight,
23208                 axisBottom: axisBottom,
23209                 axisLeft: axisLeft,
23210                 interpolate: d3_interpolate,
23211                 interpolateArray: array$2,
23212                 interpolateBasis: basis$1,
23213                 interpolateBasisClosed: basisClosed,
23214                 interpolateDate: date,
23215                 interpolateDiscrete: discrete,
23216                 interpolateHue: hue$1,
23217                 interpolateNumber: d3_interpolateNumber,
23218                 interpolateObject: object,
23219                 interpolateRound: interpolateRound,
23220                 interpolateString: interpolateString,
23221                 interpolateTransformCss: interpolateTransformCss,
23222                 interpolateTransformSvg: interpolateTransformSvg,
23223                 interpolateZoom: interpolateZoom,
23224                 interpolateRgb: d3_interpolateRgb,
23225                 interpolateRgbBasis: rgbBasis,
23226                 interpolateRgbBasisClosed: rgbBasisClosed,
23227                 interpolateHsl: hsl$2,
23228                 interpolateHslLong: hslLong,
23229                 interpolateLab: lab$1,
23230                 interpolateHcl: hcl$2,
23231                 interpolateHclLong: hclLong,
23232                 interpolateCubehelix: cubehelix$2,
23233                 interpolateCubehelixLong: cubehelixLong,
23234                 piecewise: piecewise,
23235                 quantize: d3_quantize,
23236                 path: path,
23237                 polygonArea: d3_polygonArea,
23238                 polygonCentroid: d3_polygonCentroid,
23239                 polygonHull: d3_polygonHull,
23240                 polygonContains: contains$3,
23241                 polygonLength: length$1,
23242                 quadtree: quadtree,
23243                 randomUniform: uniform,
23244                 randomNormal: normal,
23245                 randomLogNormal: logNormal,
23246                 randomBates: bates,
23247                 randomIrwinHall: irwinHall,
23248                 randomExponential: exponential$1,
23249                 scaleBand: band,
23250                 scalePoint: point$1,
23251                 scaleIdentity: identity$6,
23252                 scaleLinear: linear$2,
23253                 scaleLog: log$1,
23254                 scaleSymlog: symlog,
23255                 scaleOrdinal: ordinal,
23256                 scaleImplicit: implicit,
23257                 scalePow: pow$1,
23258                 scaleSqrt: sqrt$1,
23259                 scaleQuantile: quantile,
23260                 scaleQuantize: quantize,
23261                 scaleThreshold: threshold$1,
23262                 scaleTime: time,
23263                 scaleUtc: utcTime,
23264                 scaleSequential: sequential,
23265                 scaleSequentialLog: sequentialLog,
23266                 scaleSequentialPow: sequentialPow,
23267                 scaleSequentialSqrt: sequentialSqrt,
23268                 scaleSequentialSymlog: sequentialSymlog,
23269                 scaleSequentialQuantile: sequentialQuantile,
23270                 scaleDiverging: diverging,
23271                 scaleDivergingLog: divergingLog,
23272                 scaleDivergingPow: divergingPow,
23273                 scaleDivergingSqrt: divergingSqrt,
23274                 scaleDivergingSymlog: divergingSymlog,
23275                 tickFormat: tickFormat,
23276                 schemeCategory10: category10,
23277                 schemeAccent: Accent,
23278                 schemeDark2: Dark2,
23279                 schemePaired: Paired,
23280                 schemePastel1: Pastel1,
23281                 schemePastel2: Pastel2,
23282                 schemeSet1: Set1,
23283                 schemeSet2: Set2,
23284                 schemeSet3: Set3,
23285                 interpolateBrBG: BrBG,
23286                 schemeBrBG: scheme,
23287                 interpolatePRGn: PRGn,
23288                 schemePRGn: scheme$1,
23289                 interpolatePiYG: PiYG,
23290                 schemePiYG: scheme$2,
23291                 interpolatePuOr: PuOr,
23292                 schemePuOr: scheme$3,
23293                 interpolateRdBu: RdBu,
23294                 schemeRdBu: scheme$4,
23295                 interpolateRdGy: RdGy,
23296                 schemeRdGy: scheme$5,
23297                 interpolateRdYlBu: RdYlBu,
23298                 schemeRdYlBu: scheme$6,
23299                 interpolateRdYlGn: RdYlGn,
23300                 schemeRdYlGn: scheme$7,
23301                 interpolateSpectral: Spectral,
23302                 schemeSpectral: scheme$8,
23303                 interpolateBuGn: BuGn,
23304                 schemeBuGn: scheme$9,
23305                 interpolateBuPu: BuPu,
23306                 schemeBuPu: scheme$a,
23307                 interpolateGnBu: GnBu,
23308                 schemeGnBu: scheme$b,
23309                 interpolateOrRd: OrRd,
23310                 schemeOrRd: scheme$c,
23311                 interpolatePuBuGn: PuBuGn,
23312                 schemePuBuGn: scheme$d,
23313                 interpolatePuBu: PuBu,
23314                 schemePuBu: scheme$e,
23315                 interpolatePuRd: PuRd,
23316                 schemePuRd: scheme$f,
23317                 interpolateRdPu: RdPu,
23318                 schemeRdPu: scheme$g,
23319                 interpolateYlGnBu: YlGnBu,
23320                 schemeYlGnBu: scheme$h,
23321                 interpolateYlGn: YlGn,
23322                 schemeYlGn: scheme$i,
23323                 interpolateYlOrBr: YlOrBr,
23324                 schemeYlOrBr: scheme$j,
23325                 interpolateYlOrRd: YlOrRd,
23326                 schemeYlOrRd: scheme$k,
23327                 interpolateBlues: Blues,
23328                 schemeBlues: scheme$l,
23329                 interpolateGreens: Greens,
23330                 schemeGreens: scheme$m,
23331                 interpolateGreys: Greys,
23332                 schemeGreys: scheme$n,
23333                 interpolatePurples: Purples,
23334                 schemePurples: scheme$o,
23335                 interpolateReds: Reds,
23336                 schemeReds: scheme$p,
23337                 interpolateOranges: Oranges,
23338                 schemeOranges: scheme$q,
23339                 interpolateCubehelixDefault: cubehelix$3,
23340                 interpolateRainbow: rainbow,
23341                 interpolateWarm: warm,
23342                 interpolateCool: cool,
23343                 interpolateSinebow: sinebow,
23344                 interpolateViridis: viridis,
23345                 interpolateMagma: magma,
23346                 interpolateInferno: inferno,
23347                 interpolatePlasma: plasma,
23348                 create: create$5,
23349                 creator: creator,
23350                 local: local,
23351                 matcher: matcher,
23352                 mouse: d3_mouse,
23353                 namespace: namespace,
23354                 namespaces: namespaces,
23355                 clientPoint: point,
23356                 select: d3_select,
23357                 selectAll: d3_selectAll,
23358                 selection: selection,
23359                 selector: selector,
23360                 selectorAll: selectorAll,
23361                 style: styleValue,
23362                 touch: touch,
23363                 touches: d3_touches,
23364                 window: defaultView,
23365                 get event () { return event; },
23366                 customEvent: customEvent,
23367                 arc: arc,
23368                 area: area$1,
23369                 line: line,
23370                 pie: pie,
23371                 areaRadial: areaRadial,
23372                 radialArea: areaRadial,
23373                 lineRadial: lineRadial$1,
23374                 radialLine: lineRadial$1,
23375                 pointRadial: pointRadial,
23376                 linkHorizontal: linkHorizontal,
23377                 linkVertical: linkVertical,
23378                 linkRadial: linkRadial,
23379                 symbol: symbol,
23380                 symbols: symbols,
23381                 symbolCircle: circle$2,
23382                 symbolCross: cross$2,
23383                 symbolDiamond: diamond,
23384                 symbolSquare: square,
23385                 symbolStar: star,
23386                 symbolTriangle: triangle,
23387                 symbolWye: wye,
23388                 curveBasisClosed: basisClosed$1,
23389                 curveBasisOpen: basisOpen,
23390                 curveBasis: basis$2,
23391                 curveBundle: bundle,
23392                 curveCardinalClosed: cardinalClosed,
23393                 curveCardinalOpen: cardinalOpen,
23394                 curveCardinal: cardinal,
23395                 curveCatmullRomClosed: catmullRomClosed,
23396                 curveCatmullRomOpen: catmullRomOpen,
23397                 curveCatmullRom: catmullRom,
23398                 curveLinearClosed: linearClosed,
23399                 curveLinear: curveLinear,
23400                 curveMonotoneX: monotoneX,
23401                 curveMonotoneY: monotoneY,
23402                 curveNatural: natural,
23403                 curveStep: step,
23404                 curveStepAfter: stepAfter,
23405                 curveStepBefore: stepBefore,
23406                 stack: stack,
23407                 stackOffsetExpand: expand,
23408                 stackOffsetDiverging: diverging$1,
23409                 stackOffsetNone: none$1,
23410                 stackOffsetSilhouette: silhouette,
23411                 stackOffsetWiggle: wiggle,
23412                 stackOrderAppearance: appearance,
23413                 stackOrderAscending: ascending$2,
23414                 stackOrderDescending: descending$1,
23415                 stackOrderInsideOut: insideOut,
23416                 stackOrderNone: none$2,
23417                 stackOrderReverse: reverse,
23418                 timeInterval: newInterval,
23419                 timeMillisecond: millisecond,
23420                 timeMilliseconds: milliseconds,
23421                 utcMillisecond: millisecond,
23422                 utcMilliseconds: milliseconds,
23423                 timeSecond: second,
23424                 timeSeconds: seconds,
23425                 utcSecond: second,
23426                 utcSeconds: seconds,
23427                 timeMinute: minute,
23428                 timeMinutes: minutes,
23429                 timeHour: hour,
23430                 timeHours: hours,
23431                 timeDay: day,
23432                 timeDays: days,
23433                 timeWeek: sunday,
23434                 timeWeeks: sundays,
23435                 timeSunday: sunday,
23436                 timeSundays: sundays,
23437                 timeMonday: monday,
23438                 timeMondays: mondays,
23439                 timeTuesday: tuesday,
23440                 timeTuesdays: tuesdays,
23441                 timeWednesday: wednesday,
23442                 timeWednesdays: wednesdays,
23443                 timeThursday: thursday,
23444                 timeThursdays: thursdays,
23445                 timeFriday: friday,
23446                 timeFridays: fridays,
23447                 timeSaturday: saturday,
23448                 timeSaturdays: saturdays,
23449                 timeMonth: month,
23450                 timeMonths: months,
23451                 timeYear: year,
23452                 timeYears: years,
23453                 utcMinute: utcMinute,
23454                 utcMinutes: utcMinutes,
23455                 utcHour: utcHour,
23456                 utcHours: utcHours,
23457                 utcDay: utcDay,
23458                 utcDays: utcDays,
23459                 utcWeek: utcSunday,
23460                 utcWeeks: utcSundays,
23461                 utcSunday: utcSunday,
23462                 utcSundays: utcSundays,
23463                 utcMonday: utcMonday,
23464                 utcMondays: utcMondays,
23465                 utcTuesday: utcTuesday,
23466                 utcTuesdays: utcTuesdays,
23467                 utcWednesday: utcWednesday,
23468                 utcWednesdays: utcWednesdays,
23469                 utcThursday: utcThursday,
23470                 utcThursdays: utcThursdays,
23471                 utcFriday: utcFriday,
23472                 utcFridays: utcFridays,
23473                 utcSaturday: utcSaturday,
23474                 utcSaturdays: utcSaturdays,
23475                 utcMonth: utcMonth,
23476                 utcMonths: utcMonths,
23477                 utcYear: utcYear,
23478                 utcYears: utcYears,
23479                 timeFormatDefaultLocale: defaultLocale$1,
23480                 get timeFormat () { return timeFormat; },
23481                 get timeParse () { return timeParse; },
23482                 get utcFormat () { return utcFormat; },
23483                 get utcParse () { return utcParse; },
23484                 timeFormatLocale: formatLocale$1,
23485                 isoFormat: formatIso,
23486                 isoParse: parseIso,
23487                 now: now,
23488                 timer: timer,
23489                 timerFlush: timerFlush,
23490                 timeout: d3_timeout,
23491                 interval: interval$1,
23492                 transition: transition,
23493                 active: active,
23494                 interrupt: interrupt,
23495                 voronoi: voronoi,
23496                 zoom: d3_zoom,
23497                 zoomTransform: transform,
23498                 zoomIdentity: identity$8
23499         });
23500
23501         function actionAddEntity(way) {
23502             return function(graph) {
23503                 return graph.replace(way);
23504             };
23505         }
23506
23507         /*
23508         Order the nodes of a way in reverse order and reverse any direction dependent tags
23509         other than `oneway`. (We assume that correcting a backwards oneway is the primary
23510         reason for reversing a way.)
23511
23512         In addition, numeric-valued `incline` tags are negated.
23513
23514         The JOSM implementation was used as a guide, but transformations that were of unclear benefit
23515         or adjusted tags that don't seem to be used in practice were omitted.
23516
23517         References:
23518             http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right
23519             http://wiki.openstreetmap.org/wiki/Key:direction#Steps
23520             http://wiki.openstreetmap.org/wiki/Key:incline
23521             http://wiki.openstreetmap.org/wiki/Route#Members
23522             http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
23523             http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop
23524             http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area
23525         */
23526         function actionReverse(wayID, options) {
23527             var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
23528             var numeric = /^([+\-]?)(?=[\d.])/;
23529             var turn_lanes = /^turn:lanes:?/;
23530             var keyReplacements = [
23531                 [/:right$/, ':left'],
23532                 [/:left$/, ':right'],
23533                 [/:forward$/, ':backward'],
23534                 [/:backward$/, ':forward'],
23535                 [/:right:/, ':left:'],
23536                 [/:left:/, ':right:'],
23537                 [/:forward:/, ':backward:'],
23538                 [/:backward:/, ':forward:']
23539             ];
23540             var valueReplacements = {
23541                 left: 'right',
23542                 right: 'left',
23543                 up: 'down',
23544                 down: 'up',
23545                 forward: 'backward',
23546                 backward: 'forward',
23547                 forwards: 'backward',
23548                 backwards: 'forward',
23549             };
23550             var roleReplacements = {
23551                 forward: 'backward',
23552                 backward: 'forward',
23553                 forwards: 'backward',
23554                 backwards: 'forward'
23555             };
23556             var onewayReplacements = {
23557                 yes: '-1',
23558                 '1': '-1',
23559                 '-1': 'yes'
23560             };
23561
23562
23563             function reverseKey(key) {
23564                 for (var i = 0; i < keyReplacements.length; ++i) {
23565                     var replacement = keyReplacements[i];
23566                     if (replacement[0].test(key)) {
23567                         return key.replace(replacement[0], replacement[1]);
23568                     }
23569                 }
23570                 return key;
23571             }
23572
23573
23574             function reverseValue(key, value) {
23575                 if (ignoreKey.test(key)) return value;
23576
23577                 // Turn lanes are left/right to key (not way) direction - #5674
23578                 if (turn_lanes.test(key)) {
23579                     return value;
23580                 } else if (key === 'incline' && numeric.test(value)) {
23581                     return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
23582                 } else if (options && options.reverseOneway && key === 'oneway') {
23583                     return onewayReplacements[value] || value;
23584                 } else {
23585                     return valueReplacements[value] || value;
23586                 }
23587             }
23588
23589
23590             // Reverse the direction of tags attached to the nodes - #3076
23591             function reverseNodeTags(graph, nodeIDs) {
23592                 for (var i = 0; i < nodeIDs.length; i++) {
23593                     var node = graph.hasEntity(nodeIDs[i]);
23594                     if (!node || !Object.keys(node.tags).length) continue;
23595
23596                     var tags = {};
23597                     for (var key in node.tags) {
23598                         tags[reverseKey(key)] = reverseValue(key, node.tags[key]);
23599                     }
23600                     graph = graph.replace(node.update({tags: tags}));
23601                 }
23602                 return graph;
23603             }
23604
23605
23606             return function(graph) {
23607                 var way = graph.entity(wayID);
23608                 var nodes = way.nodes.slice().reverse();
23609                 var tags = {};
23610                 var role;
23611
23612                 for (var key in way.tags) {
23613                     tags[reverseKey(key)] = reverseValue(key, way.tags[key]);
23614                 }
23615
23616                 graph.parentRelations(way).forEach(function(relation) {
23617                     relation.members.forEach(function(member, index) {
23618                         if (member.id === way.id && (role = roleReplacements[member.role])) {
23619                             relation = relation.updateMember({role: role}, index);
23620                             graph = graph.replace(relation);
23621                         }
23622                     });
23623                 });
23624
23625                 // Reverse any associated directions on nodes on the way and then replace
23626                 // the way itself with the reversed node ids and updated way tags
23627                 return reverseNodeTags(graph, nodes)
23628                     .replace(way.update({nodes: nodes, tags: tags}));
23629             };
23630         }
23631
23632         function osmIsInterestingTag(key) {
23633             return key !== 'attribution' &&
23634                 key !== 'created_by' &&
23635                 key !== 'source' &&
23636                 key !== 'odbl' &&
23637                 key.indexOf('tiger:') !== 0;
23638         }
23639
23640         var osmAreaKeys = {};
23641         function osmSetAreaKeys(value) {
23642             osmAreaKeys = value;
23643         }
23644
23645         // Tags that indicate a node can be a standalone point
23646         // e.g. { amenity: { bar: true, parking: true, ... } ... }
23647         var osmPointTags = {};
23648         function osmSetPointTags(value) {
23649             osmPointTags = value;
23650         }
23651         // Tags that indicate a node can be part of a way
23652         // e.g. { amenity: { parking: true, ... }, highway: { stop: true ... } ... }
23653         var osmVertexTags = {};
23654         function osmSetVertexTags(value) {
23655             osmVertexTags = value;
23656         }
23657
23658         function osmNodeGeometriesForTags(nodeTags) {
23659             var geometries = {};
23660             for (var key in nodeTags) {
23661                 if (osmPointTags[key] &&
23662                     (osmPointTags[key]['*'] || osmPointTags[key][nodeTags[key]])) {
23663                     geometries.point = true;
23664                 }
23665                 if (osmVertexTags[key] &&
23666                     (osmVertexTags[key]['*'] || osmVertexTags[key][nodeTags[key]])) {
23667                     geometries.vertex = true;
23668                 }
23669                 // break early if both are already supported
23670                 if (geometries.point && geometries.vertex) break;
23671             }
23672             return geometries;
23673         }
23674
23675         var osmOneWayTags = {
23676             'aerialway': {
23677                 'chair_lift': true,
23678                 'drag_lift': true,
23679                 'j-bar': true,
23680                 'magic_carpet': true,
23681                 'mixed_lift': true,
23682                 'platter': true,
23683                 'rope_tow': true,
23684                 't-bar': true,
23685                 'zip_line': true
23686             },
23687             'highway': {
23688                 'motorway': true
23689             },
23690             'junction': {
23691                 'circular': true,
23692                 'roundabout': true
23693             },
23694             'man_made': {
23695                 'piste:halfpipe': true
23696             },
23697             'piste:type': {
23698                 'downhill': true,
23699                 'sled': true,
23700                 'yes': true
23701             },
23702             'waterway': {
23703                 'canal': true,
23704                 'ditch': true,
23705                 'drain': true,
23706                 'river': true,
23707                 'stream': true
23708             }
23709         };
23710
23711
23712         var osmPavedTags = {
23713             'surface': {
23714                 'paved': true,
23715                 'asphalt': true,
23716                 'concrete': true,
23717                 'concrete:lanes': true,
23718                 'concrete:plates': true
23719             },
23720             'tracktype': {
23721                 'grade1': true
23722             }
23723         };
23724
23725         var osmRightSideIsInsideTags = {
23726             'natural': {
23727                 'cliff': true,
23728                 'coastline': 'coastline',
23729             },
23730             'barrier': {
23731                 'retaining_wall': true,
23732                 'kerb': true,
23733                 'guard_rail': true,
23734                 'city_wall': true,
23735             },
23736             'man_made': {
23737                 'embankment': true
23738             },
23739             'waterway': {
23740                 'weir': true
23741             }
23742         };
23743
23744         // "highway" tag values for pedestrian or vehicle right-of-ways that make up the routable network
23745         // (does not include `raceway`)
23746         var osmRoutableHighwayTagValues = {
23747             motorway: true, trunk: true, primary: true, secondary: true, tertiary: true, residential: true,
23748             motorway_link: true, trunk_link: true, primary_link: true, secondary_link: true, tertiary_link: true,
23749             unclassified: true, road: true, service: true, track: true, living_street: true, bus_guideway: true,
23750             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
23751         };
23752         // "highway" tag values that generally do not allow motor vehicles
23753         var osmPathHighwayTagValues = {
23754             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
23755         };
23756
23757         // "railway" tag values representing existing railroad tracks (purposely does not include 'abandoned')
23758         var osmRailwayTrackTagValues = {
23759             rail: true, light_rail: true, tram: true, subway: true,
23760             monorail: true, funicular: true, miniature: true, narrow_gauge: true,
23761             disused: true, preserved: true
23762         };
23763
23764         // "waterway" tag values for line features representing water flow
23765         var osmFlowingWaterwayTagValues = {
23766             canal: true, ditch: true, drain: true, river: true, stream: true
23767         };
23768
23769         // constants
23770         var TAU = 2 * Math.PI;
23771         var EQUATORIAL_RADIUS = 6356752.314245179;
23772         var POLAR_RADIUS = 6378137.0;
23773
23774
23775         function geoLatToMeters(dLat) {
23776             return dLat * (TAU * POLAR_RADIUS / 360);
23777         }
23778
23779
23780         function geoLonToMeters(dLon, atLat) {
23781             return Math.abs(atLat) >= 90 ? 0 :
23782                 dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
23783         }
23784
23785
23786         function geoMetersToLat(m) {
23787             return m / (TAU * POLAR_RADIUS / 360);
23788         }
23789
23790
23791         function geoMetersToLon(m, atLat) {
23792             return Math.abs(atLat) >= 90 ? 0 :
23793                 m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
23794         }
23795
23796
23797         function geoMetersToOffset(meters, tileSize) {
23798             tileSize = tileSize || 256;
23799             return [
23800                 meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
23801                 -meters[1] * tileSize / (TAU * POLAR_RADIUS)
23802             ];
23803         }
23804
23805
23806         function geoOffsetToMeters(offset, tileSize) {
23807             tileSize = tileSize || 256;
23808             return [
23809                 offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
23810                 -offset[1] * TAU * POLAR_RADIUS / tileSize
23811             ];
23812         }
23813
23814
23815         // Equirectangular approximation of spherical distances on Earth
23816         function geoSphericalDistance(a, b) {
23817             var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2);
23818             var y = geoLatToMeters(a[1] - b[1]);
23819             return Math.sqrt((x * x) + (y * y));
23820         }
23821
23822
23823         // scale to zoom
23824         function geoScaleToZoom(k, tileSize) {
23825             tileSize = tileSize || 256;
23826             var log2ts = Math.log(tileSize) * Math.LOG2E;
23827             return Math.log(k * TAU) / Math.LN2 - log2ts;
23828         }
23829
23830
23831         // zoom to scale
23832         function geoZoomToScale(z, tileSize) {
23833             tileSize = tileSize || 256;
23834             return tileSize * Math.pow(2, z) / TAU;
23835         }
23836
23837
23838         // returns info about the node from `nodes` closest to the given `point`
23839         function geoSphericalClosestNode(nodes, point) {
23840             var minDistance = Infinity, distance;
23841             var indexOfMin;
23842
23843             for (var i in nodes) {
23844                 distance = geoSphericalDistance(nodes[i].loc, point);
23845                 if (distance < minDistance) {
23846                     minDistance = distance;
23847                     indexOfMin = i;
23848                 }
23849             }
23850
23851             if (indexOfMin !== undefined) {
23852                 return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
23853             } else {
23854                 return null;
23855             }
23856         }
23857
23858         function geoExtent(min, max) {
23859             if (!(this instanceof geoExtent)) {
23860                 return new geoExtent(min, max);
23861             } else if (min instanceof geoExtent) {
23862                 return min;
23863             } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) {
23864                 this[0] = min[0];
23865                 this[1] = min[1];
23866             } else {
23867                 this[0] = min        || [ Infinity,  Infinity];
23868                 this[1] = max || min || [-Infinity, -Infinity];
23869             }
23870         }
23871
23872         geoExtent.prototype = new Array(2);
23873
23874         Object.assign(geoExtent.prototype, {
23875
23876             equals: function (obj) {
23877                 return this[0][0] === obj[0][0] &&
23878                     this[0][1] === obj[0][1] &&
23879                     this[1][0] === obj[1][0] &&
23880                     this[1][1] === obj[1][1];
23881             },
23882
23883
23884             extend: function(obj) {
23885                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23886                 return geoExtent(
23887                     [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
23888                     [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
23889                 );
23890             },
23891
23892
23893             _extend: function(extent) {
23894                 this[0][0] = Math.min(extent[0][0], this[0][0]);
23895                 this[0][1] = Math.min(extent[0][1], this[0][1]);
23896                 this[1][0] = Math.max(extent[1][0], this[1][0]);
23897                 this[1][1] = Math.max(extent[1][1], this[1][1]);
23898             },
23899
23900
23901             area: function() {
23902                 return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
23903             },
23904
23905
23906             center: function() {
23907                 return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
23908             },
23909
23910
23911             rectangle: function() {
23912                 return [this[0][0], this[0][1], this[1][0], this[1][1]];
23913             },
23914
23915
23916             bbox: function() {
23917                 return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
23918             },
23919
23920
23921             polygon: function() {
23922                 return [
23923                     [this[0][0], this[0][1]],
23924                     [this[0][0], this[1][1]],
23925                     [this[1][0], this[1][1]],
23926                     [this[1][0], this[0][1]],
23927                     [this[0][0], this[0][1]]
23928                 ];
23929             },
23930
23931
23932             contains: function(obj) {
23933                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23934                 return obj[0][0] >= this[0][0] &&
23935                        obj[0][1] >= this[0][1] &&
23936                        obj[1][0] <= this[1][0] &&
23937                        obj[1][1] <= this[1][1];
23938             },
23939
23940
23941             intersects: function(obj) {
23942                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23943                 return obj[0][0] <= this[1][0] &&
23944                        obj[0][1] <= this[1][1] &&
23945                        obj[1][0] >= this[0][0] &&
23946                        obj[1][1] >= this[0][1];
23947             },
23948
23949
23950             intersection: function(obj) {
23951                 if (!this.intersects(obj)) return new geoExtent();
23952                 return new geoExtent(
23953                     [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
23954                     [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
23955                 );
23956             },
23957
23958
23959             percentContainedIn: function(obj) {
23960                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23961                 var a1 = this.intersection(obj).area();
23962                 var a2 = this.area();
23963
23964                 if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) {
23965                     return 0;
23966                 } else {
23967                     return a1 / a2;
23968                 }
23969             },
23970
23971
23972             padByMeters: function(meters) {
23973                 var dLat = geoMetersToLat(meters);
23974                 var dLon = geoMetersToLon(meters, this.center()[1]);
23975                 return geoExtent(
23976                     [this[0][0] - dLon, this[0][1] - dLat],
23977                     [this[1][0] + dLon, this[1][1] + dLat]
23978                 );
23979             },
23980
23981
23982             toParam: function() {
23983                 return this.rectangle().join(',');
23984             }
23985
23986         });
23987
23988         // vector equals
23989         function geoVecEqual(a, b, epsilon) {
23990             if (epsilon) {
23991                 return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon);
23992             } else {
23993                 return (a[0] === b[0]) && (a[1] === b[1]);
23994             }
23995         }
23996
23997         // vector addition
23998         function geoVecAdd(a, b) {
23999             return [ a[0] + b[0], a[1] + b[1] ];
24000         }
24001
24002         // vector subtraction
24003         function geoVecSubtract(a, b) {
24004             return [ a[0] - b[0], a[1] - b[1] ];
24005         }
24006
24007         // vector scaling
24008         function geoVecScale(a, mag) {
24009             return [ a[0] * mag, a[1] * mag ];
24010         }
24011
24012         // vector rounding (was: geoRoundCoordinates)
24013         function geoVecFloor(a) {
24014             return [ Math.floor(a[0]), Math.floor(a[1]) ];
24015         }
24016
24017         // linear interpolation
24018         function geoVecInterp(a, b, t) {
24019             return [
24020                 a[0] + (b[0] - a[0]) * t,
24021                 a[1] + (b[1] - a[1]) * t
24022             ];
24023         }
24024
24025         // http://jsperf.com/id-dist-optimization
24026         function geoVecLength(a, b) {
24027             b = b || [0, 0];
24028             var x = a[0] - b[0];
24029             var y = a[1] - b[1];
24030             return Math.sqrt((x * x) + (y * y));
24031         }
24032
24033         // get a unit vector
24034         function geoVecNormalize(a) {
24035             var length = Math.sqrt((a[0] * a[0]) + (a[1] * a[1]));
24036             if (length !== 0) {
24037                 return geoVecScale(a, 1 / length);
24038             }
24039             return [0, 0];
24040         }
24041
24042         // Return the counterclockwise angle in the range (-pi, pi)
24043         // between the positive X axis and the line intersecting a and b.
24044         function geoVecAngle(a, b) {
24045             return Math.atan2(b[1] - a[1], b[0] - a[0]);
24046         }
24047
24048         // dot product
24049         function geoVecDot(a, b, origin) {
24050             origin = origin || [0, 0];
24051             var p = geoVecSubtract(a, origin);
24052             var q = geoVecSubtract(b, origin);
24053             return (p[0]) * (q[0]) + (p[1]) * (q[1]);
24054         }
24055
24056         // normalized dot product
24057         function geoVecNormalizedDot(a, b, origin) {
24058             origin = origin || [0, 0];
24059             var p = geoVecNormalize(geoVecSubtract(a, origin));
24060             var q = geoVecNormalize(geoVecSubtract(b, origin));
24061             return geoVecDot(p, q);
24062         }
24063
24064         // 2D cross product of OA and OB vectors, returns magnitude of Z vector
24065         // Returns a positive value, if OAB makes a counter-clockwise turn,
24066         // negative for clockwise turn, and zero if the points are collinear.
24067         function geoVecCross(a, b, origin) {
24068             origin = origin || [0, 0];
24069             var p = geoVecSubtract(a, origin);
24070             var q = geoVecSubtract(b, origin);
24071             return (p[0]) * (q[1]) - (p[1]) * (q[0]);
24072         }
24073
24074
24075         // find closest orthogonal projection of point onto points array
24076         function geoVecProject(a, points) {
24077             var min = Infinity;
24078             var idx;
24079             var target;
24080
24081             for (var i = 0; i < points.length - 1; i++) {
24082                 var o = points[i];
24083                 var s = geoVecSubtract(points[i + 1], o);
24084                 var v = geoVecSubtract(a, o);
24085                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
24086                 var p;
24087
24088                 if (proj < 0) {
24089                     p = o;
24090                 } else if (proj > 1) {
24091                     p = points[i + 1];
24092                 } else {
24093                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
24094                 }
24095
24096                 var dist = geoVecLength(p, a);
24097                 if (dist < min) {
24098                     min = dist;
24099                     idx = i + 1;
24100                     target = p;
24101                 }
24102             }
24103
24104             if (idx !== undefined) {
24105                 return { index: idx, distance: min, target: target };
24106             } else {
24107                 return null;
24108             }
24109         }
24110
24111         // Return the counterclockwise angle in the range (-pi, pi)
24112         // between the positive X axis and the line intersecting a and b.
24113         function geoAngle(a, b, projection) {
24114             return geoVecAngle(projection(a.loc), projection(b.loc));
24115         }
24116
24117
24118         function geoEdgeEqual(a, b) {
24119             return (a[0] === b[0] && a[1] === b[1]) ||
24120                 (a[0] === b[1] && a[1] === b[0]);
24121         }
24122
24123
24124         // Rotate all points counterclockwise around a pivot point by given angle
24125         function geoRotate(points, angle, around) {
24126             return points.map(function(point) {
24127                 var radial = geoVecSubtract(point, around);
24128                 return [
24129                     radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0],
24130                     radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1]
24131                 ];
24132             });
24133         }
24134
24135
24136         // Choose the edge with the minimal distance from `point` to its orthogonal
24137         // projection onto that edge, if such a projection exists, or the distance to
24138         // the closest vertex on that edge. Returns an object with the `index` of the
24139         // chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
24140         function geoChooseEdge(nodes, point, projection, activeID) {
24141             var dist = geoVecLength;
24142             var points = nodes.map(function(n) { return projection(n.loc); });
24143             var ids = nodes.map(function(n) { return n.id; });
24144             var min = Infinity;
24145             var idx;
24146             var loc;
24147
24148             for (var i = 0; i < points.length - 1; i++) {
24149                 if (ids[i] === activeID || ids[i + 1] === activeID) continue;
24150
24151                 var o = points[i];
24152                 var s = geoVecSubtract(points[i + 1], o);
24153                 var v = geoVecSubtract(point, o);
24154                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
24155                 var p;
24156
24157                 if (proj < 0) {
24158                     p = o;
24159                 } else if (proj > 1) {
24160                     p = points[i + 1];
24161                 } else {
24162                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
24163                 }
24164
24165                 var d = dist(p, point);
24166                 if (d < min) {
24167                     min = d;
24168                     idx = i + 1;
24169                     loc = projection.invert(p);
24170                 }
24171             }
24172
24173             if (idx !== undefined) {
24174                 return { index: idx, distance: min, loc: loc };
24175             } else {
24176                 return null;
24177             }
24178         }
24179
24180
24181         // Test active (dragged or drawing) segments against inactive segments
24182         // This is used to test e.g. multipolygon rings that cross
24183         // `activeNodes` is the ring containing the activeID being dragged.
24184         // `inactiveNodes` is the other ring to test against
24185         function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
24186             var actives = [];
24187             var inactives = [];
24188             var j, k, n1, n2, segment;
24189
24190             // gather active segments (only segments in activeNodes that contain the activeID)
24191             for (j = 0; j < activeNodes.length - 1; j++) {
24192                 n1 = activeNodes[j];
24193                 n2 = activeNodes[j+1];
24194                 segment = [n1.loc, n2.loc];
24195                 if (n1.id === activeID || n2.id === activeID) {
24196                     actives.push(segment);
24197                 }
24198             }
24199
24200             // gather inactive segments
24201             for (j = 0; j < inactiveNodes.length - 1; j++) {
24202                 n1 = inactiveNodes[j];
24203                 n2 = inactiveNodes[j+1];
24204                 segment = [n1.loc, n2.loc];
24205                 inactives.push(segment);
24206             }
24207
24208             // test
24209             for (j = 0; j < actives.length; j++) {
24210                 for (k = 0; k < inactives.length; k++) {
24211                     var p = actives[j];
24212                     var q = inactives[k];
24213                     var hit = geoLineIntersection(p, q);
24214                     if (hit) {
24215                         return true;
24216                     }
24217                 }
24218             }
24219
24220             return false;
24221         }
24222
24223
24224         // Test active (dragged or drawing) segments against inactive segments
24225         // This is used to test whether a way intersects with itself.
24226         function geoHasSelfIntersections(nodes, activeID) {
24227             var actives = [];
24228             var inactives = [];
24229             var j, k;
24230
24231             // group active and passive segments along the nodes
24232             for (j = 0; j < nodes.length - 1; j++) {
24233                 var n1 = nodes[j];
24234                 var n2 = nodes[j+1];
24235                 var segment = [n1.loc, n2.loc];
24236                 if (n1.id === activeID || n2.id === activeID) {
24237                     actives.push(segment);
24238                 } else {
24239                     inactives.push(segment);
24240                 }
24241             }
24242
24243             // test
24244             for (j = 0; j < actives.length; j++) {
24245                 for (k = 0; k < inactives.length; k++) {
24246                     var p = actives[j];
24247                     var q = inactives[k];
24248                     // skip if segments share an endpoint
24249                     if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) ||
24250                         geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) {
24251                         continue;
24252                     }
24253
24254                     var hit = geoLineIntersection(p, q);
24255                     if (hit) {
24256                         var epsilon = 1e-8;
24257                         // skip if the hit is at the segment's endpoint
24258                         if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) ||
24259                             geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) {
24260                             continue;
24261                         } else {
24262                             return true;
24263                         }
24264                     }
24265                 }
24266             }
24267
24268             return false;
24269         }
24270
24271
24272         // Return the intersection point of 2 line segments.
24273         // From https://github.com/pgkelley4/line-segments-intersect
24274         // This uses the vector cross product approach described below:
24275         //  http://stackoverflow.com/a/565282/786339
24276         function geoLineIntersection(a, b) {
24277             var p = [a[0][0], a[0][1]];
24278             var p2 = [a[1][0], a[1][1]];
24279             var q = [b[0][0], b[0][1]];
24280             var q2 = [b[1][0], b[1][1]];
24281             var r = geoVecSubtract(p2, p);
24282             var s = geoVecSubtract(q2, q);
24283             var uNumerator = geoVecCross(geoVecSubtract(q, p), r);
24284             var denominator = geoVecCross(r, s);
24285
24286             if (uNumerator && denominator) {
24287                 var u = uNumerator / denominator;
24288                 var t = geoVecCross(geoVecSubtract(q, p), s) / denominator;
24289
24290                 if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) {
24291                     return geoVecInterp(p, p2, t);
24292                 }
24293             }
24294
24295             return null;
24296         }
24297
24298
24299         function geoPathIntersections(path1, path2) {
24300             var intersections = [];
24301             for (var i = 0; i < path1.length - 1; i++) {
24302                 for (var j = 0; j < path2.length - 1; j++) {
24303                     var a = [ path1[i], path1[i+1] ];
24304                     var b = [ path2[j], path2[j+1] ];
24305                     var hit = geoLineIntersection(a, b);
24306                     if (hit) {
24307                         intersections.push(hit);
24308                     }
24309                 }
24310             }
24311             return intersections;
24312         }
24313
24314         function geoPathHasIntersections(path1, path2) {
24315             for (var i = 0; i < path1.length - 1; i++) {
24316                 for (var j = 0; j < path2.length - 1; j++) {
24317                     var a = [ path1[i], path1[i+1] ];
24318                     var b = [ path2[j], path2[j+1] ];
24319                     var hit = geoLineIntersection(a, b);
24320                     if (hit) {
24321                         return true;
24322                     }
24323                 }
24324             }
24325             return false;
24326         }
24327
24328
24329         // Return whether point is contained in polygon.
24330         //
24331         // `point` should be a 2-item array of coordinates.
24332         // `polygon` should be an array of 2-item arrays of coordinates.
24333         //
24334         // From https://github.com/substack/point-in-polygon.
24335         // ray-casting algorithm based on
24336         // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
24337         //
24338         function geoPointInPolygon(point, polygon) {
24339             var x = point[0];
24340             var y = point[1];
24341             var inside = false;
24342
24343             for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
24344                 var xi = polygon[i][0];
24345                 var yi = polygon[i][1];
24346                 var xj = polygon[j][0];
24347                 var yj = polygon[j][1];
24348
24349                 var intersect = ((yi > y) !== (yj > y)) &&
24350                     (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
24351                 if (intersect) inside = !inside;
24352             }
24353
24354             return inside;
24355         }
24356
24357
24358         function geoPolygonContainsPolygon(outer, inner) {
24359             return inner.every(function(point) {
24360                 return geoPointInPolygon(point, outer);
24361             });
24362         }
24363
24364
24365         function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
24366             function testPoints(outer, inner) {
24367                 return inner.some(function(point) {
24368                     return geoPointInPolygon(point, outer);
24369                 });
24370             }
24371
24372            return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner));
24373         }
24374
24375
24376         // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
24377         // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
24378         function geoGetSmallestSurroundingRectangle(points) {
24379             var hull = d3_polygonHull(points);
24380             var centroid = d3_polygonCentroid(hull);
24381             var minArea = Infinity;
24382             var ssrExtent = [];
24383             var ssrAngle = 0;
24384             var c1 = hull[0];
24385
24386             for (var i = 0; i <= hull.length - 1; i++) {
24387                 var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1];
24388                 var angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
24389                 var poly = geoRotate(hull, -angle, centroid);
24390                 var extent = poly.reduce(function(extent, point) {
24391                     return extent.extend(geoExtent(point));
24392                 }, geoExtent());
24393
24394                 var area = extent.area();
24395                 if (area < minArea) {
24396                     minArea = area;
24397                     ssrExtent = extent;
24398                     ssrAngle = angle;
24399                 }
24400                 c1 = c2;
24401             }
24402
24403             return {
24404                 poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
24405                 angle: ssrAngle
24406             };
24407         }
24408
24409
24410         function geoPathLength(path) {
24411             var length = 0;
24412             for (var i = 0; i < path.length - 1; i++) {
24413                 length += geoVecLength(path[i], path[i + 1]);
24414             }
24415             return length;
24416         }
24417
24418
24419         // If the given point is at the edge of the padded viewport,
24420         // return a vector that will nudge the viewport in that direction
24421         function geoViewportEdge(point, dimensions) {
24422             var pad = [80, 20, 50, 20];   // top, right, bottom, left
24423             var x = 0;
24424             var y = 0;
24425
24426             if (point[0] > dimensions[0] - pad[1])
24427                 x = -10;
24428             if (point[0] < pad[3])
24429                 x = 10;
24430             if (point[1] > dimensions[1] - pad[2])
24431                 y = -10;
24432             if (point[1] < pad[0])
24433                 y = 10;
24434
24435             if (x || y) {
24436                 return [x, y];
24437             } else {
24438                 return null;
24439             }
24440         }
24441
24442         /*
24443             Bypasses features of D3's default projection stream pipeline that are unnecessary:
24444             * Antimeridian clipping
24445             * Spherical rotation
24446             * Resampling
24447         */
24448         function geoRawMercator() {
24449             var project = mercatorRaw;
24450             var k = 512 / Math.PI; // scale
24451             var x = 0;
24452             var y = 0; // translate
24453             var clipExtent = [[0, 0], [0, 0]];
24454
24455
24456             function projection(point) {
24457                 point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
24458                 return [point[0] * k + x, y - point[1] * k];
24459             }
24460
24461
24462             projection.invert = function(point) {
24463                 point = project.invert((point[0] - x) / k, (y - point[1]) / k);
24464                 return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
24465             };
24466
24467
24468             projection.scale = function(_) {
24469                 if (!arguments.length) return k;
24470                 k = +_;
24471                 return projection;
24472             };
24473
24474
24475             projection.translate = function(_) {
24476                 if (!arguments.length) return [x, y];
24477                 x = +_[0];
24478                 y = +_[1];
24479                 return projection;
24480             };
24481
24482
24483             projection.clipExtent = function(_) {
24484                 if (!arguments.length) return clipExtent;
24485                 clipExtent = _;
24486                 return projection;
24487             };
24488
24489
24490             projection.transform = function(obj) {
24491                 if (!arguments.length) return identity$8.translate(x, y).scale(k);
24492                 x = +obj.x;
24493                 y = +obj.y;
24494                 k = +obj.k;
24495                 return projection;
24496             };
24497
24498
24499             projection.stream = d3_geoTransform({
24500                 point: function(x, y) {
24501                     var vec = projection([x, y]);
24502                     this.stream.point(vec[0], vec[1]);
24503                 }
24504             }).stream;
24505
24506
24507             return projection;
24508         }
24509
24510         function geoOrthoNormalizedDotProduct(a, b, origin) {
24511             if (geoVecEqual(origin, a) || geoVecEqual(origin, b)) {
24512                 return 1;  // coincident points, treat as straight and try to remove
24513             }
24514             return geoVecNormalizedDot(a, b, origin);
24515         }
24516
24517
24518         function geoOrthoFilterDotProduct(dotp, epsilon, lowerThreshold, upperThreshold, allowStraightAngles) {
24519             var val = Math.abs(dotp);
24520             if (val < epsilon) {
24521                 return 0;      // already orthogonal
24522             } else if (allowStraightAngles && Math.abs(val-1) < epsilon) {
24523                 return 0;      // straight angle, which is okay in this case
24524             } else if (val < lowerThreshold || val > upperThreshold) {
24525                 return dotp;   // can be adjusted
24526             } else {
24527                 return null;   // ignore vertex
24528             }
24529         }
24530
24531
24532         function geoOrthoCalcScore(points, isClosed, epsilon, threshold) {
24533             var score = 0;
24534             var first = isClosed ? 0 : 1;
24535             var last = isClosed ? points.length : points.length - 1;
24536             var coords = points.map(function(p) { return p.coord; });
24537
24538             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
24539             var upperThreshold = Math.cos(threshold * Math.PI / 180);
24540
24541             for (var i = first; i < last; i++) {
24542                 var a = coords[(i - 1 + coords.length) % coords.length];
24543                 var origin = coords[i];
24544                 var b = coords[(i + 1) % coords.length];
24545
24546                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold);
24547                 if (dotp === null) continue;    // ignore vertex
24548                 score = score + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
24549             }
24550
24551             return score;
24552         }
24553
24554         // returns the maximum angle less than `lessThan` between the actual corner and a 0° or 90° corner
24555         function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
24556             var max = -Infinity;
24557
24558             var first = isClosed ? 0 : 1;
24559             var last = isClosed ? coords.length : coords.length - 1;
24560
24561             for (var i = first; i < last; i++) {
24562                 var a = coords[(i - 1 + coords.length) % coords.length];
24563                 var origin = coords[i];
24564                 var b = coords[(i + 1) % coords.length];
24565                 var normalizedDotP = geoOrthoNormalizedDotProduct(a, b, origin);
24566
24567                 var angle = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
24568
24569                 if (angle > 45) angle = 90 - angle;
24570
24571                 if (angle >= lessThan) continue;
24572
24573                 if (angle > max) max = angle;
24574             }
24575
24576             if (max === -Infinity) return null;
24577
24578             return max;
24579         }
24580
24581
24582         // similar to geoOrthoCalcScore, but returns quickly if there is something to do
24583         function geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles) {
24584             var score = null;
24585             var first = isClosed ? 0 : 1;
24586             var last = isClosed ? coords.length : coords.length - 1;
24587
24588             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
24589             var upperThreshold = Math.cos(threshold * Math.PI / 180);
24590
24591             for (var i = first; i < last; i++) {
24592                 var a = coords[(i - 1 + coords.length) % coords.length];
24593                 var origin = coords[i];
24594                 var b = coords[(i + 1) % coords.length];
24595
24596                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold, allowStraightAngles);
24597                 if (dotp === null) continue;        // ignore vertex
24598                 if (Math.abs(dotp) > 0) return 1;   // something to do
24599                 score = 0;                          // already square
24600             }
24601
24602             return score;
24603         }
24604
24605         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"]];
24606
24607         var wikibooks$1 = /*#__PURE__*/Object.freeze({
24608                 'default': wikibooks
24609         });
24610
24611         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"]];
24612
24613         var wikinews$1 = /*#__PURE__*/Object.freeze({
24614                 'default': wikinews
24615         });
24616
24617         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"]];
24618
24619         var wikiquote$1 = /*#__PURE__*/Object.freeze({
24620                 'default': wikiquote
24621         });
24622
24623         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"]];
24624
24625         var wikiversity$1 = /*#__PURE__*/Object.freeze({
24626                 'default': wikiversity
24627         });
24628
24629         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"]];
24630
24631         var wikivoyage$1 = /*#__PURE__*/Object.freeze({
24632                 'default': wikivoyage
24633         });
24634
24635         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"]];
24636
24637         var wiktionary$1 = /*#__PURE__*/Object.freeze({
24638                 'default': wiktionary
24639         });
24640
24641         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"]];
24642
24643         var wikipedia$1 = /*#__PURE__*/Object.freeze({
24644                 'default': wikipedia
24645         });
24646
24647         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"]];
24648
24649         var wikisource$1 = /*#__PURE__*/Object.freeze({
24650                 'default': wikisource
24651         });
24652
24653         getCjsExportFromNamespace(wikibooks$1);
24654
24655         getCjsExportFromNamespace(wikinews$1);
24656
24657         getCjsExportFromNamespace(wikiquote$1);
24658
24659         getCjsExportFromNamespace(wikiversity$1);
24660
24661         getCjsExportFromNamespace(wikivoyage$1);
24662
24663         getCjsExportFromNamespace(wiktionary$1);
24664
24665         var require$$6 = getCjsExportFromNamespace(wikipedia$1);
24666
24667         getCjsExportFromNamespace(wikisource$1);
24668
24669         var wikipedia$2 = require$$6;
24670
24671         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"]]}];
24672
24673         var dataDeprecated = [{old:{aerialway:"canopy"},replace:{aerialway:"zip_line"}},{old:{aeroway:"aerobridge"},replace:{aeroway:"jet_bridge"}},{old:{access:"public"},replace:{access:"yes"}},{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:"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:"social_club"},replace:{club:"*"}},{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:"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:"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:{color:"*"},replace:{colour:"$1"}},{old:{craft:"glass"},replace:{craft:"glaziery"}},{old:{craft:"catering"},replace:{craft:"caterer"}},{old:{craft:"sculpter"},replace:{craft:"sculptor"}},{old:{crossing:"island"},replace:{"crossing:island":"yes"}},{old:{crossing:"zebra"},replace:{crossing:"marked"}},{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:{drinkable:"*"},replace:{drinking_water:"$1"}},{old:{dropped_kerb:"*"},replace:{kerb:"lowered"}},{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:{"generator:source":"photovoltaic"},replace:{"generator:source":"solar","generator:method":"photovoltaic"}},{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:"footway",foot:"no"},replace:{highway:"path",foot:"no"}},{old:{highway:"ford"},replace:{ford:"*"}},{old:{highway:"no"}},{old:{highway:"platform"},replace:{bus:"yes",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:"club"},replace:{club:"*"}},{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:"social_club"},replace:{club:"*"}},{old:{leisure:"video_arcade"},replace:{leisure:"amusement_arcade"}},{old:{leisure:"recreation_ground"},replace:{landuse:"recreation_ground"}},{old:{man_made:"cut_line"},replace:{man_made:"cutline"}},{old:{man_made:"jetty"},replace:{highway:"footway",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:"wastewater_tank"},replace:{man_made:"storage_tank",content:"wastewater"}},{old:{man_made:"water_tank"},replace:{man_made:"storage_tank",content:"water"}},{old:{man_made:"well"},replace:{man_made:"water_well"}},{old:{man_made:"winery"},replace:{craft:"winery"}},{old:{memorial:"plate"},replace:{memorial:"plaque"}},{old:{mining_resource:"*"},replace:{resource:"$1"}},{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:"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:{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:"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:{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:{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:"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:{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:{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:{type:"broad_leaved"},replace:{leaf_type:"broadleaved"}},{old:{type:"conifer"},replace:{leaf_type:"needleleaved"}},{old:{type:"deciduous"},replace:{leaf_cycle:"deciduous"}},{old:{unnamed:"*"},replace:{noname:"$1"}},{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:{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"}}];
24674
24675         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};
24676
24677         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:"Cebuano"},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"},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"}};
24678
24679         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",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":"Switserse hoog-Duits",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:"Lae Duits","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:"Sjinees","zh-Hans":"Chinees (Vereenvoudig)","zh-Hant":"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:"الأتسام",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:"الأتسام",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:"каталанская",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:"আত্সাম",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",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:"čiroki",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":"gornjonjemač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 (Velika Britanija)","en-US":"engleski (Sjedinjene Američke 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:"orijski",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)","zh-Hant":"kineski (tradicionalni)",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 simplificat","zh-Hant":"xinès 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":"čínština (zjednodušená)","zh-Hant":"čí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:"Sami Inari",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:"Twrcmeneg",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:"Tamaseit Canolbarth Moroco",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:"Tsieineeg","zh-Hans":"Tsieineeg Symledig","zh-Hant":"Tsieineeg 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",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":"forenklet kinesisk","zh-Hant":"traditionelt kinesisk",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",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":"Chinesisch (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",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":"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 Chinese","zh-Hant":"Traditional 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",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":"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":"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 Chinese","zh-Hant":"Traditional 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",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 Chinese","zh-Hant":"Traditional 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 simpligita","zh-Hant":"ĉina tradicia",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",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:"panyabí",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 simplificado","zh-Hant":"chino 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:"Chakma",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:"Sichuani jii",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:"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:"nkole",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:"walseri",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 hiina","zh-Hant":"traditsiooniline hiina",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:"asua",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",ce:"txetxenera",ceb:"cebuera",cgg:"chigera",ch:"chamorrera",chk:"chuukera",chm:"mariera",cho:"choctaw",chr:"txerokiera",chy:"cheyennera",ckb:"sorania",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:"gaeliko",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:"machamera",jv:"javera",ka:"georgiera",kab:"kabilera",kac:"jingpoera",kaj:"kaiji",kam:"kambera",kbd:"kabardiera",kcg:"kataba",kde:"makondera",kea:"Cabo Verdeko kreolera",kfo:"koroa",kg:"kikongoa",kha:"kashia",khq:"koyra chiiniera",ki:"kikuyuera",kj:"kuanyama",kk:"kazakhera",kkj:"kakoa",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:"luba-katangera",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:"metera",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-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:"romboera",root:"erroa",ru:"errusiera",rup:"aromaniera",rw:"kinyaruanda",rwk:"rwaera",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 sennia",sg:"sango",sh:"serbokroaziera",shi:"tachelhita",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:"siriera",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:"jangbenera",ybb:"yemba",yi:"yiddish",yo:"jorubera",yue:"kantonera",zgh:"amazigera estandarra",zh:"txinera","zh-Hans":"txinera soildua","zh-Hant":"txinera tradizionala",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":"yksinkertaistettu kiina","zh-Hant":"perinteinen kiina",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":"chinois simplifié","zh-Hant":"chinois 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:"bielorruso",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 soraní",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:"casaco",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:"nyanja",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:"turcomán",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:"uzbeco",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 simplificado","zh-Hant":"chinés 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:"અત્સમ",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:"अत्सम",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":"kineski (pojednostavljeni)","zh-Hant":"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:"vietnami",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":"egyszerűsített kínai","zh-Hant":"hagyományos kínai",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-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 (Aksara Sederhana)","zh-Hant":"Tionghoa (Aksara 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",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:"njanja; sísjeva; sjeva",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":"kínverska (einfölduð)","zh-Hant":"kínverska (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 semplificato","zh-Hant":"cinese 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",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 (Prasaja)","zh-Hant":"Tyonghwa (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:"កាតាឡាន",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:"ಅಟ್ಸಮ್",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 kinų","zh-Hant":"tradicinė 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",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ā","zh-Hant":"ķīniešu tradicionālā",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:"അറ്റ്സാം",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:"каталан",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-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 Ringkas","zh-Hant":"Cina Tradisional",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyril",Latn:"Latin",Guru:"Gurmukhi",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:"अट्साम",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":"Chinees (vereenvoudigd)","zh-Hant":"Chinees (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":"forenkla kinesisk","zh-Hant":"tradisjonell kinesisk",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":"chiński uproszczony","zh-Hant":"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:"Chakma",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 simplificado","zh-Hant":"chinês 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 simplificado","zh-Hant":"chinês 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 simplifitgà","zh-Hant":"chinais tradiziunal",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ă simplificată","zh-Hant":"chineză 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:"කැටලන්",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",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 (štandardná marocká)",zh:"čínština","zh-Hans":"čínština (zjednodušená)","zh-Hant":"čínština (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":"poenostavljena kitajščina","zh-Hant":"tradicionalna kitajščina",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 Rasmiga ah","zh-Hant":"Shiinahii 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":"kinezishte e thjeshtuar","zh-Hant":"kinezishte tradicionale",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-songhoy",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:"kirgisiska",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-songhay",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:"ஆட்சம்",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:"అట్సామ్",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:"แอตแซม",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:"Azerice","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:"Kigaca",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:"Interlingua",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:"Shambala",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şelhit",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:"Shona",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","zh-Hant":"Geleneksel Çince",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 Ucraina",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 (Giản thể)","zh-Hant":"Tiếng Trung (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:"阿维斯塔语",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:"繁体"}}};
24680
24681         var dataPhoneFormats = {ag:"+1-268-555-1234",ai:"+1-264-555-1234",as:"+1-684-555-1234",at:"+43 1 123 45 67",bb:"+1-246-555-1234",bj:"+229 20 12 34 56",bm:"+1-441-555-1234",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",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"};
24682
24683         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:"help",text:"shortcuts.browsing.help.title"},{shortcuts:["help.key"],text:"shortcuts.browsing.help.help"},{shortcuts:["shortcuts.toggle.key","?"],text:"shortcuts.browsing.help.keyboard"},{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"},{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"}]},{rows:[{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:["modes.add_feature.key"],text:"shortcuts.editing.drawing.focus_add_feature"},{shortcuts:["1","2","3"],text:"shortcuts.editing.drawing.add_favorite",separator:",",suffix:"…"},{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"}]}]}];
24684
24685         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","nnh","bbj","bkm","bax","bas","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","vmf","ru","es","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"],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","nl","eu","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","zh-Hant","bbc","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","mwr","bgc","mag","mai","hne","dcc","ne","bjj","sat","wtm","rkt","ks","kok","gom","swv","gbm","lmn","sd","gon","kfy","doi","kru","sck","wbq","xnr","tcy","wbr","khn","brx","noe","bhb","mni","hoc","raj","mtr","unr","bhi","hoj","kha","kfr","grt","unx","bfy","srx","saz","ccp","sd-Deva","njo","bfq","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","bal","ar","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-Latn","rif","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:["fr","bm","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","ibb","efi","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","taj","new","jml","en","dty","awa","thl","bap","tdg","thr","mgp","lif","thq","mrd","gvr","bfy","xsr","rjs","hi","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","pam","bhk","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","kxp","gjk","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","lez","kv","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"],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","lwl","lcp"],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","ka","hy","lzz","sr-Latn","sq","el","ab","tru","uz","ky-Latn","kk"],tt:["en","es"],tv:["tvl","en"],tw:["zh-Hant","trv"],tz:["sw","en","suk","nym","kde","ksb","bez","mas","mgy","asa","lag","rof","jmc","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","vi","it","ko","ru","nv","yi","pdc","haw","frc","chr","esu","dak","cho","lkt","ik","mus"],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"]};
24686
24687         var type$1 = "FeatureCollection";
24688         var features = [{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-65.2,18.7],[-65,16.3],[-63.7,19.2],[-65.2,18.7]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-63,-50.5],[-55,-51],[-60,-54],[-63,-50.5]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[180,55],[170,53],[180,49],[180,55]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[143,22],[147,22],[147,12],[143,12],[143,22]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}}];
24689         var dataImperial = {
24690         type: type$1,
24691         features: features
24692         };
24693
24694         var type$2 = "FeatureCollection";
24695         var features$1 = [{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-63,-50.5],[-60,-54],[-55,-51],[-63,-50.5]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[180,55],[170,53],[180,49],[180,55]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[143,22],[143,12],[147,12],[147,22],[143,22]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-68.44482421875,17.623081791311755],[-64.34692382812499,17.38209494787749],[-63.951416015625,19.03096327846469],[-67.950439453125,18.885497977462876],[-68.44482421875,17.623081791311755]]]}}];
24696         var dataMPH = {
24697         type: type$2,
24698         features: features$1
24699         };
24700
24701         var type$3 = "FeatureCollection";
24702         var features$2 = [{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[113.573,22.186],[114,22.5],[114.05534,22.503],[114.0595,22.51422],[114.07345,22.51934],[114.0786,22.53012],[114.08512,22.53228],[114.09034,22.53717],[114.09611,22.53486],[114.10602,22.53472],[114.1115,22.52929],[114.11522,22.5308],[114.11649,22.53418],[114.11979,22.53511],[114.1244,22.5393],[114.12729,22.53947],[114.13018,22.54132],[114.13807,22.5432],[114.14429,22.54176],[114.14441,22.54114],[114.14846,22.54179],[114.14855,22.54397],[114.15042,22.54593],[114.14964,22.54954],[114.15166,22.55168],[114.15192,22.55438],[114.15642,22.55495],[114.15841,22.55909],[114.16032,22.56153],[114.16162,22.56187],[114.1634,22.55931],[114.16553,22.5593],[114.16733,22.56119],[114.16934,22.56093],[114.17061,22.5597],[114.17702,22.56],[114.17798,22.55546],[114.18401,22.5552],[114.18673,22.55468],[114.1878,22.55545],[114.18979,22.55446],[114.1955,22.55564],[114.19674,22.55691],[114.20005,22.55717],[114.20376,22.55623],[114.20884,22.55672],[114.22438,22.55055],[114.2264,22.5476],[114.22545,22.54528],[114.22661,22.54339],[114.32,22.576],[114.45,22.43],[114.45,22.14],[113.9,22.14],[113.75,22.22],[113.553,22.095],[113.54678,22.1207],[113.5456,22.1207],[113.54076,22.12373],[113.54016,22.13618],[113.54701,22.13651],[113.5475,22.14583],[113.52456,22.17978],[113.53623,22.20191],[113.53299,22.21232],[113.53497,22.21351],[113.53735,22.21377],[113.54156,22.21315],[113.54385,22.21709],[113.55849,22.21565],[113.573,22.186]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-75,18],[-80,20.5],[-83,19],[-77,16],[-75,18]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-64.33594,32.86113],[-79.39819,27.21067],[-80.63965,23.71998],[-73.39966,20.40642],[-65.1709,19.20743],[-65.09399,16.23577],[-59.13391,16.80454],[-62.64404,15.16228],[-59.43054,14.85985],[-62.83081,13.64599],[-61.80359,10.73752],[-62.08649,10.04729],[-61.06201,9.85522],[-59.81369,8.31274],[-59.8027,8.27469],[-59.83498,8.22712],[-59.94141,8.21149],[-59.99771,8.15576],[-59.97986,8.13265],[-59.99771,8.12041],[-60.00183,8.07147],[-60.05127,8.02524],[-60.09933,8.03747],[-60.12268,8.02388],[-60.14053,7.98988],[-60.36163,7.83345],[-60.53467,7.81713],[-60.5896,7.6375],[-60.72144,7.54493],[-60.5896,7.31888],[-60.63904,7.24532],[-60.54703,7.12542],[-60.46875,7.20309],[-60.37262,7.18401],[-60.29984,7.1445],[-60.2916,7.06819],[-60.39871,6.95097],[-60.66513,6.83235],[-60.71869,6.75053],[-60.91232,6.81735],[-60.94254,6.72053],[-61.14441,6.72326],[-61.23093,6.5773],[-61.1554,6.45314],[-61.14441,6.20199],[-61.39709,5.95619],[-60.71045,5.20036],[-60.21606,5.23319],[-59.99634,5.06906],[-60.13916,4.51071],[-59.69971,4.40118],[-59.5459,3.93002],[-59.87549,3.56825],[-59.7876,3.37086],[-60.01831,2.83332],[-59.90845,2.38335],[-59.69971,2.2626],[-59.77661,1.87833],[-59.65302,1.85087],[-59.69147,1.75754],[-59.61456,1.71361],[-59.55139,1.73283],[-59.36188,1.49123],[-59.26575,1.39238],[-58.92242,1.30726],[-58.83728,1.17271],[-58.71918,1.23037],[-58.71094,1.29902],[-58.49121,1.26058],[-58.461,1.37591],[-58.50494,1.38689],[-58.51044,1.46102],[-58.38135,1.4775],[-58.32642,1.57359],[-58.00507,1.49946],[-57.99133,1.65321],[-57.79907,1.69165],[-57.70844,1.71087],[-57.54364,1.68341],[-57.41455,1.94421],[-57.10693,1.97715],[-56.8103,1.85636],[-56.48071,1.92225],[-55.90942,1.81244],[-55.90942,2.04302],[-56.14014,2.26534],[-55.94788,2.53701],[-55.70892,2.39981],[-55.37933,2.43274],[-55.19257,2.53976],[-54.98108,2.57268],[-54.88495,2.43548],[-54.71191,2.46293],[-54.69543,2.34767],[-54.58832,2.32846],[-54.43451,2.43548],[-54.20654,2.76748],[-54.17358,3.12955],[-53.96484,3.57921],[-54.33838,4.00674],[-54.44412,4.52577],[-54.46884,4.91036],[-54.36653,5.13061],[-54.27727,5.26191],[-54.19968,5.3084],[-54.01222,5.54457],[-54.0239,5.64605],[-53.86322,5.94936],[-64.33594,32.86113]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-14.5,-6],[11.79657,-17.27197],[12.03415,-17.14866],[12.38159,-17.22213],[12.58484,-17.22476],[13.01193,-16.97405],[13.24951,-17.00098],[13.38135,-16.98522],[13.93341,-17.38734],[18.42476,-17.38996],[18.47763,-17.46857],[18.62663,-17.64599],[18.79211,-17.76177],[18.92944,-17.82061],[19.33044,-17.84806],[19.66278,-17.8644],[19.74792,-17.90557],[19.85161,-17.87486],[20.10361,-17.90296],[20.18394,-17.88401],[20.34737,-17.88466],[20.44693,-17.91733],[20.51697,-17.96698],[20.83008,-18.03032],[20.95711,-17.97285],[21.16997,-17.93497],[21.42677,-18.0264],[23.45032,-17.63879],[22.00012,-16.38866],[21.99944,-13.00523],[24.03809,-12.99118],[24.03809,-10.91962],[24.43359,-11.09217],[24.45557,-11.48002],[25.37842,-11.19996],[25.42236,-11.60919],[26.96045,-11.97484],[27.18018,-11.60919],[28.125,-12.42048],[29.11377,-13.36824],[29.1687,-13.43771],[29.55872,-13.19716],[29.68506,-13.2239],[29.62463,-13.41099],[29.80591,-13.44305],[29.81415,-12.14809],[29.31152,-12.55456],[28.41064,-11.78133],[28.63037,-10.70379],[28.65234,-9.73071],[28.37219,-9.24309],[28.89748,-8.47916],[30.78644,-8.26857],[29.39941,-6.05316],[29.4873,-4.45595],[29.75922,-4.46759],[29.81415,-4.36421],[29.88007,-4.36832],[30.04074,-4.26699],[30.07919,-4.1629],[30.18356,-4.08311],[30.1918,-4.05126],[30.21566,-4.04595],[30.22923,-4.01136],[30.21326,-3.99612],[30.25978,-3.88755],[30.29274,-3.86288],[30.34424,-3.77245],[30.39848,-3.79095],[30.40878,-3.76765],[30.39548,-3.7304],[30.39054,-3.72821],[30.3896,-3.71918],[30.39093,-3.7101],[30.39514,-3.70444],[30.42028,-3.64963],[30.46886,-3.53501],[30.67108,-3.41335],[30.63297,-3.34892],[30.84206,-3.25535],[30.84549,-3.16108],[30.83485,-3.09698],[30.7933,-3.06235],[30.82111,-3.02258],[30.84515,-2.9739],[30.74764,-2.99618],[30.7037,-2.97013],[30.66422,-2.98967],[30.57632,-2.90738],[30.49393,-2.94441],[30.41016,-2.87172],[30.52002,-2.39432],[30.77545,-2.38883],[30.8606,-2.31199],[30.84961,-2.19398],[30.89081,-2.07322],[30.81116,-1.96068],[30.83862,-1.6587],[30.73425,-1.4418],[30.56259,-1.33884],[30.4541,-1.05737],[30.35797,-1.06287],[30.34149,-1.13152],[30.16571,-1.34296],[29.91852,-1.48024],[29.83887,-1.31824],[29.58344,-1.39238],[29.729,0.05493],[29.96796,0.5136],[29.9707,0.8569],[30.22339,0.92281],[30.24536,1.15349],[30.47745,1.20772],[31.30966,2.15693],[31.20255,2.22211],[31.20255,2.29278],[31.16409,2.27906],[31.13937,2.28318],[31.13113,2.26534],[31.07826,2.30033],[31.0714,2.34767],[31.00479,2.4005],[30.97183,2.40461],[30.94711,2.38746],[30.94849,2.36276],[30.9375,2.33532],[30.88531,2.34012],[30.83038,2.42176],[30.74112,2.43274],[30.76035,2.5864],[30.90179,2.88132],[30.76447,3.04178],[30.93613,3.40239],[30.94059,3.50588],[30.85236,3.48601],[30.90866,3.5936],[30.95055,3.63918],[30.94677,3.65391],[30.9866,3.70187],[31.00582,3.70701],[31.02058,3.69708],[31.16547,3.7954],[31.28838,3.79643],[31.52699,3.66282],[31.7038,3.72449],[31.82671,3.82794],[31.96198,3.65596],[31.95854,3.57099],[32.04987,3.59155],[32.07733,3.57099],[32.0842,3.53672],[32.20093,3.50657],[32.21672,3.56448],[32.19578,3.59977],[32.41516,3.74504],[32.72055,3.76782],[32.89307,3.81219],[33.02782,3.89371],[33.18146,3.7793],[33.51173,3.75258],[33.98758,4.23309],[34.05762,4.28342],[34.38721,4.61065],[35.94452,4.62023],[35.95688,4.53467],[36.04134,4.44568],[36.89621,4.4491],[38.14728,3.62992],[38.55927,3.62033],[38.92181,3.51068],[39.56039,3.43392],[39.87076,3.87522],[40.76752,4.28753],[41.16371,3.94372],[41.89774,3.97797],[41.31271,3.14463],[40.98896,2.82869],[40.99548,-0.84042],[41.7,-1.8],[41.7,-49],[-27,-60],[-65.7,-52.5],[-14.5,-6]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[31.33301,35.47856],[33.0249,33.75175],[35.44189,36.02245],[31.33301,35.47856]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[14,36.5],[15,36],[14,35],[14,36.5]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[0,62],[2.5,51.3],[-2,50],[-1.9,49],[-20,53],[0,62]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[180,-35],[161,-19],[167,-12],[180,-22],[180,4],[170,3.7],[127,5.7],[118,2.7],[119.5,5.4],[117.2,7.5],[102.6,8],[102.9158,11.74099],[102.76268,12.07357],[102.70226,12.17158],[102.74139,12.46474],[102.53128,12.68857],[102.49557,12.9256],[102.49763,13.0064],[102.4597,13.08199],[102.43412,13.09026],[102.39155,13.16407],[102.35481,13.29341],[102.35893,13.30945],[102.34503,13.34837],[102.35928,13.39797],[102.3567,13.48095],[102.36168,13.50582],[102.33559,13.53787],[102.33971,13.56023],[102.35498,13.5649],[102.36511,13.5785],[102.40047,13.5679],[102.42537,13.56891],[102.44614,13.56123],[102.48047,13.57091],[102.53849,13.56757],[102.5699,13.58526],[102.57806,13.60486],[102.62501,13.60845],[102.62132,13.61295],[102.60767,13.61562],[102.57231,13.63331],[102.56922,13.64082],[102.54879,13.658],[102.56252,13.68552],[102.5972,13.70803],[102.67084,13.74472],[102.68818,13.75172],[102.7014,13.7684],[102.73161,13.77082],[102.76543,13.85541],[102.78397,13.93207],[102.80388,13.94406],[102.81607,13.96639],[102.90705,14.02119],[102.89726,14.0535],[102.90095,14.0838],[102.92421,14.10744],[102.92378,14.12838],[102.94147,14.15035],[102.92953,14.17952],[103.17535,14.33774],[103.19939,14.32992],[103.68553,14.44],[103.94508,14.34157],[104.05756,14.34589],[104.06636,14.3419],[104.26025,14.37749],[104.50058,14.36984],[104.57817,14.36019],[104.6422,14.42387],[104.66632,14.40234],[104.68357,14.39877],[104.71138,14.43169],[104.72305,14.42188],[104.71687,14.40043],[104.75344,14.40459],[104.80408,14.43867],[104.83429,14.41573],[104.99239,14.3838],[105.05402,14.19783],[105.47905,14.49186],[105.60883,15.0005],[105.46703,15.13005],[105.48866,15.20237],[105.59269,15.2716],[105.58617,15.32823],[105.50308,15.31912],[105.46703,15.33948],[105.49175,15.37921],[105.59372,15.42869],[105.59372,15.50927],[105.60986,15.54871],[105.62616,15.56492],[105.62702,15.59129],[105.63518,15.62742],[105.63612,15.66056],[105.5975,15.72088],[105.49965,15.76681],[105.46291,15.74517],[105.43819,15.75459],[105.40489,15.79424],[105.34241,15.92039],[105.37811,15.98344],[105.39167,15.99136],[105.41931,15.98608],[105.42652,15.99764],[105.41468,16.01661],[105.21263,16.05076],[105.04955,16.10552],[105.01316,16.24401],[104.88235,16.37812],[104.8391,16.45782],[104.77936,16.49041],[104.73919,16.53287],[104.74228,16.62205],[104.76391,16.70953],[104.73953,16.80323],[104.76425,16.85088],[104.73782,16.90968],[104.744,17.0128],[104.81266,17.21853],[104.79841,17.39274],[104.70348,17.52833],[104.46384,17.65515],[104.34368,17.83564],[104.27776,17.8559],[104.22661,17.98069],[104.1116,18.10735],[104.06525,18.21174],[103.97392,18.33823],[103.9286,18.33237],[103.88809,18.29456],[103.85582,18.28673],[103.83659,18.32715],[103.79128,18.3467],[103.70201,18.34214],[103.60931,18.40405],[103.57292,18.40437],[103.51593,18.42978],[103.45963,18.42587],[103.41568,18.44802],[103.30479,18.43206],[103.24265,18.37082],[103.24333,18.34133],[103.29123,18.32357],[103.28899,18.29521],[103.23595,18.28299],[103.16608,18.25511],[103.02429,17.98135],[102.6535,17.83237],[102.40631,17.99963],[102.10968,18.22413],[101.548,17.81538],[101.30493,17.64991],[101.14563,17.46595],[100.95886,17.61654],[101.01757,17.88858],[101.18752,18.05121],[101.16863,18.10409],[101.18134,18.33595],[101.08727,18.38287],[101.05499,18.43988],[101.23215,18.73015],[101.35265,19.04524],[101.25927,19.12733],[101.2373,19.32637],[101.25824,19.58438],[101.11954,19.56836],[101.08898,19.58777],[101.08624,19.59715],[101.03165,19.6185],[100.89844,19.62125],[100.77827,19.49249],[100.63751,19.56432],[100.58258,19.49313],[100.47478,19.5944],[100.42929,19.67152],[100.43341,19.7024],[100.4147,19.7255],[100.40525,19.7646],[100.43907,19.80345],[100.45555,19.84843],[100.50636,19.87264],[100.51709,19.93027],[100.58653,20.1599],[100.56576,20.1757],[100.54945,20.17473],[100.52731,20.14379],[100.51065,20.14895],[100.48697,20.17956],[100.46774,20.196],[100.45246,20.20147],[100.45521,20.22129],[100.44783,20.23546],[100.41607,20.25286],[100.40594,20.28184],[100.38397,20.31082],[100.37556,20.35187],[100.36165,20.35638],[100.35736,20.37408],[100.33195,20.39902],[100.27805,20.40224],[100.25917,20.39677],[100.2475,20.37263],[100.22535,20.35509],[100.22346,20.31839],[100.16579,20.29988],[100.17162,20.24545],[100.10845,20.25221],[100.09266,20.2696],[100.09798,20.31485],[100.07961,20.3678],[99.9567,20.46417],[99.91636,20.44925],[99.90765,20.44977],[99.89121,20.44511],[99.87276,20.44406],[99.86212,20.44326],[99.80186,20.33948],[99.46472,20.3884],[99.56085,20.20035],[99.43691,20.08882],[99.27727,20.11623],[99.06921,20.1101],[98.97789,19.74538],[98.24387,19.68656],[97.85934,19.57014],[97.76733,18.57336],[97.39655,18.47179],[97.62451,18.30238],[97.73849,17.97743],[97.66502,17.87943],[97.90947,17.56745],[98.52951,16.82557],[98.51303,16.69276],[98.69293,16.26873],[98.87421,16.43609],[98.93394,16.3353],[98.84743,16.13356],[98.74512,16.12037],[98.58307,16.07287],[98.5762,15.79754],[98.54736,15.37557],[98.17383,15.15167],[98.3606,14.63674],[99.08295,13.89208],[99.16534,13.72204],[99.18182,13.00723],[99.39331,12.56797],[99.64153,11.78973],[99.32156,11.30266],[98.77859,10.67849],[98.80597,10.47642],[98.76657,10.40459],[98.74924,10.34194],[96.85547,6.40265],[92.42523,20.54794],[92.2728,20.96272],[92.187,21.16],[92.26,21.36],[92.27,21.4328],[92.62,21.43],[92.6,22],[93.22,22.25],[93.4,23.7],[93.34,23.95],[94.155,23.847],[94.17,23.92],[94.25171,24.07405],[94.28,24.23],[94.30175,24.2371],[94.3256,24.2731],[94.6,24.7],[94.78,25.47],[95.2,26],[95.1,26.6],[97.3,27.9],[96.14,29.38],[95.4,29.1],[94.8,29.2],[92.5,27.8],[91.64,27.76],[91.4,28],[89.58,28.18],[88.9,27.32],[88.74,27.47],[88.9,27.86],[88.7,28.1],[88.1,27.87],[85.93,27.942],[81.6,30.5],[81.2,30],[78.73,31.5],[78.77,31.99],[78.4,32.5],[79.3,32.5],[79,34.3],[78.3,34.6],[78,35.5],[76.1,35.8],[76,36.55],[75.15,37],[72.5,36.9],[71.1,36.1],[71.65,35.44],[71.45,35],[70.985,34.54],[71.18,34.36],[71.092,34.118],[70.88,33.97],[70.5,33.94],[69.908,34.04],[69.869,33.96],[70,33.75],[70.13,33.73],[70.34,33.34],[70.013,33.14],[69.57,33.09],[69.24,32.45],[69.3,31.9],[68.1,31.6],[66.393,30.934],[66.2,29.8],[62.5,29.4],[60.87,29.86],[61.53,29.0165],[61.66,28.77],[61.96,28.54],[62.43,28.42],[62.6,28.25],[62.795,28.28],[62.86,27.25],[63.24,27.25],[63.327,27.13],[63.25,27.1],[63.25,26.84],[63.18,26.83],[63.18,26.65],[62.3,26.5],[62.2,26.28],[61.85,26.22],[61.84,25.75],[61.68,25.67],[56.5,-21],[180,-65],[180,-35]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[138.7,46.7],[145.5,44.5],[145.2,43.7],[146,43.3],[142,18],[122,24.3],[138.7,46.7]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-180,7],[-148,7],[-151,-12],[-171.5,-10.75],[-171,-16],[-152,-19],[-180,-55],[-180,7]]]}}];
24703         var dataDriveLeft = {
24704         type: type$3,
24705         features: features$2
24706         };
24707
24708         var en = {icons:{download:"download",information:"info",remove:"remove",undo:"undo",zoom_to:"zoom to",copy:"copy",open_wikidata:"open on wikidata.org",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."},orthogonalize:{title:"Square",description:{vertex:"Square this corner.",line:"Square the corners of this line.",area:"Square the corners of this area."},key:"Q",annotation:{vertex:"Squared a single corner.",line:"Squared the corners of a line.",area:"Squared the corners of an area."},end_vertex:"This can't be squared because it is an end node.",square_enough:"This can't be made more square than it already is.",not_squarish:"This can't be made square because it is not squarish.",too_large:"This can't be made square because not enough of it is currently visible.",connected_to_hidden:"This can't be made square because it is connected to a hidden feature.",not_downloaded:"This can't be made square because parts of it 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:"Make this line go in the opposite direction.",key:"V",annotation:"Reversed a line."},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}"},status:{error:"Unable to connect to API.",offline:"The API is offline. Please try editing later.",readonly:"The API is read-only. You will need to wait to save your changes.",rateLimit:"The API is limiting anonymous connections.  You can fix this by logging in."},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_visible:"No results in visible map area",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_source_faq:"Imagery Info / Report a 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:"/"},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"}},fill_area:"Fill Areas",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."},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"}}},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}.",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:{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"},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"},hidden_issues:{none:"Detected issues will appear here",elsewhere:"Issues elsewhere: {count}",other_features:"Issues with other features: {count}",other_features_elsewhere:"Issues elsewhere with other features: {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, coverings, or entrances."},"building-railway":{reference:"Railways crossing buildings should use bridges or tunnels."},"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:{title:"\"Fix Me\" Requests",message:"{feature} has a \"Fix Me\" request",tip:"Find features with \"fixme\" tags",reference:"A \"fixme\" tag indicates that a mapper has requested help with a feature."},generic_name:{title:"Suspicious Names",message:"{feature} has the suspicious name \"{name}\"",tip:"Find features with generic or suspicious names",reference:"Names should be the actual, on-the-ground names of features."},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."}},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\"."},website:{message:"{feature} has an invalid website.",message_multi:"{feature} has multiple invalid websites.",reference:"Websites should start with \"http\" or \"https\"."}},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",reference:"All features of the same brand should be tagged the same way."}},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"}},tag_suggests_area:{title:"Lines Tagged as Areas",message:"{feature} should be a closed area based on the tag \"{tag}\"",tip:"Find features that are tagged as lines and should possibly be tagged as areas",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."}}},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."}},fix:{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"},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:{title:"Remove the name",annotation:"Removed a generic 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"},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_bridge_or_tunnel:{title:"Use a bridge or tunnel"},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"},use_tunnel:{title:"Use a tunnel"}}},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:"Show background options",background_switch:"Switch back to last background",map_data:"Show map data options",fullscreen:"Enter full screen mode",sidebar:"Toggle sidebar",wireframe:"Toggle wireframe mode",osm_data:"Toggle OpenStreetMap data",minimap:"Toggle minimap"},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 feature selected",edit_menu:"Toggle edit menu",zoom_to:"Zoom to selected feature"},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",focus_add_feature:"Focus the feature search field",add_point:"'Add point' mode",add_line:"'Add line' mode",add_area:"'Add area' mode",add_note:"'Add note' mode",add_favorite:"Add a favorite feature",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 a line",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_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",terms:"",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!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","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!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",terms:""},aerialway:{label:"Type",terms:""},"aerialway/access":{label:"Access",terms:"",options:{entry:"Entry",exit:"Exit",both:"Both"}},"aerialway/bubble":{label:"Bubble",terms:""},"aerialway/capacity":{label:"Capacity (per hour)",terms:"",placeholder:"500, 2500, 5000..."},"aerialway/duration":{label:"Duration (minutes)",terms:"",placeholder:"1, 2, 3..."},"aerialway/heating":{label:"Heated",terms:""},"aerialway/occupancy":{label:"Occupancy",terms:"",placeholder:"2, 4, 8..."},"aerialway/summer/access":{label:"Access (summer)",terms:"",options:{entry:"Entry",exit:"Exit",both:"Both"}},aeroway:{label:"Type",terms:""},agrarian:{label:"Products",terms:""},air_conditioning:{label:"Air Conditioning",terms:"cooling system,refrigeration"},amenity:{label:"Type",terms:""},animal_boarding:{label:"For Animals",terms:""},animal_breeding:{label:"For Animals",terms:""},animal_shelter:{label:"For Animals",terms:""},architect:{label:"Architect",terms:"building designer"},"area/highway":{label:"Type",terms:""},artist:{label:"Artist",terms:""},artwork_type:{label:"Type",terms:""},atm:{label:"ATM",terms:""},attraction:{label:"Type",terms:""},backrest:{label:"Backrest",terms:""},bar:{label:"Bar",terms:""},barrier:{label:"Type",terms:""},basin:{label:"Type",terms:""},"bath/open_air":{label:"Open Air",terms:""},"bath/sand_bath":{label:"Sand Bath",terms:""},"bath/type":{label:"Specialty",terms:"",options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}},beauty:{label:"Beauty Specialty",terms:""},bench:{label:"Bench",terms:"seating"},bicycle_parking:{label:"Type",terms:""},bin:{label:"Waste Bin",terms:"garbage can,trash can"},blood_components:{label:"Blood Components",terms:"",options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}},board_type:{label:"Type",terms:""},booth:{label:"Booth",terms:""},boules:{label:"Type",terms:""},boundary:{label:"Type",terms:""},brand:{label:"Brand",terms:""},brewery:{label:"Draft Beers",terms:"on tap"},bridge:{label:"Type",terms:"",placeholder:"Default"},"bridge/support":{label:"Type",terms:""},building_area:{label:"Building",terms:""},building:{label:"Building",terms:"structure"},"building/levels_building":{label:"Building 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",terms:""},cables:{label:"Cables",terms:"",placeholder:"1, 2, 3..."},"camera/direction":{label:"Direction (Degrees Clockwise)",terms:"",placeholder:"45, 90, 180, 270"},"camera/mount":{label:"Camera Mount",terms:""},"camera/type":{label:"Camera Type",terms:"",options:{fixed:"Fixed",panning:"Panning",dome:"Dome"}},capacity:{label:"Capacity",terms:"",placeholder:"50, 100, 200..."},cash_in:{label:"Cash In",terms:""},castle_type:{label:"Type",terms:""},changing_table:{label:"Diaper Changing Table",terms:""},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",terms:""},clothes:{label:"Clothes",terms:""},club:{label:"Type",terms:""},collection_times:{label:"Collection Times",terms:""},colour:{label:"Color",terms:""},comment:{label:"Changeset Comment",terms:"",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types",terms:""},construction:{label:"Type",terms:""},consulate:{label:"Type",terms:""},"contact/webcam":{label:"Webcam URL",terms:"",placeholder:"http://example.com/"},content:{label:"Content",terms:""},conveying:{label:"Movement Direction",terms:"",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country:{label:"Country",terms:""},couplings:{label:"Couplings",terms:"",placeholder:"1, 2, 3..."},covered:{label:"Covered",terms:""},craft:{label:"Type",terms:""},"crane/type":{label:"Crane Type",terms:"",options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}},crop:{label:"Crops",terms:""},crossing:{label:"Type",terms:""},"crossing/island":{label:"Refuge Island",terms:""},cuisine:{label:"Cuisines",terms:""},currency_multi:{label:"Currency Types",terms:"bills,cash,coins,money"},cutting:{label:"Type",terms:"",placeholder:"Default"},cycle_network:{label:"Network",terms:""},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",terms:""},date:{label:"Date",terms:""},delivery:{label:"Delivery",terms:""},denomination:{label:"Denomination",terms:""},denotation:{label:"Denotation",terms:""},departures_board:{label:"Departures Board",terms:"",options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}},description:{label:"Description",terms:"summary"},design:{label:"Design",terms:""},destination_oneway:{label:"Destinations",terms:""},"destination/ref_oneway":{label:"Destination Road Numbers",terms:""},"destination/symbol_oneway":{label:"Destination Symbols",terms:""},devices:{label:"Devices",terms:"",placeholder:"1, 2, 3..."},diameter:{label:"Diameter",terms:"",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",terms:""},"diplomatic/services":{label:"Services",terms:""},direction_cardinal:{label:"Direction",terms:"",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",terms:"",options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}},direction_vertex:{label:"Direction Affected",terms:"",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},direction:{label:"Direction (Degrees Clockwise)",terms:"",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions",terms:""},display:{label:"Display",terms:""},distance:{label:"Distance",terms:""},dock:{label:"Type",terms:""},dog:{label:"Dogs",terms:"animals,pets",options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},door_type:{label:"Type",terms:""},door:{label:"Door",terms:""},drive_through:{label:"Drive-Through",terms:""},duration:{label:"Duration",terms:"",placeholder:"00:00"},electrified:{label:"Electrification",terms:"",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",terms:"",placeholder:"Default"},embassy:{label:"Type",terms:""},emergency_combo:{label:"Type",terms:""},emergency:{label:"Emergency",terms:""},enforcement:{label:"Type",terms:""},entrance:{label:"Type",terms:""},except:{label:"Exceptions",terms:""},faces:{label:"Faces",terms:""},fax:{label:"Fax",terms:"",placeholder:"+31 42 123 4567"},fee:{label:"Fee",terms:""},fence_type:{label:"Type",terms:""},"fire_hydrant/diameter":{label:"Diameter (mm, in, or letters)",terms:""},"fire_hydrant/pressure":{label:"Pressure (bar)",terms:""},"fire_hydrant/type":{label:"Shape",terms:"",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}},fireplace:{label:"Fireplace",terms:""},fishing:{label:"Fishing",terms:""},fitness_station:{label:"Equipment Type",terms:""},fixme:{label:"Fix Me",terms:"help request"},"flag/type":{label:"Flag Type",terms:""},floating:{label:"Floating",terms:""},flood_prone:{label:"Flood Prone",terms:""},ford:{label:"Type",terms:"",placeholder:"Default"},frequency_electrified:{label:"Operating Frequency",terms:""},frequency:{label:"Operating Frequency",terms:""},from:{label:"From",terms:""},fuel_multi:{label:"Fuel Types",terms:""},fuel:{label:"Fuel",terms:""},gauge:{label:"Gauge",terms:""},gender:{label:"Gender",terms:"access,female,male,unisex",placeholder:"Unknown",options:{male:"Male",female:"Female",unisex:"Unisex"}},"generator/method":{label:"Method",terms:""},"generator/output/electricity":{label:"Power Output",terms:"",placeholder:"50 MW, 100 MW, 200 MW..."},"generator/source":{label:"Source",terms:""},"generator/type":{label:"Type",terms:""},government:{label:"Type",terms:""},grape_variety:{label:"Grape Varieties",terms:""},guest_house:{label:"Type",terms:""},handicap:{label:"Handicap",terms:"",placeholder:"1-18"},handrail:{label:"Handrail",terms:""},hashtags:{label:"Suggested Hashtags",terms:"",placeholder:"#example"},healthcare:{label:"Type",terms:""},"healthcare/speciality":{label:"Specialties",terms:""},height_building:{label:"Building Height (Meters)",terms:""},height:{label:"Height (Meters)",terms:""},highspeed:{label:"High-Speed",terms:""},highway:{label:"Type",terms:""},historic:{label:"Type",terms:""},"historic/civilization":{label:"Historic Civilization",terms:""},"historic/wreck/date_sunk":{label:"Date Sunk",terms:""},"historic/wreck/visible_at_high_tide":{label:"Visible At High Tide",terms:""},"historic/wreck/visible_at_low_tide":{label:"Visible At Low Tide",terms:""},hoops:{label:"Hoops",terms:"",placeholder:"1, 2, 4..."},horse_dressage:{label:"Dressage Riding",terms:"",options:{"undefined":"No",equestrian:"Yes"}},horse_riding:{label:"Horseback Riding",terms:"",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",terms:"",options:{"undefined":"No",stables:"Yes"}},iata:{label:"IATA Airport Code",terms:""},icao:{label:"ICAO Airport Code",terms:""},incline_steps:{label:"Incline",terms:"",options:{up:"Up",down:"Down"}},incline:{label:"Incline",terms:""},indoor_type:{label:"Type",terms:""},indoor:{label:"Indoor",terms:""},industrial:{label:"Type",terms:""},information:{label:"Type",terms:""},inscription:{label:"Inscription",terms:""},intermittent_yes:{label:"Intermittent",terms:""},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",terms:""},"kerb/height":{label:"Height",terms:""},label:{label:"Label",terms:""},lamp_type:{label:"Type",terms:""},landuse:{label:"Type",terms:""},lanes:{label:"Lanes",terms:"",placeholder:"1, 2, 3..."},language_multi:{label:"Languages",terms:""},layer:{label:"Layer",terms:"",placeholder:"0"},leaf_cycle_singular:{label:"Leaf Cycle",terms:"",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}},leaf_cycle:{label:"Leaf Cycle",terms:"",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}},leaf_type_singular:{label:"Leaf Type",terms:"",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}},leaf_type:{label:"Leaf Type",terms:"",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}},leisure:{label:"Type",terms:""},length:{label:"Length (Meters)",terms:""},level:{label:"Level",terms:"building floor,deck,storey,story"},levels:{label:"Levels",terms:"",placeholder:"2, 4, 6..."},liaison:{label:"Type",terms:""},line_attachment:{label:"Line Attachment",terms:""},lit:{label:"Lit",terms:"lamp,lighting"},location_pool:{label:"Location",terms:"",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location",terms:""},lock:{label:"Lock",terms:""},man_made:{label:"Type",terms:""},manhole:{label:"Type",terms:""},manufacturer:{label:"Manufacturer",terms:""},map_size:{label:"Coverage",terms:""},map_type:{label:"Type",terms:""},material:{label:"Material",terms:""},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",terms:""},microbrewery:{label:"Microbrewery",terms:"brewpub,craft beer"},minspeed:{label:"Minimum Speed Limit",terms:"",placeholder:"20, 30, 40..."},monitoring_multi:{label:"Monitoring",terms:""},"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"}},name:{label:"Name",terms:"label,title",placeholder:"Common name (if any)"},natural:{label:"Natural",terms:""},network_bicycle:{label:"Network Type",terms:"",placeholder:"Local, Regional, National, International",options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}},network_foot:{label:"Network Type",terms:"",placeholder:"Local, Regional, National, International",options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}},network_horse:{label:"Network Type",terms:"",placeholder:"Local, Regional, National, International",options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}},network_road:{label:"Network",terms:""},network:{label:"Network",terms:""},"not/name":{label:"Incorrect Names",terms:"common mistake names,wrong names"},note:{label:"Note",terms:"comment"},office:{label:"Type",terms:""},oneway_yes:{label:"One Way",terms:"",options:{"undefined":"Assumed to be Yes",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},oneway:{label:"One Way",terms:"",options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},"oneway/bicycle":{label:"One Way (Bicycles)",terms:""},opening_date:{label:"Expected Opening Date",terms:""},opening_hours:{label:"Hours",terms:"",placeholder:"Unknown"},operator:{label:"Operator",terms:""},"operator/type":{label:"Operator Type",terms:""},outdoor_seating:{label:"Outdoor Seating",terms:""},par:{label:"Par",terms:"",placeholder:"3, 4, 5..."},park_ride:{label:"Park and Ride",terms:""},parking:{label:"Type",terms:"",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",terms:"",placeholder:"1, 2, 3..."},phone:{label:"Telephone",terms:"phone number",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{label:"Difficulty",terms:"",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",terms:"",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",terms:"",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",terms:"",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}},"piste/grooming_downhill":{label:"Grooming",terms:"",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}},"piste/grooming_hike":{label:"Grooming",terms:"",options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}},"piste/grooming_nordic":{label:"Grooming",terms:"",options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/grooming":{label:"Grooming",terms:"",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/type":{label:"Type",terms:"",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",terms:""},plant:{label:"Plant",terms:""},"plant/output/electricity":{label:"Power Output",terms:"",placeholder:"500 MW, 1000 MW, 2000 MW..."},playground:{label:"Type",terms:""},"playground/baby":{label:"Baby Seat",terms:""},"playground/max_age":{label:"Maximum Age",terms:""},"playground/min_age":{label:"Minimum Age",terms:""},polling_station:{label:"Polling Place",terms:"voting place"},population:{label:"Population",terms:""},post:{label:"Delivery Address",terms:""},power_supply:{label:"Power Supply",terms:""},power:{label:"Type",terms:""},preschool:{label:"Preschool",terms:""},produce:{label:"Produce",terms:""},product:{label:"Products",terms:""},"public_bookcase/type":{label:"Type",terms:""},railway:{label:"Type",terms:""},"railway/position":{label:"Milestone Position",terms:"",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction Affected",terms:"",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating",terms:""},recycling_accepts:{label:"Accepts",terms:""},recycling_type:{label:"Type",terms:"",placeholder:"Container, Center",options:{container:"Container",centre:"Center"}},ref_aeroway_gate:{label:"Gate Number",terms:""},ref_golf_hole:{label:"Hole Number",terms:"",placeholder:"1-18"},ref_highway_junction:{label:"Junction Number",terms:""},ref_platform:{label:"Platform Number",terms:""},ref_road_number:{label:"Road Number",terms:""},ref_room_number:{label:"Room Number",terms:""},ref_route:{label:"Route Number",terms:""},ref_runway:{label:"Runway Number",terms:"",placeholder:"e.g. 01L/19R"},ref_stop_position:{label:"Stop Number",terms:""},ref_taxiway:{label:"Taxiway Name",terms:"",placeholder:"e.g. A5"},ref:{label:"Reference Code",terms:""},"ref/isil":{label:"ISIL Code",terms:""},relation:{label:"Type",terms:""},religion:{label:"Religion",terms:""},reservation:{label:"Reservations",terms:"",options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}},resort:{label:"Type",terms:""},resource:{label:"Resources",terms:""},restriction:{label:"Type",terms:""},restrictions:{label:"Turn Restrictions",terms:""},"roof/colour":{label:"Roof Color",terms:""},room:{label:"Type",terms:""},rooms:{label:"Rooms",terms:""},route_master:{label:"Type",terms:""},route:{label:"Type",terms:""},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",terms:"",placeholder:"1, 4, 8…"},scuba_diving:{label:"Services",terms:""},"seamark/beacon_isolated_danger/shape":{label:"Shape",terms:""},"seamark/beacon_lateral/category":{label:"Category",terms:"",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",terms:"",options:{red:"Red",green:"Green",grey:"Grey"}},"seamark/beacon_lateral/shape":{label:"Shape",terms:""},"seamark/beacon_lateral/system":{label:"System",terms:"",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/buoy_lateral/category":{label:"Category",terms:"",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",terms:"",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",terms:""},"seamark/buoy_lateral/system":{label:"System",terms:"",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/mooring/category":{label:"Category",terms:""},"seamark/type":{label:"Seamark",terms:"marine"},"seamark/wreck/category":{label:"Category",terms:""},seasonal:{label:"Seasonal",terms:""},seats:{label:"Seats",terms:"",placeholder:"2, 4, 6..."},second_hand:{label:"Sells Used",terms:"",placeholder:"Yes, No, Only",options:{yes:"Yes",no:"No",only:"Only"}},self_service:{label:"Self-Service",terms:""},service_rail:{label:"Service Type",terms:"",options:{spur:"Spur",yard:"Yard",siding:"Siding",crossover:"Crossover"}},service_times:{label:"Service Times",terms:""},service:{label:"Type",terms:""},"service/bicycle":{label:"Services",terms:""},"service/vehicle":{label:"Services",terms:""},shelter_type:{label:"Type",terms:""},shelter:{label:"Shelter",terms:""},shop:{label:"Type",terms:""},"siren/purpose":{label:"Purpose",terms:""},"siren/type":{label:"Type",terms:"",options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}},site_type:{label:"Site Type",terms:""},site:{label:"Type",terms:""},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"}},social_facility_for:{label:"People Served",terms:""},social_facility:{label:"Type",terms:""},source:{label:"Sources",terms:"reference"},"species/wikidata":{label:"Species Wikidata",terms:""},sport_ice:{label:"Sports",terms:""},sport_racing_motor:{label:"Sports",terms:""},sport_racing_nonmotor:{label:"Sports",terms:""},sport:{label:"Sports",terms:""},stars:{label:"Stars",terms:"rating"},start_date:{label:"Start Date",terms:"inception"},step_count:{label:"Number of Steps",terms:""},stop:{label:"Stop Type",terms:"",options:{all:"All Ways",minor:"Minor Road"}},street_cabinet:{label:"Type",terms:""},stroller:{label:"Stroller Access",terms:"baby carriage,perambulator,pram,pushchair"},structure_waterway:{label:"Structure",terms:"",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",terms:""},substance:{label:"Substance",terms:""},substation:{label:"Type",terms:""},supervised:{label:"Supervised",terms:"guarded,manned"},support:{label:"Support",terms:""},surface:{label:"Surface",terms:""},surveillance:{label:"Surveillance Kind",terms:""},"surveillance/type":{label:"Surveillance Type",terms:"",options:{camera:"Camera",guard:"Guard",ALPR:"Automatic License Plate Reader"}},"surveillance/zone":{label:"Surveillance Zone",terms:""},"survey/date":{label:"Last Survey Date",terms:""},swimming_pool:{label:"Type",terms:""},"switch":{label:"Type",terms:"",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",terms:""},tidal:{label:"Tidal",terms:""},to:{label:"To",terms:""},"toilets/disposal":{label:"Disposal",terms:"",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",terms:""},tourism:{label:"Type",terms:""},"tower/construction":{label:"Construction",terms:"",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{label:"Type",terms:""},tracktype:{label:"Track Type",terms:"",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",terms:""},traffic_calming:{label:"Type",terms:""},traffic_sign:{label:"Traffic Sign",terms:""},"traffic_sign/direction":{label:"Direction Affected",terms:"",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},traffic_signals:{label:"Type",terms:""},"traffic_signals/direction":{label:"Direction Affected",terms:"",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",terms:"",options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}},trees:{label:"Trees",terms:""},trench:{label:"Type",terms:""},trolley_wire:{label:"Overhead Trolley Wires",terms:""},tunnel:{label:"Type",terms:"",placeholder:"Default"},usage_rail:{label:"Usage Type",terms:"",options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}},valve:{label:"Type",terms:""},vending:{label:"Types of Goods",terms:""},visibility:{label:"Visibility",terms:"",options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}},"volcano/status":{label:"Volcano Status",terms:"",options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}},"volcano/type":{label:"Volcano Type",terms:"",options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}},voltage_electrified:{label:"Voltage",terms:""},voltage:{label:"Voltage",terms:""},"voltage/primary":{label:"Primary Voltage",terms:""},"voltage/secondary":{label:"Secondary Voltage",terms:""},"voltage/tertiary":{label:"Tertiary Voltage",terms:""},wall:{label:"Type",terms:""},water_point:{label:"Water Point",terms:""},water_source:{label:"Water Source",terms:""},water_volume:{label:"Water Reserve Volume (m³)",terms:""},water:{label:"Type",terms:""},waterway:{label:"Type",terms:""},website:{label:"Website",terms:"internet presence,uri,url,webpage",placeholder:"https://example.com"},wetland:{label:"Type",terms:""},wheelchair:{label:"Wheelchair Access",terms:"handicap access"},wholesale:{label:"Wholesale",terms:""},width:{label:"Width (Meters)",terms:""},wikidata:{label:"Wikidata",terms:""},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",terms:""},aeroway:{name:"Aeroway",terms:""},amenity:{name:"Amenity",terms:""},attraction:{name:"Attraction",terms:""},boundary:{name:"Boundary",terms:""},building_point:{name:"Building",terms:""},embankment:{name:"Embankment",terms:""},emergency:{name:"Emergency Feature",terms:""},ford_line:{name:"Ford",terms:""},highway:{name:"Highway",terms:""},indoor:{name:"Indoor Feature",terms:""},landuse:{name:"Land Use",terms:""},leisure:{name:"Leisure",terms:""},man_made:{name:"Man Made",terms:""},natural:{name:"Natural",terms:""},place:{name:"Place",terms:""},playground:{name:"Playground Equipment",terms:""},power:{name:"Power",terms:""},railway:{name:"Railway",terms:""},seamark:{name:"Seamark",terms:""},tourism:{name:"Tourism",terms:""},waterway:{name:"Waterway",terms:""},"addr/interpolation":{name:"Address Interpolation",terms:""},address:{name:"Address",terms:""},"advertising/billboard":{name:"Billboard",terms:""},"advertising/column":{name:"Advertising Column",terms:""},"aerialway/station":{name:"Aerialway Station",terms:""},"aerialway/cable_car":{name:"Cable Car",terms:"tramway,ropeway"},"aerialway/chair_lift":{name:"Chair Lift",terms:""},"aerialway/drag_lift":{name:"Drag Lift",terms:""},"aerialway/gondola":{name:"Gondola",terms:""},"aerialway/goods":{name:"Goods Aerialway",terms:""},"aerialway/j-bar":{name:"J-bar Lift",terms:"jbar"},"aerialway/magic_carpet":{name:"Magic Carpet Lift",terms:""},"aerialway/mixed_lift":{name:"Mixed Lift",terms:""},"aerialway/platter":{name:"Platter Lift",terms:"button lift,poma lift"},"aerialway/pylon":{name:"Aerialway Pylon",terms:""},"aerialway/rope_tow":{name:"Rope Tow Lift",terms:"handle tow,bugel lift"},"aerialway/t-bar":{name:"T-bar Lift",terms:"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/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",terms:""},"amenity/coworking_space":{name:"Coworking Space",terms:""},"amenity/embassy":{name:"Embassy",terms:""},"amenity/ferry_terminal":{name:"Ferry Station / Terminal",terms:""},"amenity/nursing_home":{name:"Nursing Home",terms:""},"amenity/recycling":{name:"Recycling",terms:"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/register_office":{name:"Register Office",terms:""},"amenity/scrapyard":{name:"Scrap Yard",terms:""},"amenity/swimming_pool":{name:"Swimming Pool",terms:""},"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"},"amenity/bicycle_parking/building":{name:"Bicycle Parking Garage",terms:"Multi-Storey Bicycle Park,Multi-Storey Bike Park,Bike Parking Station"},"amenity/bicycle_parking/lockers":{name:"Bicycle Lockers",terms:"Bike Lockers"},"amenity/bicycle_parking/shed":{name:"Bicycle Shed",terms:"Bike Shed"},"amenity/bicycle_rental":{name:"Bicycle Rental",terms:"bike,bicycle,bikeshare,bike share,bicycle share,hub,dock"},"amenity/bicycle_repair_station":{name:"Bicycle Repair Tool Stand",terms:"bike,repair,chain,pump,tools,stand,multitool"},"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",terms:""},"amenity/car_rental":{name:"Car Rental",terms:""},"amenity/car_sharing":{name:"Car Sharing",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",terms:""},"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/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:""},"amenity/fuel":{name:"Gas Station",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/grave_yard":{name:"Graveyard",terms:""},"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":{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/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/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:"Mailbox",terms:"letter drop,mail box,package drop,post box,postal box"},"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/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:""},"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/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/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/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/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/newspapers":{name:"Newspaper Vending Machine",terms:"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{name:"Parcel Pickup/Dropoff Locker",terms:"mail,parcel,pickup"},"amenity/vending_machine/parcel_pickup":{name:"Parcel Pickup Locker",terms:"amazon,locker,mail,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:""},"amenity/watering_place":{name:"Animal Watering Place",terms:""},area:{name:"Area",terms:"polygon"},"area/highway":{name:"Road Surface",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 Car",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",terms:"theme park,amusement ride,gondola,tower,big drop"},"attraction/maze":{name:"Maze",terms:"theme park,amusement ride,labyrinth"},"attraction/pirate_ship":{name:"Pirate Ship",terms:"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{name:"River Rafting",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/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",terms:""},"barrier/block":{name:"Block",terms:""},"barrier/bollard":{name:"Bollard",terms:""},"barrier/border_control":{name:"Border Control",terms:""},"barrier/cattle_grid":{name:"Cattle Grid",terms:""},"barrier/chain":{name:"Chain",terms:""},"barrier/city_wall":{name:"City Wall",terms:""},"barrier/cycle_barrier":{name:"Cycle Barrier",terms:""},"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/toll_booth":{name:"Toll Booth",terms:""},"barrier/turnstile":{name:"Turnstile",terms:"baffle gate,turnstyle"},"barrier/wall":{name:"Wall",terms:""},"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",terms:""},"building/entrance":{name:"Entrance/Exit",terms:""},"building/train_station":{name:"Train Station Building",terms:""},"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:""},"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/jeweler":{name:"Jeweler",terms:""},"craft/locksmith":{name:"Locksmith",terms:""},"craft/optician":{name:"Optician",terms:""},"craft/tailor":{name:"Tailor",terms:"clothes,suit"},"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/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",terms:"ceramic"},"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:""},"emergency/designated":{name:"Emergency Access Designated",terms:""},"emergency/destination":{name:"Emergency Access Destination",terms:""},"emergency/no":{name:"Emergency Access No",terms:""},"emergency/official":{name:"Emergency Access Official",terms:""},"emergency/private":{name:"Emergency Access Private",terms:""},"emergency/yes":{name:"Emergency Access Yes",terms:""},"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/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"},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",terms:""},"highway/crossing":{name:"Crossing",terms:""},"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)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,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:"bike path,bicyle path"},"highway/cycleway/crossing":{name:"Cycle Crossing",terms:""},"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",terms:""},"highway/footway/zebra-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"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/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:"Racetrack (Motorsport)",terms:"auto*,formula one,kart,motocross,nascar,race*,track"},"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/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",terms:""},"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/room":{name:"Room",terms:"antechamber,anteroom,atrium,cell,chamber,concourse,foyer,indoor room,lobby,vestibule"},"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:""},"junction/circular":{name:"Traffic Circle",terms:""},"junction/jughandle":{name:"Jughandle",terms:""},"junction/roundabout":{name:"Roundabout",terms:""},"landuse/basin":{name:"Basin",terms:""},"landuse/farm":{name:"Farmland",terms:""},"landuse/pond":{name:"Pond",terms:""},"landuse/reservoir":{name:"Reservoir",terms:""},"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:""},"landuse/churchyard":{name:"Churchyard",terms:""},"landuse/commercial":{name:"Commercial Area",terms:""},"landuse/construction":{name:"Construction",terms:""},"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:"cut,forest,forestry,lumber,silviculture,tree"},"landuse/garages":{name:"Garage Landuse",terms:""},"landuse/grass":{name:"Grass",terms:""},"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:""},"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:"Firepit",terms:"fireplace,campfire"},"leisure/fishing":{name:"Fishing Spot",terms:"angler"},"leisure/fitness_centre":{name:"Gym / Fitness Center",terms:"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{name:"Yoga Studio",terms:"studio,asanas,modern yoga,meditation"},"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/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",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/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",terms:"bore,dig,shaft,underground passage,underpass"},"man_made/wastewater_plant":{name:"Wastewater Plant",terms:"sewage*,water treatment plant,reclamation plant"},"man_made/water_tower":{name:"Water Tower",terms:""},"man_made/water_well":{name:"Water Well",terms:""},"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"},manhole:{name:"Manhole",terms:"cover,hole,sewer,sewage,telecom"},"manhole/drain":{name:"Storm Drain",terms:"cover,drain,hole,rain,sewer,sewage,storm"},"manhole/telecom":{name:"Telecom Manhole",terms:"cover,phone,hole,telecom,telephone,bt"},"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/glacier":{name:"Glacier",terms:"ice,snow"},"natural/grassland":{name:"Grassland",terms:"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:""},"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",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",terms:"beck,branch,brook,course,creek,estuary,rill,riverbank,rivulet,run,runnel,stream,tributary,watercourse"},"natural/water/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"},"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:"Wood",terms:"tree"},"noexit/yes":{name:"No Exit",terms:"no exit,road end,dead end"},office:{name:"Office",terms:""},"office/administrative":{name:"Administrative Office",terms:""},"office/physician":{name:"Physician",terms:""},"office/travel_agent":{name:"Travel Agency",terms:""},"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/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/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:""},"office/lawyer/notary":{name:"Notary Office",terms:""},"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:""},"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 Piste/Ski Run",terms:"ski,alpine,snowboard,downhill,piste"},"piste/downhill/halfpipe":{name:"Halfpipe",terms:"ski,alpine,halfpipe,half pipe,snowboard,downhill,piste"},"piste/hike":{name:"Snowshoeing or Winter Hiking Trail",terms:"hike,winter hiking,snowshoe,snowshoeing,piste,ski"},"piste/ice_skate":{name:"Ice Skating Piste",terms:"ice,skating,ski,piste"},"piste/nordic":{name:"Nordic or Crosscountry Piste/Ski Trail",terms:"ski,nordic,crosscountry,skating,piste"},"piste/piste":{name:"Winter Sport Trails",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 Piste",terms:"ski,sled,luge,sleigh,sledge,piste"},"piste/sleigh":{name:"Sleigh Piste",terms:"ski,piste,sled,luge,sleigh,sledge,ski-joring,husky,horse"},"place/farm":{name:"Farm",terms:""},"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:"high 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:""},"playground/seesaw":{name:"Seesaw",terms:""},"playground/slide":{name:"Slide",terms:""},"playground/structure":{name:"Play Structure",terms:""},"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/sub_station":{name:"Substation",terms:""},"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/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",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/ferry_point":{name:"Ferry Stop / Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/light_rail_point":{name:"Light Rail Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform/monorail_point":{name:"Monorail Stop / Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform/subway_point":{name:"Subway Stop / Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform/train_point":{name:"Train Stop / Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"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)",terms:"break,interrupt,rest,wait,interruption"},"railway/platform":{name:"Train Platform",terms:""},"railway/station":{name:"Train Station",terms:"train station,station"},"railway/tram_stop":{name:"Tram Stopping Position",terms:"light rail,streetcar,tram,trolley"},"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"},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",terms:""},"shop/fashion":{name:"Fashion Store",terms:""},"shop/fishmonger":{name:"Fishmonger",terms:""},"shop/furnace":{name:"Furnace Store",terms:"oven,stove"},"shop/vacant":{name:"Vacant Shop",terms:""},"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 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"},"shop/books":{name:"Book Store",terms:""},"shop/butcher":{name:"Butcher",terms:"chicken,beef,lamb,meat,pork"},"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/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/underwear":{name:"Underwear Store",terms:"boutique,bras,brassieres,briefs,boxers,fashion,lingerie,panties,slips,socks,stockings,underclothes,undergarments,underpants,undies"},"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 and 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/dry_cleaning":{name:"Dry Cleaner",terms:""},"shop/e-cigarette":{name:"E-Cigarette Shop",terms:"electronic,vape,vaping,vapor"},"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:"farm shop,farm stand"},"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/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:""},"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"},"shop/printer_ink":{name:"Printer Ink Store",terms:"copier ink,fax ink,ink cartridges,toner"},"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/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/ticket":{name:"Ticket Seller",terms:"box office"},"shop/tiles":{name:"Tile Shop",terms:""},"shop/tobacco":{name:"Tobacco Shop",terms:"cigarettes,cigars"},"shop/toys":{name:"Toy Store",terms:"games"},"shop/trade":{name:"Trade Shop",terms:""},"shop/travel_agency":{name:"Travel Agency",terms:""},"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:"climbing hut"},"tourism/apartment":{name:"Guest Apartment / Condo",terms:""},"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:"tent,rv"},"tourism/caravan_site":{name:"RV Park",terms:"Motor Home,Camper"},"tourism/chalet":{name:"Holiday Cottage",terms:"holiday,holiday cottage,holiday home,vacation,vacation home"},"tourism/gallery":{name:"Art Gallery",terms:"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{name:"Guest House",terms:"B&B,Bed and Breakfast"},"tourism/hostel":{name:"Hostel",terms:""},"tourism/hotel":{name:"Hotel",terms:""},"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:""},"tourism/museum":{name:"Museum",terms:"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"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:"wilderness hut,backcountry hut,bothy"},"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",terms:""},"type/boundary":{name:"Boundary",terms:""},"type/boundary/administrative":{name:"Administrative Boundary",terms:""},"type/enforcement":{name:"Enforcement",terms:""},"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",terms:""},"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/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/water_point":{name:"Marine Drinking Water",terms:""},"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"},"Maxar-Premium":{attribution:{text:"Terms & Feedback"},description:"Maxar Premium is a mosaic composed of Maxar basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",name:"Maxar Premium Imagery (Beta)"},"Maxar-Standard":{attribution:{text:"Terms & Feedback"},description:"Maxar Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",name:"Maxar Standard Imagery (Beta)"},"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"},"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"},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"},"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:{"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"},"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-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."},"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."},"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-twitter":{name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}"},"talk-gh":{name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community."},"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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-African-Methodist-Episcopal-University":{name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University"},"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-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-Nimba-County-Community-College":{name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College"},"ym-Stella-Maris-Polytechnic":{name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic"},"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."},"osm-mg-facebook":{name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap."},"talk-mg":{name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss."},"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-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-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-Namibia-University-of-Science-and-Technology":{name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology"},"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-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-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-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-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-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-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."},"osm-africa-telegram":{name:"OpenStreetMap Africa Telegram",description:"OpenStreetMap Telegram for Africa"},"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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-St.-Augustine-International-University":{name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University"},"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-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-The-University-of-Zambia":{name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia"},"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."},"osm-afghanistan-facebook":{name:"OpenStreetMap Afghanistan",description:"Improve OpenStreetMap in Afghanistan"},"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!"},"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-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-Jahangirnagar-University":{name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University"},"ym-Khulna-University":{name:"Openstreetmap",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-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-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'!"},"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!",events:{sotmasia2018:{name:"State of the Map Asia 2018",description:"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India",where:"Indian Institute of Management, Bangalore, India"}}},"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-mailinglist":{name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community"},"osm-india-telegram":{name:"OpenStreetMap India Telegram",description:"Join our family: {url}"},"OSM-india-twitter":{name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {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-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-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-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."},"ym-Gujarat-University":{name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University"},"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!"},"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."},"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-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-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-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-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-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!"},"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-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-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."},"OSM-Asia-mailinglist":{name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community"},"osm-asia-telegram":{name:"OpenStreetMap Asia Telegram",description:"Join our family: {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"},"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-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."},"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-south-korea-telegram":{name:"OSM South Korea Telegram",description:"Unofficial Channnel for OpenStreetMap contributors, communities, and users in South Korea to share and discuss."},"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!"},"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-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"},"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"},"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}"},"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"},"osm-at":{name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria"},byosm:{name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat"},"be-facebook":{name:"OpenStreetMap BE 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"},"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"},"czech-community":{name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia"},"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!"},"talk-cz-mailinglist":{name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community"},"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"},"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."},"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-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-twitter":{name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}"},"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-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-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}"},"osm-de":{name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany"},"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."},"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-meetup":{name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary"},"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-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}"},"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."},"South-Tyrol-Mailing-List":{name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol"},"talk-it-lazio":{name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area."},"Trentino-Mailing-List":{name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino"},"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-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."},"kosovo-telegram":{name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language."},"lu-mailinglist":{name:"Talk-lu Mailing List",description:"Official mailing list for the Luxembourgish OSM community"},"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"},"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-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"},"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 no Telegram",description:"Telegram Group of the Portuguese OpenStreetMap community {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}"},"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"},"ym-Universidad-Autonoma-de-Madrid":{name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid"},"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)"},"osm-se":{name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden"},"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-twitter":{name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}"},"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."},"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."},"gb-mailinglist":{name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community"},"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."},"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"},"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-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-Sacred-Heart-Junior-College":{name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College"},"OSM-CA-Slack":{name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}."},"OSM-Vancouver-meetup":{name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area"},"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."},"OSM-CU-telegram":{name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat"},"ym-Universidad-Nacional-Autnoma-de-Honduras":{name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras"},"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."},"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"},"osm-ni":{name:"MapaNica.net",description:"Provide OSM services and information for the local community in Nicaragua"},"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-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-Universidad-de-Puerto-Rico-Rio-Piedras":{name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras"},"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."},"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."},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!"},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."},"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."},"MaptimeHRVA-twitter":{name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {url}"},"us-ma-mailinglist":{name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community"},"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 =)"},"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-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-NYC":{name:"OpenStreetMap NYC",description:"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area"},"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-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-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-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-US-Slack":{name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}"},"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}",events:{"sotmus2019-cfs":{name:"Propose a Talk for SotM-US 2019",description:"We are calling on all members of the OpenStreetMap community to share your ideas and session proposals for State of the Map US 2019. Whether you are brand new to OSM or have been a core contributor since the beginning, we want to hear from you!",where:"Minneapolis, Minnesota"},sotmus2019:{name:"State of the Map US 2019",description:"Join the OpenStreetMap community at State of the Map US in Minneapolis, Minnesota. Connect with other mappers, businesses, government agencies, and non profits, all collaborating around the free and editable map of the world.",where:"Minneapolis, Minnesota"}}},"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-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."},"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}"},"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!"},"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-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-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-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-Indiana-University-of-Pennsylvania":{name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania"},"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-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-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-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-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-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-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-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-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-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-University-of-California-Davis":{name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis"},"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-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-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-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-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-Wyoming":{name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming"},"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-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"},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."},"talk-au":{name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat"},"Maptime-Oceania-Slack":{name:"Maptime Oceania Slack",description:"Sign up at {signupUrl}"},"talk-nz":{name:"Talk-nz Mailing List",description:"New Zealand's OSM community talk"},"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-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!"},"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!"},"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!"},"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}"},"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!"},"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}"},"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."},"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-CO":{name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation"},"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-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-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-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-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."},"OSM-EC-telegram":{name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat"},"OSM-PY-telegram":{name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat"},"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-PE":{name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru 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"},"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"},"LATAM-Facebook":{name:"OpenStreetMap Latam Facebook",description:"OpenStreetMap Latam on Facebook"},"LATAM-Telegram":{name:"OpenStreetMap Latam Telegram",description:"OpenStreetMap Telegram for Latin America"},"LATAM-Twitter":{name:"OpenStreetMap Latam Twitter",description:"Follow us on Twitter at {url}"},"osm-latam":{name:"OpenStreetMap Latam",description:"Supporting OpenStreetMap in Latin America",events:{"sotm-latam-2018":{name:"State of the Map Latam 2018",description:"State of the Map Latam is the annual conference for all mappers and users of OpenStreetMap in Latin America. The program includes talks, panels, workshops, and mapathons related to OpenStreetMap.",where:"Buenos Aires, Argentina"}}},"OSM-Discord":{name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord"},"OSM-Facebook":{name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap."},"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-IRC":{name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)"},"OSM-Reddit":{name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap.  Ask us anything!"},"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}"},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:{sotm2018:{name:"State of the Map 2018",description:"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Milan, Italy"}}}}};
24709
24710         var features$3 = {africa_full:{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-29.35547,14.94478],[-27.81738,21.33032],[-12.78809,34.28899],[-5.42999,35.99134],[-2.72461,36.0935],[5.73486,38.39334],[12.17285,37.33522],[13.77686,35.03],[33.35449,33.32135],[34.91455,29.48264],[34.38721,27.54724],[42.57202,13.73138],[43.20923,12.86536],[43.82446,11.53385],[54.93164,14.51978],[63.01758,-13.49647],[50.53711,-40.44695],[10.98633,-38.41056],[2.72461,-9.79568],[-29.35547,14.94478]]]},id:"africa_full"},botswana:{type:"Feature",id:"botswana",properties:{},geometry:{type:"Polygon",coordinates:[[[25.65423,-18.48085],[25.70131,-18.56629],[25.79198,-18.60814],[25.83557,-18.82958],[25.95414,-18.89236],[26.00296,-19.02313],[25.9925,-19.058],[26.17908,-19.52356],[26.25057,-19.57064],[26.32554,-19.57064],[26.37611,-19.62121],[26.35344,-19.64562],[26.70741,-19.87404],[26.73356,-19.91763],[26.97419,-20.00133],[27.04394,-19.99784],[27.13984,-20.06585],[27.22005,-20.07456],[27.30723,-20.22626],[27.31769,-20.45643],[27.73269,-20.4913],[27.74664,-20.70926],[27.71525,-21.07718],[27.9088,-21.2777],[28.02562,-21.55668],[28.19825,-21.5933],[28.37261,-21.59679],[28.50339,-21.65433],[28.58011,-21.62643],[28.8033,-21.71362],[29.08577,-21.80603],[29.03346,-21.90193],[29.06659,-22.02399],[29.17645,-22.07107],[29.25665,-22.05189],[29.38569,-22.19312],[29.32117,-22.21231],[29.0387,-22.23323],[29.01428,-22.27159],[28.97941,-22.31344],[28.98115,-22.34482],[28.94105,-22.45991],[28.52257,-22.59766],[28.36041,-22.58371],[28.18255,-22.70053],[28.18255,-22.74761],[28.06747,-22.89931],[27.95239,-22.9708],[27.96285,-23.03532],[27.74838,-23.24107],[27.68561,-23.21666],[27.62109,-23.23758],[27.56006,-23.36836],[27.2741,-23.49565],[27.08578,-23.66304],[27.00034,-23.70489],[26.88875,-24.10593],[26.87654,-24.26635],[26.74228,-24.31343],[26.57663,-24.45292],[26.42842,-24.64821],[25.8844,-24.77724],[25.89486,-24.88012],[25.76585,-25.17485],[25.66467,-25.48682],[25.58448,-25.64908],[25.3456,-25.78509],[25.11021,-25.76939],[25.02517,-25.71967],[24.92538,-25.81822],[24.69696,-25.83042],[24.46156,-25.74324],[24.37786,-25.76765],[24.21127,-25.67022],[23.92974,-25.64036],[23.66819,-25.44158],[23.3121,-25.26869],[22.88179,-25.50087],[22.72835,-26.01351],[22.63768,-26.10767],[22.56793,-26.2367],[22.48424,-26.21054],[22.35521,-26.33609],[22.24971,-26.35352],[22.07317,-26.63251],[21.9668,-26.67131],[21.79767,-26.66956],[21.77761,-26.69223],[21.80377,-26.78465],[21.6913,-26.87096],[21.59889,-26.8605],[21.5274,-26.86224],[21.32339,-26.84349],[21.14248,-26.87375],[21.00386,-26.84873],[20.98729,-26.81621],[20.85826,-26.80575],[20.68477,-26.92022],[20.61677,-26.79293],[20.61589,-26.68718],[20.622,-26.60461],[20.5941,-26.47558],[20.82252,-26.153],[20.78939,-25.92458],[20.63769,-25.63862],[20.63595,-25.55143],[20.36045,-25.06321],[20.25583,-24.93766],[20.11982,-24.89756],[19.98556,-24.76853],[19.99602,-21.99435],[20.9934,-22.00132],[20.99514,-18.30648],[21.45547,-18.31171],[23.10324,-17.98913],[23.31422,-17.98913],[23.43105,-18.18268],[23.54439,-18.26289],[23.60542,-18.48085],[23.77455,-18.36577],[23.91928,-18.20884],[24.18606,-18.01355],[24.36915,-17.94031],[24.47377,-17.956],[24.51038,-18.03621],[24.57839,-18.05714],[24.615,-17.98565],[24.71439,-17.89498],[24.97594,-17.77466],[25.09102,-17.82174],[25.15903,-17.76246],[25.27411,-17.79559],[25.25493,-17.91241],[25.31596,-18.06062],[25.40489,-18.1077],[25.5374,-18.37972],[25.65423,-18.48085]]]}},"Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{type:"Feature",id:"Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.98799,5.5686],[-3.94397,5.56428],[-3.90165,5.5515],[-3.86264,5.53074],[-3.82846,5.5028],[-3.80041,5.46876],[-3.77958,5.42993],[-3.76675,5.38779],[-3.76243,5.34398],[-3.76678,5.30017],[-3.77963,5.25804],[-3.80049,5.21922],[-3.82854,5.1852],[-3.86272,5.15728],[-3.90171,5.13653],[-3.94401,5.12375],[-3.98799,5.11944],[-4.03198,5.12375],[-4.07428,5.13653],[-4.11327,5.15728],[-4.14745,5.1852],[-4.1755,5.21922],[-4.19635,5.25804],[-4.2092,5.30017],[-4.21355,5.34398],[-4.20924,5.38779],[-4.19641,5.42993],[-4.17558,5.46876],[-4.14753,5.5028],[-4.11335,5.53074],[-4.07434,5.5515],[-4.03201,5.56428],[-3.98799,5.5686]]]}},"The-Gambia-YMCA-University-of-the-Gambia":{type:"Feature",id:"The-Gambia-YMCA-University-of-the-Gambia",properties:{},geometry:{type:"Polygon",coordinates:[[[-16.6763,13.68253],[-16.63121,13.67821],[-16.58785,13.66542],[-16.54791,13.64465],[-16.5129,13.6167],[-16.48419,13.58265],[-16.46288,13.54381],[-16.44977,13.50166],[-16.44538,13.45785],[-16.44986,13.41404],[-16.46303,13.37192],[-16.4844,13.33311],[-16.51312,13.2991],[-16.54811,13.27119],[-16.58801,13.25045],[-16.63129,13.23769],[-16.6763,13.23337],[-16.72131,13.23769],[-16.76459,13.25045],[-16.80449,13.27119],[-16.83948,13.2991],[-16.8682,13.33311],[-16.88956,13.37192],[-16.90274,13.41404],[-16.90722,13.45785],[-16.90282,13.50166],[-16.88972,13.54381],[-16.8684,13.58265],[-16.83969,13.6167],[-16.80469,13.64465],[-16.76474,13.66542],[-16.72139,13.67821],[-16.6763,13.68253]]]}},cape_coast_gh:{type:"Feature",id:"cape_coast_gh",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.6,5],[-1.6,5.4],[-1,5.4],[-1,5],[-1.6,5]]]}},ghana:{type:"Feature",properties:{},id:"ghana",geometry:{type:"Polygon",coordinates:[[[-3.11256,5.13335],[-2.97215,5.11112],[-2.94811,5.12753],[-2.75757,5.10599],[-2.7253,5.14087],[-2.78641,5.28242],[-2.78297,5.29541],[-2.76993,5.2937],[-2.76546,5.31797],[-2.77748,5.33079],[-2.77319,5.35557],[-2.72495,5.34224],[-2.78023,5.60642],[-2.86022,5.65049],[-2.92889,5.61838],[-2.96631,5.64127],[-2.95292,5.71643],[-3.02639,5.7096],[-3.01987,5.8575],[-3.07411,5.98624],[-3.10226,6.15284],[-3.15514,6.25114],[-3.17574,6.25182],[-3.17162,6.29755],[-3.23753,6.54183],[-3.23341,6.60049],[-3.26157,6.61959],[-3.21007,6.73417],[-3.24028,6.83031],[-2.95326,7.23817],[-2.97558,7.27018],[-2.92236,7.61436],[-2.77611,7.94432],[-2.60513,8.03747],[-2.62985,8.11769],[-2.48978,8.20877],[-2.64221,9.00988],[-2.77679,9.03972],[-2.76581,9.15633],[-2.66968,9.26478],[-2.93884,10.66601],[-2.82898,11.0113],[-0.68939,11.00051],[-0.60974,10.91962],[-0.43121,11.04095],[-0.43396,11.10295],[-0.27843,11.17672],[-0.13424,11.13967],[-0.14214,11.10632],[-0.05905,11.08341],[-0.0388,11.10733],[-0.01339,11.11204],[0.02369,11.05308],[0.03296,10.97793],[-0.00549,10.96411],[-0.02266,10.81914],[-0.07141,10.76856],[-0.07999,10.69806],[-0.05905,10.63294],[0.04257,10.60257],[0.0618,10.56207],[0.14351,10.52629],[0.17097,10.42265],[0.26711,10.41151],[0.28633,10.42096],[0.34264,10.31357],[0.39757,10.31492],[0.39722,10.30546],[0.37148,10.28283],[0.35225,10.10746],[0.41817,10.06487],[0.40924,10.01822],[0.36461,10.03174],[0.34676,9.66506],[0.26779,9.64678],[0.24994,9.44771],[0.42847,9.48564],[0.56168,9.40977],[0.48203,8.80501],[0.3804,8.74122],[0.47653,8.59324],[0.65369,8.49546],[0.65781,8.42347],[0.70862,8.38339],[0.72784,8.28964],[0.60425,8.21693],[0.62004,7.70623],[0.59464,7.70283],[0.5809,7.62253],[0.52322,7.5953],[0.52734,7.45099],[0.56168,7.39243],[0.62759,7.40741],[0.66055,7.30935],[0.59395,7.11248],[0.61317,7.09306],[0.59601,7.00549],[0.52322,6.97823],[0.52322,6.94006],[0.56442,6.92234],[0.53284,6.82962],[0.65094,6.73962],[0.63446,6.63733],[0.74707,6.57048],[0.71411,6.51864],[0.90242,6.33355],[1.00405,6.33543],[1.02516,6.25319],[1.05537,6.22964],[1.1,6.17],[1.2,6.17],[1.2,4],[-3,4.5],[-3.11256,5.13335]]]}},"Kwame-Nkrumah-University-of-Science-and-Technology":{type:"Feature",id:"Kwame-Nkrumah-University-of-Science-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.56831,6.89695],[-1.52418,6.89263],[-1.48174,6.87985],[-1.44264,6.85909],[-1.40837,6.83115],[-1.38026,6.7971],[-1.35937,6.75827],[-1.34652,6.71613],[-1.3422,6.67232],[-1.34656,6.62851],[-1.35945,6.58638],[-1.38035,6.54757],[-1.40848,6.51354],[-1.44274,6.48562],[-1.48182,6.46488],[-1.52422,6.45211],[-1.56831,6.44779],[-1.6124,6.45211],[-1.6548,6.46488],[-1.69388,6.48562],[-1.72814,6.51354],[-1.75627,6.54757],[-1.77717,6.58638],[-1.79006,6.62851],[-1.79442,6.67232],[-1.7901,6.71613],[-1.77725,6.75827],[-1.75636,6.7971],[-1.72825,6.83115],[-1.69398,6.85909],[-1.65488,6.87985],[-1.61244,6.89263],[-1.56831,6.89695]]]}},"University-of-Cape-Coast":{type:"Feature",id:"University-of-Cape-Coast",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.23047,5.31552],[-1.18647,5.31121],[-1.14416,5.29842],[-1.10517,5.27766],[-1.071,5.24973],[-1.04296,5.21569],[-1.02214,5.17685],[-1.00932,5.13472],[-1.005,5.0909],[-1.00935,5.04709],[-1.02219,5.00497],[-1.04303,4.96615],[-1.07108,4.93212],[-1.10524,4.9042],[-1.14421,4.88345],[-1.1865,4.87068],[-1.23047,4.86637],[-1.27444,4.87068],[-1.31672,4.88345],[-1.3557,4.9042],[-1.38986,4.93212],[-1.4179,4.96615],[-1.43875,5.00497],[-1.45159,5.04709],[-1.45594,5.0909],[-1.45162,5.13472],[-1.4388,5.17685],[-1.41798,5.21569],[-1.38994,5.24973],[-1.35577,5.27766],[-1.31678,5.29842],[-1.27447,5.31121],[-1.23047,5.31552]]]}},"University-of-Energy-and-Natural-Resources":{type:"Feature",id:"University-of-Energy-and-Natural-Resources",properties:{},geometry:{type:"Polygon",coordinates:[[[-2.343,7.57482],[-2.2988,7.5705],[-2.2563,7.55771],[-2.21714,7.53695],[-2.18283,7.50901],[-2.15467,7.47497],[-2.13376,7.43613],[-2.12089,7.394],[-2.11656,7.35018],[-2.12093,7.30637],[-2.13384,7.26425],[-2.15477,7.22543],[-2.18294,7.19141],[-2.21725,7.16349],[-2.25639,7.14275],[-2.29885,7.12997],[-2.343,7.12566],[-2.38715,7.12997],[-2.42961,7.14275],[-2.46875,7.16349],[-2.50306,7.19141],[-2.53123,7.22543],[-2.55216,7.26425],[-2.56507,7.30637],[-2.56944,7.35018],[-2.56511,7.394],[-2.55224,7.43613],[-2.53133,7.47497],[-2.50317,7.50901],[-2.46886,7.53695],[-2.4297,7.55771],[-2.3872,7.5705],[-2.343,7.57482]]]}},"University-of-Ghana":{type:"Feature",id:"University-of-Ghana",properties:{},geometry:{type:"Polygon",coordinates:[[[-0.19624,5.87573],[-0.15219,5.87141],[-0.10984,5.85863],[-0.07082,5.83787],[-0.03662,5.80993],[-0.00855,5.77589],[0.01229,5.73706],[0.02512,5.69492],[0.02944,5.65111],[0.02509,5.6073],[0.01223,5.56517],[-0.00863,5.52635],[-0.0367,5.49233],[-0.0709,5.46441],[-0.1099,5.44366],[-0.15223,5.43089],[-0.19624,5.42657],[-0.24025,5.43089],[-0.28257,5.44366],[-0.32157,5.46441],[-0.35577,5.49233],[-0.38384,5.52635],[-0.4047,5.56517],[-0.41756,5.6073],[-0.42191,5.65111],[-0.41759,5.69492],[-0.40476,5.73706],[-0.38392,5.77589],[-0.35586,5.80993],[-0.32166,5.83787],[-0.28263,5.85863],[-0.24028,5.87141],[-0.19624,5.87573]]]}},"University-of-Mines-and-Technology":{type:"Feature",id:"University-of-Mines-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[-2.00125,5.52338],[-1.95723,5.51907],[-1.91491,5.50628],[-1.87591,5.48552],[-1.84173,5.45759],[-1.81368,5.42355],[-1.79285,5.38471],[-1.78003,5.34258],[-1.77571,5.29876],[-1.78006,5.25495],[-1.7929,5.21283],[-1.81376,5.17401],[-1.84181,5.13998],[-1.87598,5.11206],[-1.91497,5.09132],[-1.95726,5.07854],[-2.00125,5.07423],[-2.04524,5.07854],[-2.08753,5.09132],[-2.12652,5.11206],[-2.16069,5.13998],[-2.18874,5.17401],[-2.2096,5.21283],[-2.22244,5.25495],[-2.22679,5.29876],[-2.22247,5.34258],[-2.20965,5.38471],[-2.18882,5.42355],[-2.16077,5.45759],[-2.12659,5.48552],[-2.08759,5.50628],[-2.04527,5.51907],[-2.00125,5.52338]]]}},"General-Lansana-Conte-University":{type:"Feature",id:"General-Lansana-Conte-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-13.62305,9.93364],[-13.57857,9.92932],[-13.5358,9.91653],[-13.49639,9.89576],[-13.46186,9.86782],[-13.43353,9.83377],[-13.41249,9.79494],[-13.39955,9.7528],[-13.3952,9.70898],[-13.39961,9.66517],[-13.4126,9.62305],[-13.43367,9.58424],[-13.46201,9.55022],[-13.49653,9.5223],[-13.53591,9.50156],[-13.57863,9.48879],[-13.62305,9.48448],[-13.66747,9.48879],[-13.71018,9.50156],[-13.74956,9.5223],[-13.78408,9.55022],[-13.81242,9.58424],[-13.83349,9.62305],[-13.84648,9.66517],[-13.85089,9.70898],[-13.84654,9.7528],[-13.8336,9.79494],[-13.81256,9.83377],[-13.78423,9.86782],[-13.7497,9.89576],[-13.71029,9.91653],[-13.66753,9.92932],[-13.62305,9.93364]]]}},"Institute-of-Science-and-Veterinary-Medicine":{type:"Feature",id:"Institute-of-Science-and-Veterinary-Medicine",properties:{},geometry:{type:"Polygon",coordinates:[[[-12.1175,10.91114],[-12.07288,10.90682],[-12.02998,10.89403],[-11.99045,10.87326],[-11.95581,10.84532],[-11.9274,10.81127],[-11.90629,10.77243],[-11.89332,10.73029],[-11.88896,10.68648],[-11.89338,10.64267],[-11.90641,10.60055],[-11.92755,10.56173],[-11.95598,10.52772],[-11.99061,10.4998],[-12.0301,10.47906],[-12.07295,10.46629],[-12.1175,10.46198],[-12.16205,10.46629],[-12.2049,10.47906],[-12.24439,10.4998],[-12.27902,10.52772],[-12.30745,10.56173],[-12.32859,10.60055],[-12.34162,10.64267],[-12.34604,10.68648],[-12.34168,10.73029],[-12.32871,10.77243],[-12.3076,10.81127],[-12.27919,10.84532],[-12.24455,10.87326],[-12.20502,10.89403],[-12.16212,10.90682],[-12.1175,10.91114]]]}},"Universit-de-NZrkor":{type:"Feature",id:"Universit-de-NZrkor",properties:{},geometry:{type:"Polygon",coordinates:[[[-8.83716,7.95701],[-8.79292,7.95269],[-8.75039,7.9399],[-8.71119,7.91914],[-8.67684,7.8912],[-8.64866,7.85715],[-8.62773,7.81832],[-8.61485,7.77618],[-8.61052,7.73237],[-8.6149,7.68856],[-8.62781,7.64643],[-8.64877,7.60762],[-8.67696,7.5736],[-8.7113,7.54568],[-8.75047,7.52493],[-8.79297,7.51216],[-8.83716,7.50785],[-8.88135,7.51216],[-8.92385,7.52493],[-8.96302,7.54568],[-8.99736,7.5736],[-9.02555,7.60762],[-9.0465,7.64643],[-9.05942,7.68856],[-9.0638,7.73237],[-9.05947,7.77618],[-9.04659,7.81832],[-9.02566,7.85715],[-8.99748,7.8912],[-8.96313,7.91914],[-8.92393,7.9399],[-8.8814,7.95269],[-8.83716,7.95701]]]}},"Dedan-Kimathi-University-of-Technology":{type:"Feature",id:"Dedan-Kimathi-University-of-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[37.00195,-0.21487],[37.04577,-0.21919],[37.0879,-0.23196],[37.12672,-0.25272],[37.16076,-0.28065],[37.18869,-0.31468],[37.20944,-0.3535],[37.22222,-0.39563],[37.22654,-0.43945],[37.22222,-0.48326],[37.20945,-0.52539],[37.18869,-0.56422],[37.16076,-0.59825],[37.12673,-0.62618],[37.0879,-0.64693],[37.04577,-0.65971],[37.00195,-0.66403],[36.95814,-0.65971],[36.91601,-0.64693],[36.87718,-0.62618],[36.84314,-0.59825],[36.81521,-0.56422],[36.79446,-0.52539],[36.78168,-0.48326],[36.77737,-0.43945],[36.78168,-0.39563],[36.79447,-0.3535],[36.81522,-0.31468],[36.84315,-0.28065],[36.87718,-0.25272],[36.91601,-0.23196],[36.95814,-0.21919],[37.00195,-0.21487]]]}},"Jomo-Kenyatta-University-of-Agriculture-and-Technology":{type:"Feature",id:"Jomo-Kenyatta-University-of-Agriculture-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[37.0105,-0.86452],[37.05432,-0.86884],[37.09645,-0.88162],[37.13528,-0.90237],[37.16932,-0.93029],[37.19726,-0.96433],[37.21802,-1.00315],[37.2308,-1.04528],[37.23512,-1.08909],[37.23081,-1.1329],[37.21803,-1.17504],[37.19727,-1.21386],[37.16934,-1.2479],[37.1353,-1.27583],[37.09646,-1.29658],[37.05432,-1.30936],[37.0105,-1.31368],[36.96668,-1.30936],[36.92454,-1.29658],[36.8857,-1.27583],[36.85166,-1.2479],[36.82373,-1.21386],[36.80297,-1.17504],[36.79019,-1.1329],[36.78588,-1.08909],[36.7902,-1.04528],[36.80298,-1.00315],[36.82374,-0.96433],[36.85168,-0.93029],[36.88572,-0.90237],[36.92455,-0.88162],[36.96668,-0.86884],[37.0105,-0.86452]]]}},"Karatina-University":{type:"Feature",id:"Karatina-University",properties:{},geometry:{type:"Polygon",coordinates:[[[37.12789,-0.25676],[37.1717,-0.26108],[37.21383,-0.27386],[37.25266,-0.29461],[37.28669,-0.32254],[37.31462,-0.35657],[37.33538,-0.3954],[37.34816,-0.43752],[37.35247,-0.48134],[37.34816,-0.52515],[37.33538,-0.56728],[37.31463,-0.60611],[37.2867,-0.64014],[37.25267,-0.66807],[37.21384,-0.68882],[37.1717,-0.7016],[37.12789,-0.70592],[37.08407,-0.7016],[37.04194,-0.68882],[37.00311,-0.66807],[36.96908,-0.64014],[36.94115,-0.60611],[36.92039,-0.56728],[36.90762,-0.52515],[36.9033,-0.48134],[36.90762,-0.43752],[36.9204,-0.3954],[36.94115,-0.35657],[36.96908,-0.32254],[37.00312,-0.29461],[37.04194,-0.27386],[37.08407,-0.26108],[37.12789,-0.25676]]]}},"Kenyatta-University":{type:"Feature",id:"Kenyatta-University",properties:{},geometry:{type:"Polygon",coordinates:[[[36.93493,-0.95538],[36.97875,-0.9597],[37.02089,-0.97248],[37.05972,-0.99323],[37.09376,-1.02116],[37.12169,-1.05519],[37.14245,-1.09401],[37.15524,-1.13614],[37.15956,-1.17995],[37.15524,-1.22377],[37.14247,-1.2659],[37.12171,-1.30472],[37.09378,-1.33876],[37.05974,-1.36669],[37.0209,-1.38744],[36.97876,-1.40023],[36.93493,-1.40454],[36.8911,-1.40023],[36.84896,-1.38744],[36.81013,-1.36669],[36.77609,-1.33876],[36.74815,-1.30472],[36.7274,-1.2659],[36.71462,-1.22377],[36.7103,-1.17995],[36.71462,-1.13614],[36.72741,-1.09401],[36.74817,-1.05519],[36.7761,-1.02116],[36.81014,-0.99323],[36.84898,-0.97248],[36.89111,-0.9597],[36.93493,-0.95538]]]}},"Moi-University":{type:"Feature",id:"Moi-University",properties:{},geometry:{type:"Polygon",coordinates:[[[35.50781,-0.12698],[35.55163,-0.1313],[35.59376,-0.14408],[35.63258,-0.16483],[35.66661,-0.19276],[35.69454,-0.22679],[35.7153,-0.26562],[35.72808,-0.30774],[35.7324,-0.35156],[35.72808,-0.39537],[35.7153,-0.4375],[35.69455,-0.47633],[35.66662,-0.51036],[35.63259,-0.53829],[35.59376,-0.55904],[35.55163,-0.57182],[35.50781,-0.57614],[35.464,-0.57182],[35.42187,-0.55904],[35.38304,-0.53829],[35.34901,-0.51036],[35.32108,-0.47633],[35.30032,-0.4375],[35.28754,-0.39537],[35.28323,-0.35156],[35.28755,-0.30774],[35.30033,-0.26562],[35.32108,-0.22679],[35.34901,-0.19276],[35.38304,-0.16483],[35.42187,-0.14408],[35.464,-0.1313],[35.50781,-0.12698]]]}},"Technical-University-of-Kenya":{type:"Feature",id:"Technical-University-of-Kenya",properties:{},geometry:{type:"Polygon",coordinates:[[[36.82449,-1.06703],[36.86831,-1.07134],[36.91045,-1.08412],[36.94928,-1.10487],[36.98332,-1.1328],[37.01126,-1.16683],[37.03202,-1.20566],[37.04481,-1.24778],[37.04913,-1.2916],[37.04481,-1.33541],[37.03203,-1.37754],[37.01128,-1.41637],[36.98334,-1.4504],[36.9493,-1.47833],[36.91046,-1.49909],[36.86832,-1.51187],[36.82449,-1.51618],[36.78066,-1.51187],[36.73852,-1.49909],[36.69968,-1.47833],[36.66564,-1.4504],[36.6377,-1.41637],[36.61695,-1.37754],[36.60417,-1.33541],[36.59986,-1.2916],[36.60418,-1.24778],[36.61696,-1.20566],[36.63772,-1.16683],[36.66566,-1.1328],[36.6997,-1.10487],[36.73853,-1.08412],[36.78067,-1.07134],[36.82449,-1.06703]]]}},"University-of-Nairobi":{type:"Feature",id:"University-of-Nairobi",properties:{},geometry:{type:"Polygon",coordinates:[[[36.82617,-1.09366],[36.86999,-1.09798],[36.91213,-1.11076],[36.95097,-1.13151],[36.98501,-1.15944],[37.01294,-1.19347],[37.0337,-1.23229],[37.04649,-1.27442],[37.05081,-1.31823],[37.0465,-1.36205],[37.03372,-1.40418],[37.01296,-1.44301],[36.98503,-1.47704],[36.95098,-1.50497],[36.91214,-1.52573],[36.87,-1.53851],[36.82617,-1.54282],[36.78234,-1.53851],[36.7402,-1.52573],[36.70136,-1.50497],[36.66732,-1.47704],[36.63938,-1.44301],[36.61863,-1.40418],[36.60585,-1.36205],[36.60153,-1.31823],[36.60585,-1.27442],[36.61864,-1.23229],[36.6394,-1.19347],[36.66734,-1.15944],[36.70138,-1.13151],[36.74021,-1.11076],[36.78235,-1.09798],[36.82617,-1.09366]]]}},"African-Methodist-Episcopal-University":{type:"Feature",id:"African-Methodist-Episcopal-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-10.80063,6.53533],[-10.75653,6.53101],[-10.71413,6.51823],[-10.67505,6.49747],[-10.64081,6.46953],[-10.61272,6.43549],[-10.59185,6.39665],[-10.579,6.35452],[-10.57468,6.3107],[-10.57904,6.26689],[-10.59192,6.22477],[-10.61281,6.18595],[-10.64091,6.15193],[-10.67514,6.12401],[-10.7142,6.10326],[-10.75657,6.09049],[-10.80063,6.08617],[-10.84469,6.09049],[-10.88706,6.10326],[-10.92612,6.12401],[-10.96035,6.15193],[-10.98845,6.18595],[-11.00934,6.22477],[-11.02222,6.26689],[-11.02658,6.3107],[-11.02226,6.35452],[-11.00941,6.39665],[-10.98854,6.43549],[-10.96045,6.46953],[-10.92621,6.49747],[-10.88713,6.51823],[-10.84473,6.53101],[-10.80063,6.53533]]]}},"Cuttington-University":{type:"Feature",id:"Cuttington-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-9.5539,7.26498],[-9.50973,7.26066],[-9.46727,7.24788],[-9.42813,7.22711],[-9.39384,7.19917],[-9.3657,7.16513],[-9.3448,7.1263],[-9.33194,7.08416],[-9.32762,7.04035],[-9.33198,6.99653],[-9.34488,6.95441],[-9.3658,6.91559],[-9.39395,6.88157],[-9.42823,6.85365],[-9.46734,6.83291],[-9.50977,6.82013],[-9.5539,6.81582],[-9.59803,6.82013],[-9.64046,6.83291],[-9.67957,6.85365],[-9.71385,6.88157],[-9.742,6.91559],[-9.76292,6.95441],[-9.77582,6.99653],[-9.78018,7.04035],[-9.77586,7.08416],[-9.763,7.1263],[-9.7421,7.16513],[-9.71396,7.19917],[-9.67967,7.22711],[-9.64053,7.24788],[-9.59807,7.26066],[-9.5539,7.26498]]]}},"Grand-Gedeh-County-Community-College":{type:"Feature",id:"Grand-Gedeh-County-Community-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-8.11817,6.28853],[-8.07409,6.28421],[-8.03171,6.27143],[-7.99266,6.25066],[-7.95843,6.22273],[-7.93035,6.18869],[-7.90949,6.14985],[-7.89665,6.10772],[-7.89233,6.0639],[-7.89669,6.02009],[-7.90955,5.97797],[-7.93043,5.93915],[-7.95852,5.90512],[-7.99274,5.8772],[-8.03178,5.85646],[-8.07413,5.84368],[-8.11817,5.83937],[-8.16221,5.84368],[-8.20456,5.85646],[-8.2436,5.8772],[-8.27782,5.90512],[-8.30591,5.93915],[-8.32679,5.97797],[-8.33966,6.02009],[-8.34401,6.0639],[-8.33969,6.10772],[-8.32686,6.14985],[-8.306,6.18869],[-8.27791,6.22273],[-8.24369,6.25066],[-8.20463,6.27143],[-8.16225,6.28421],[-8.11817,6.28853]]]}},"Nimba-County-Community-College":{type:"Feature",id:"Nimba-County-Community-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-8.71645,7.57669],[-8.67226,7.57237],[-8.62976,7.55959],[-8.5906,7.53882],[-8.55628,7.51088],[-8.52812,7.47684],[-8.50721,7.438],[-8.49434,7.39587],[-8.49001,7.35205],[-8.49439,7.30824],[-8.50729,7.26612],[-8.52823,7.2273],[-8.55639,7.19328],[-8.5907,7.16536],[-8.62984,7.14462],[-8.6723,7.13185],[-8.71645,7.12753],[-8.76061,7.13185],[-8.80307,7.14462],[-8.84221,7.16536],[-8.87652,7.19328],[-8.90468,7.2273],[-8.92562,7.26612],[-8.93852,7.30824],[-8.9429,7.35205],[-8.93857,7.39587],[-8.9257,7.438],[-8.90479,7.47684],[-8.87663,7.51088],[-8.84231,7.53882],[-8.80315,7.55959],[-8.76065,7.57237],[-8.71645,7.57669]]]}},"Stella-Maris-Polytechnic":{type:"Feature",id:"Stella-Maris-Polytechnic",properties:{},geometry:{type:"Polygon",coordinates:[[[-10.7944,6.51458],[-10.7503,6.51026],[-10.7079,6.49748],[-10.66883,6.47672],[-10.63459,6.44878],[-10.60649,6.41474],[-10.58562,6.3759],[-10.57278,6.33377],[-10.56846,6.28995],[-10.57282,6.24614],[-10.58569,6.20402],[-10.60658,6.1652],[-10.63469,6.13117],[-10.66892,6.10325],[-10.70797,6.08251],[-10.75034,6.06973],[-10.7944,6.06542],[-10.83846,6.06973],[-10.88083,6.08251],[-10.91988,6.10325],[-10.95411,6.13117],[-10.98222,6.1652],[-11.00311,6.20402],[-11.01598,6.24614],[-11.02034,6.28995],[-11.01602,6.33377],[-11.00318,6.3759],[-10.98231,6.41474],[-10.95421,6.44878],[-10.91997,6.47672],[-10.8809,6.49748],[-10.8385,6.51026],[-10.7944,6.51458]]]}},"University-of-Liberia-YouthMappers":{type:"Feature",id:"University-of-Liberia-YouthMappers",properties:{},geometry:{type:"Polygon",coordinates:[[[-10.61986,6.60165],[-10.57576,6.59733],[-10.53335,6.58454],[-10.49427,6.56378],[-10.46002,6.53584],[-10.43192,6.5018],[-10.41105,6.46297],[-10.39821,6.42083],[-10.39389,6.37702],[-10.39825,6.33321],[-10.41112,6.29108],[-10.43202,6.25226],[-10.46012,6.21824],[-10.49436,6.19032],[-10.53342,6.16958],[-10.5758,6.1568],[-10.61986,6.15249],[-10.66393,6.1568],[-10.70631,6.16958],[-10.74536,6.19032],[-10.7796,6.21824],[-10.80771,6.25226],[-10.8286,6.29108],[-10.84148,6.33321],[-10.84584,6.37702],[-10.84152,6.42083],[-10.82867,6.46297],[-10.8078,6.5018],[-10.7797,6.53584],[-10.74546,6.56378],[-10.70638,6.58454],[-10.66397,6.59733],[-10.61986,6.60165]]]}},madagascar:{type:"Feature",id:"madagascar",properties:{},geometry:{type:"Polygon",coordinates:[[[51,-15],[47.5,-26],[42,-26],[43.5,-16],[49.5,-11],[51,-15]]]}},"University-of-Malawi":{type:"Feature",id:"University-of-Malawi",properties:{},geometry:{type:"Polygon",coordinates:[[[35.33203,-15.14437],[35.37742,-15.14868],[35.42107,-15.16145],[35.46131,-15.18218],[35.4966,-15.21009],[35.52557,-15.2441],[35.54712,-15.2829],[35.56042,-15.32502],[35.56494,-15.36883],[35.56051,-15.41265],[35.5473,-15.45479],[35.5258,-15.49364],[35.49685,-15.52769],[35.46154,-15.55564],[35.42125,-15.57642],[35.37752,-15.58921],[35.33203,-15.59353],[35.28654,-15.58921],[35.24281,-15.57642],[35.20252,-15.55564],[35.16721,-15.52769],[35.13826,-15.49364],[35.11676,-15.45479],[35.10355,-15.41265],[35.09912,-15.36883],[35.10365,-15.32502],[35.11694,-15.2829],[35.13849,-15.2441],[35.16747,-15.21009],[35.20275,-15.18218],[35.24299,-15.16145],[35.28664,-15.14868],[35.33203,-15.14437]]]}},"Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{type:"Feature",id:"Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",properties:{},geometry:{type:"Polygon",coordinates:[[[-7.98832,12.83993],[-7.94339,12.83562],[-7.90018,12.82283],[-7.86037,12.80206],[-7.82549,12.77411],[-7.79688,12.74006],[-7.77564,12.70121],[-7.76257,12.65907],[-7.75819,12.61526],[-7.76265,12.57145],[-7.77578,12.52933],[-7.79707,12.49052],[-7.82569,12.45651],[-7.86056,12.4286],[-7.90033,12.40786],[-7.94347,12.39509],[-7.98832,12.39078],[-8.03318,12.39509],[-8.07632,12.40786],[-8.11609,12.4286],[-8.15095,12.45651],[-8.17958,12.49052],[-8.20087,12.52933],[-8.214,12.57145],[-8.21846,12.61526],[-8.21408,12.65907],[-8.20101,12.70121],[-8.17977,12.74006],[-8.15116,12.77411],[-8.11627,12.80206],[-8.07646,12.82283],[-8.03326,12.83562],[-7.98832,12.83993]]]}},"Universidade-Eduardo-Mondlane":{type:"Feature",id:"Universidade-Eduardo-Mondlane",properties:{},geometry:{type:"Polygon",coordinates:[[[32.60357,-25.72761],[32.65221,-25.73192],[32.69898,-25.74467],[32.74211,-25.76539],[32.77994,-25.79328],[32.81102,-25.82727],[32.83416,-25.86606],[32.84845,-25.90817],[32.85334,-25.95197],[32.84863,-25.99579],[32.83449,-26.03795],[32.81146,-26.07681],[32.78042,-26.11088],[32.74255,-26.13885],[32.69932,-26.15964],[32.65239,-26.17244],[32.60357,-26.17677],[32.55475,-26.17244],[32.50782,-26.15964],[32.46459,-26.13885],[32.42672,-26.11088],[32.39568,-26.07681],[32.37265,-26.03795],[32.35851,-25.99579],[32.35381,-25.95197],[32.3587,-25.90817],[32.37299,-25.86606],[32.39612,-25.82727],[32.4272,-25.79328],[32.46503,-25.76539],[32.50816,-25.74467],[32.55493,-25.73192],[32.60357,-25.72761]]]}},"Namibia-University-of-Science-and-Technology":{type:"Feature",id:"Namibia-University-of-Science-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[17.07709,-22.34124],[17.12446,-22.34555],[17.17002,-22.35831],[17.21202,-22.37903],[17.24886,-22.40692],[17.27912,-22.44092],[17.30164,-22.47972],[17.31554,-22.52183],[17.32029,-22.56563],[17.31569,-22.60945],[17.30192,-22.6516],[17.27949,-22.69046],[17.24926,-22.72453],[17.21239,-22.75249],[17.1703,-22.77327],[17.12461,-22.78607],[17.07709,-22.79039],[17.02957,-22.78607],[16.98388,-22.77327],[16.94179,-22.75249],[16.90493,-22.72453],[16.8747,-22.69046],[16.85226,-22.6516],[16.83849,-22.60945],[16.83389,-22.56563],[16.83864,-22.52183],[16.85255,-22.47972],[16.87506,-22.44092],[16.90532,-22.40692],[16.94216,-22.37903],[16.98416,-22.35831],[17.02972,-22.34555],[17.07709,-22.34124]]]}},"Abia-State-University":{type:"Feature",id:"Abia-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[7.41909,6.0554],[7.46315,6.05108],[7.50551,6.0383],[7.54455,6.01753],[7.57877,5.9896],[7.60684,5.95556],[7.62769,5.91672],[7.64052,5.87459],[7.64484,5.83077],[7.64048,5.78696],[7.62762,5.74484],[7.60675,5.70602],[7.57868,5.67199],[7.54447,5.64407],[7.50545,5.62333],[7.46312,5.61055],[7.41909,5.60624],[7.37507,5.61055],[7.33274,5.62333],[7.29372,5.64407],[7.25951,5.67199],[7.23143,5.70602],[7.21056,5.74484],[7.1977,5.78696],[7.19335,5.83077],[7.19767,5.87459],[7.2105,5.91672],[7.23135,5.95556],[7.25942,5.9896],[7.29363,6.01753],[7.33267,6.0383],[7.37503,6.05108],[7.41909,6.0554]]]}},"Ahmadu-Bello-University":{type:"Feature",id:"Ahmadu-Bello-University",properties:{},geometry:{type:"Polygon",coordinates:[[[7.64648,11.40298],[7.69118,11.39866],[7.73415,11.38587],[7.77375,11.36511],[7.80845,11.33716],[7.83691,11.30311],[7.85804,11.26427],[7.87104,11.22213],[7.87541,11.17831],[7.87097,11.13451],[7.85792,11.09239],[7.83674,11.05357],[7.80827,11.01956],[7.77359,10.99164],[7.73403,10.97091],[7.69111,10.95813],[7.64648,10.95382],[7.60186,10.95813],[7.55894,10.97091],[7.51938,10.99164],[7.4847,11.01956],[7.45622,11.05357],[7.43505,11.09239],[7.422,11.13451],[7.41756,11.17831],[7.42193,11.22213],[7.43493,11.26427],[7.45606,11.30311],[7.48452,11.33716],[7.51922,11.36511],[7.55882,11.38587],[7.60179,11.39866],[7.64648,11.40298]]]}},"Federal-School-of-Surveys":{type:"Feature",id:"Federal-School-of-Surveys",properties:{},geometry:{type:"Polygon",coordinates:[[[3.95129,8.06678],[3.99554,8.06247],[4.03808,8.04968],[4.07729,8.02892],[4.11165,8.00098],[4.13984,7.96693],[4.16077,7.9281],[4.17365,7.88596],[4.17798,7.84215],[4.17361,7.79833],[4.16069,7.75621],[4.13972,7.7174],[4.11153,7.68337],[4.07718,7.65546],[4.038,7.63471],[3.99549,7.62194],[3.95129,7.61763],[3.90708,7.62194],[3.86457,7.63471],[3.82539,7.65546],[3.79105,7.68337],[3.76285,7.7174],[3.74189,7.75621],[3.72897,7.79833],[3.72459,7.84215],[3.72892,7.88596],[3.7418,7.9281],[3.76274,7.96693],[3.79092,8.00098],[3.82528,8.02892],[3.86449,8.04968],[3.90704,8.06247],[3.95129,8.06678]]]}},"Federal-University-of-Technology-Akure":{type:"Feature",id:"Federal-University-of-Technology-Akure",properties:{},geometry:{type:"Polygon",coordinates:[[[5.18555,7.49987],[5.22974,7.49555],[5.27223,7.48277],[5.31138,7.46201],[5.34569,7.43407],[5.37385,7.40002],[5.39475,7.36119],[5.40762,7.31905],[5.41195,7.27524],[5.40758,7.23143],[5.39467,7.1893],[5.37374,7.15048],[5.34558,7.11646],[5.31128,7.08854],[5.27215,7.0678],[5.22969,7.05503],[5.18555,7.05071],[5.1414,7.05503],[5.09895,7.0678],[5.05982,7.08854],[5.02551,7.11646],[4.99735,7.15048],[4.97642,7.1893],[4.96352,7.23143],[4.95915,7.27524],[4.96347,7.31905],[4.97634,7.36119],[4.99725,7.40002],[5.0254,7.43407],[5.05971,7.46201],[5.09887,7.48277],[5.14136,7.49555],[5.18555,7.49987]]]}},"Ignatius-Ajuru-University-of-Education":{type:"Feature",id:"Ignatius-Ajuru-University-of-Education",properties:{},geometry:{type:"Polygon",coordinates:[[[6.93364,5.03111],[6.97762,5.02679],[7.01991,5.01401],[7.05888,4.99325],[7.09304,4.96531],[7.12106,4.93127],[7.14188,4.89244],[7.15469,4.85031],[7.15901,4.80649],[7.15466,4.76268],[7.14183,4.72056],[7.12099,4.68174],[7.09296,4.64771],[7.05881,4.61979],[7.01986,4.59904],[6.97759,4.58627],[6.93364,4.58195],[6.88968,4.58627],[6.84742,4.59904],[6.80846,4.61979],[6.77431,4.64771],[6.74628,4.68174],[6.72545,4.72056],[6.71261,4.76268],[6.70826,4.80649],[6.71258,4.85031],[6.72539,4.89244],[6.74621,4.93127],[6.77424,4.96531],[6.80839,4.99325],[6.84736,5.01401],[6.88965,5.02679],[6.93364,5.03111]]]}},"University-of-Nigeria-Nsukka":{type:"Feature",id:"University-of-Nigeria-Nsukka",properties:{},geometry:{type:"Polygon",coordinates:[[[7.40821,7.08921],[7.45236,7.0849],[7.49481,7.07211],[7.53393,7.05135],[7.56821,7.02341],[7.59634,6.98937],[7.61723,6.95053],[7.63008,6.9084],[7.63441,6.86458],[7.63004,6.82077],[7.61715,6.77865],[7.59624,6.73983],[7.5681,6.70581],[7.53383,6.67789],[7.49473,6.65714],[7.45232,6.64437],[7.40821,6.64006],[7.3641,6.64437],[7.32168,6.65714],[7.28259,6.67789],[7.24831,6.70581],[7.22018,6.73983],[7.19926,6.77865],[7.18637,6.82077],[7.18201,6.86458],[7.18633,6.9084],[7.19919,6.95053],[7.22008,6.98937],[7.24821,7.02341],[7.28249,7.05135],[7.32161,7.07211],[7.36406,7.0849],[7.40821,7.08921]]]}},"University-of-Port-Harcourt":{type:"Feature",id:"University-of-Port-Harcourt",properties:{},geometry:{type:"Polygon",coordinates:[[[6.92037,5.12633],[6.96436,5.12201],[7.00665,5.10923],[7.04563,5.08847],[7.07979,5.06053],[7.10782,5.02649],[7.12864,4.98766],[7.14145,4.94553],[7.14577,4.90171],[7.14142,4.8579],[7.12859,4.81578],[7.10775,4.77696],[7.07971,4.74293],[7.04556,4.71501],[7.0066,4.69426],[6.96433,4.68149],[6.92037,4.67717],[6.87641,4.68149],[6.83414,4.69426],[6.79517,4.71501],[6.76102,4.74293],[6.73299,4.77696],[6.71215,4.81578],[6.69931,4.8579],[6.69496,4.90171],[6.69928,4.94553],[6.71209,4.98766],[6.73292,5.02649],[6.76094,5.06053],[6.7951,5.08847],[6.83408,5.10923],[6.87638,5.12201],[6.92037,5.12633]]]}},"University-of-Nigeria-Enugu-Campus":{type:"Feature",id:"University-of-Nigeria-Enugu-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[7.50373,6.651],[7.54784,6.64668],[7.59025,6.63389],[7.62934,6.61313],[7.66359,6.58519],[7.69169,6.55115],[7.71256,6.51232],[7.72541,6.47018],[7.72973,6.42637],[7.72537,6.38256],[7.71249,6.34043],[7.6916,6.30161],[7.66349,6.26759],[7.62924,6.23967],[7.59018,6.21893],[7.5478,6.20615],[7.50373,6.20184],[7.45966,6.20615],[7.41728,6.21893],[7.37822,6.23967],[7.34398,6.26759],[7.31587,6.30161],[7.29497,6.34043],[7.28209,6.38256],[7.27773,6.42637],[7.28206,6.47018],[7.2949,6.51232],[7.31577,6.55115],[7.34388,6.58519],[7.37813,6.61313],[7.41721,6.63389],[7.45962,6.64668],[7.50373,6.651]]]}},"Insititue-d-Enseignement-Superieur-de-Ruhengeri":{type:"Feature",id:"Insititue-d-Enseignement-Superieur-de-Ruhengeri",properties:{},geometry:{type:"Polygon",coordinates:[[[29.6112,-1.27634],[29.65502,-1.28065],[29.69717,-1.29343],[29.736,-1.31418],[29.77005,-1.34211],[29.79799,-1.37614],[29.81875,-1.41496],[29.83154,-1.45709],[29.83586,-1.5009],[29.83154,-1.54472],[29.81876,-1.58685],[29.79801,-1.62568],[29.77007,-1.65971],[29.73602,-1.68764],[29.69718,-1.7084],[29.65503,-1.72118],[29.6112,-1.72549],[29.56737,-1.72118],[29.52522,-1.7084],[29.48638,-1.68764],[29.45233,-1.65971],[29.4244,-1.62568],[29.40364,-1.58685],[29.39086,-1.54472],[29.38655,-1.5009],[29.39087,-1.45709],[29.40365,-1.41496],[29.42442,-1.37614],[29.45236,-1.34211],[29.4864,-1.31418],[29.52524,-1.29343],[29.56738,-1.28065],[29.6112,-1.27634]]]}},"University-of-Rwanda-Huye-Campus":{type:"Feature",id:"University-of-Rwanda-Huye-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[29.7397,-2.39052],[29.78355,-2.39484],[29.82572,-2.40761],[29.86458,-2.42836],[29.89865,-2.45629],[29.92661,-2.49032],[29.94739,-2.52914],[29.96019,-2.57127],[29.96451,-2.61508],[29.9602,-2.65889],[29.94741,-2.70103],[29.92664,-2.73986],[29.89869,-2.77389],[29.86462,-2.80182],[29.82575,-2.82258],[29.78357,-2.83536],[29.7397,-2.83968],[29.69583,-2.83536],[29.65365,-2.82258],[29.61478,-2.80182],[29.58071,-2.77389],[29.55276,-2.73986],[29.53199,-2.70103],[29.5192,-2.65889],[29.51489,-2.61508],[29.51921,-2.57127],[29.53201,-2.52914],[29.55279,-2.49032],[29.58075,-2.45629],[29.61482,-2.42836],[29.65368,-2.40761],[29.69585,-2.39484],[29.7397,-2.39052]]]}},"Institut-Suprieur-de-Management-Kolda":{type:"Feature",id:"Institut-Suprieur-de-Management-Kolda",properties:{},geometry:{type:"Polygon",coordinates:[[[-14.94108,13.11445],[-14.8961,13.11013],[-14.85285,13.09734],[-14.81299,13.07657],[-14.77807,13.04862],[-14.74943,13.01457],[-14.72816,12.97573],[-14.71509,12.93359],[-14.7107,12.88977],[-14.71517,12.84596],[-14.72831,12.80384],[-14.74962,12.76503],[-14.77828,12.73102],[-14.81319,12.70311],[-14.85299,12.68237],[-14.89618,12.66961],[-14.94108,12.66529],[-14.98599,12.66961],[-15.02918,12.68237],[-15.06898,12.70311],[-15.10389,12.73102],[-15.13255,12.76503],[-15.15386,12.80384],[-15.167,12.84596],[-15.17147,12.88977],[-15.16708,12.93359],[-15.15401,12.97573],[-15.13274,13.01457],[-15.1041,13.04862],[-15.06918,13.07657],[-15.02932,13.09734],[-14.98607,13.11013],[-14.94108,13.11445]]]}},"Universit-Gaston-Berger":{type:"Feature",id:"Universit-Gaston-Berger",properties:{},geometry:{type:"Polygon",coordinates:[[[-16.42556,16.28748],[-16.37992,16.28316],[-16.33604,16.27037],[-16.2956,16.2496],[-16.26018,16.22164],[-16.23112,16.18759],[-16.20956,16.14874],[-16.1963,16.1066],[-16.19186,16.06278],[-16.1964,16.01897],[-16.20974,15.97685],[-16.23137,15.93805],[-16.26044,15.90404],[-16.29585,15.87614],[-16.33622,15.8554],[-16.38002,15.84264],[-16.42556,15.83833],[-16.47111,15.84264],[-16.51491,15.8554],[-16.55528,15.87614],[-16.59069,15.90404],[-16.61976,15.93805],[-16.64138,15.97685],[-16.65473,16.01897],[-16.65927,16.06278],[-16.65483,16.1066],[-16.64157,16.14874],[-16.62,16.18759],[-16.59095,16.22164],[-16.55552,16.2496],[-16.51509,16.27037],[-16.47121,16.28316],[-16.42556,16.28748]]]}},"Fourah-Bay-College":{type:"Feature",id:"Fourah-Bay-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-13.18359,8.71868],[-13.13927,8.71437],[-13.09665,8.70158],[-13.05738,8.68081],[-13.02296,8.65287],[-12.99473,8.61883],[-12.97376,8.57999],[-12.96086,8.53785],[-12.95652,8.49404],[-12.96091,8.45023],[-12.97386,8.40811],[-12.99485,8.36929],[-13.0231,8.33527],[-13.0575,8.30735],[-13.09674,8.28661],[-13.13932,8.27384],[-13.18359,8.26953],[-13.22787,8.27384],[-13.27044,8.28661],[-13.30969,8.30735],[-13.34409,8.33527],[-13.37233,8.36929],[-13.39333,8.40811],[-13.40627,8.45023],[-13.41066,8.49404],[-13.40633,8.53785],[-13.39343,8.57999],[-13.37246,8.61883],[-13.34422,8.65287],[-13.30981,8.68081],[-13.27054,8.70158],[-13.22792,8.71437],[-13.18359,8.71868]]]}},"Njala-University-Freetown-Campus":{type:"Feature",id:"Njala-University-Freetown-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[-13.23673,8.7042],[-13.19241,8.69988],[-13.14979,8.68709],[-13.11052,8.66633],[-13.07611,8.63839],[-13.04787,8.60434],[-13.02691,8.5655],[-13.01401,8.52337],[-13.00967,8.47955],[-13.01406,8.43574],[-13.027,8.39362],[-13.048,8.3548],[-13.07624,8.32078],[-13.11064,8.29287],[-13.14988,8.27212],[-13.19246,8.25935],[-13.23673,8.25504],[-13.281,8.25935],[-13.32358,8.27212],[-13.36282,8.29287],[-13.39722,8.32078],[-13.42546,8.3548],[-13.44646,8.39362],[-13.4594,8.43574],[-13.46379,8.47955],[-13.45945,8.52337],[-13.44655,8.5655],[-13.42559,8.60434],[-13.39735,8.63839],[-13.36294,8.66633],[-13.32367,8.68709],[-13.28105,8.69988],[-13.23673,8.7042]]]}},"Njala-University-Njala-Campus":{type:"Feature",id:"Njala-University-Njala-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[-11.76548,8.16057],[-11.72122,8.15625],[-11.67867,8.14347],[-11.63945,8.1227],[-11.60508,8.09476],[-11.57689,8.06072],[-11.55595,8.02188],[-11.54307,7.97975],[-11.53873,7.93593],[-11.54311,7.89212],[-11.55604,7.85],[-11.577,7.81118],[-11.60521,7.77716],[-11.63956,7.74924],[-11.67875,7.7285],[-11.72127,7.71573],[-11.76548,7.71141],[-11.8097,7.71573],[-11.85221,7.7285],[-11.8914,7.74924],[-11.92576,7.77716],[-11.95396,7.81118],[-11.97493,7.85],[-11.98785,7.89212],[-11.99223,7.93593],[-11.9879,7.97975],[-11.97502,8.02188],[-11.95408,8.06072],[-11.92588,8.09476],[-11.89152,8.1227],[-11.8523,8.14347],[-11.80974,8.15625],[-11.76548,8.16057]]]}},"University-of-Pretoria":{type:"Feature",id:"University-of-Pretoria",properties:{},geometry:{type:"Polygon",coordinates:[[[28.21289,-25.49616],[28.26143,-25.50046],[28.30812,-25.51322],[28.35116,-25.53394],[28.38892,-25.56183],[28.41994,-25.59582],[28.44303,-25.63461],[28.45729,-25.67672],[28.46217,-25.72052],[28.45747,-25.76434],[28.44336,-25.8065],[28.42037,-25.84536],[28.38939,-25.87943],[28.3516,-25.9074],[28.30845,-25.92819],[28.26161,-25.94099],[28.21289,-25.94531],[28.16417,-25.94099],[28.11733,-25.92819],[28.07418,-25.9074],[28.03639,-25.87943],[28.00541,-25.84536],[27.98242,-25.8065],[27.96831,-25.76434],[27.96361,-25.72052],[27.96849,-25.67672],[27.98275,-25.63461],[28.00584,-25.59582],[28.03686,-25.56183],[28.07462,-25.53394],[28.11766,-25.51322],[28.16435,-25.50046],[28.21289,-25.49616]]]}},"Ardhi-University":{type:"Feature",id:"Ardhi-University",properties:{},geometry:{type:"Polygon",coordinates:[[[39.21541,-6.54158],[39.25951,-6.54589],[39.30192,-6.55867],[39.34101,-6.57941],[39.37527,-6.60733],[39.4034,-6.64135],[39.42431,-6.68017],[39.4372,-6.72229],[39.44156,-6.7661],[39.43724,-6.80992],[39.42439,-6.85205],[39.4035,-6.89089],[39.37538,-6.92493],[39.3411,-6.95287],[39.30199,-6.97363],[39.25955,-6.98642],[39.21541,-6.99074],[39.17127,-6.98642],[39.12883,-6.97363],[39.08972,-6.95287],[39.05544,-6.92493],[39.02732,-6.89089],[39.00643,-6.85205],[38.99358,-6.80992],[38.98926,-6.7661],[38.99362,-6.72229],[39.00651,-6.68017],[39.02742,-6.64135],[39.05555,-6.60733],[39.08981,-6.57941],[39.1289,-6.55867],[39.17131,-6.54589],[39.21541,-6.54158]]]}},"Institute-of-Finance-Management":{type:"Feature",id:"Institute-of-Finance-Management",properties:{},geometry:{type:"Polygon",coordinates:[[[39.2935,-5.91323],[39.33755,-5.91754],[39.3799,-5.93032],[39.41894,-5.95107],[39.45317,-5.97899],[39.48126,-6.01301],[39.50215,-6.05183],[39.51501,-6.09395],[39.51937,-6.13776],[39.51505,-6.18158],[39.50221,-6.22371],[39.48135,-6.26255],[39.45326,-6.29659],[39.41903,-6.32453],[39.37997,-6.34529],[39.33758,-6.35807],[39.2935,-6.36239],[39.24941,-6.35807],[39.20703,-6.34529],[39.16797,-6.32453],[39.13373,-6.29659],[39.10565,-6.26255],[39.08479,-6.22371],[39.07195,-6.18158],[39.06763,-6.13776],[39.07198,-6.09395],[39.08485,-6.05183],[39.10574,-6.01301],[39.13383,-5.97899],[39.16805,-5.95107],[39.20709,-5.93032],[39.24945,-5.91754],[39.2935,-5.91323]]]}},"Institute-of-Rural-Development-Planning-Mwanza":{type:"Feature",id:"Institute-of-Rural-Development-Planning-Mwanza",properties:{},geometry:{type:"Polygon",coordinates:[[[32.89851,-2.29201],[32.94236,-2.29632],[32.98452,-2.3091],[33.02338,-2.32985],[33.05745,-2.35778],[33.08541,-2.3918],[33.10618,-2.43063],[33.11898,-2.47275],[33.12331,-2.51657],[33.119,-2.56038],[33.10621,-2.60251],[33.08544,-2.64134],[33.05749,-2.67538],[33.02342,-2.70331],[32.98455,-2.72407],[32.94238,-2.73685],[32.89851,-2.74116],[32.85465,-2.73685],[32.81247,-2.72407],[32.7736,-2.70331],[32.73954,-2.67538],[32.71158,-2.64134],[32.69081,-2.60251],[32.67803,-2.56038],[32.67372,-2.51657],[32.67804,-2.47275],[32.69084,-2.43063],[32.71162,-2.3918],[32.73958,-2.35778],[32.77364,-2.32985],[32.8125,-2.3091],[32.85466,-2.29632],[32.89851,-2.29201]]]}},"Institute-of-Rural-Development-Planning":{type:"Feature",id:"Institute-of-Rural-Development-Planning",properties:{},geometry:{type:"Polygon",coordinates:[[[35.74578,-5.89759],[35.78983,-5.9019],[35.83218,-5.91468],[35.87122,-5.93543],[35.90545,-5.96335],[35.93354,-5.99737],[35.95442,-6.03619],[35.96729,-6.07831],[35.97165,-6.12212],[35.96733,-6.16594],[35.95449,-6.20807],[35.93363,-6.24691],[35.90554,-6.28095],[35.87131,-6.30889],[35.83225,-6.32965],[35.78986,-6.34243],[35.74578,-6.34675],[35.7017,-6.34243],[35.65931,-6.32965],[35.62025,-6.30889],[35.58602,-6.28095],[35.55794,-6.24691],[35.53707,-6.20807],[35.52424,-6.16594],[35.51992,-6.12212],[35.52427,-6.07831],[35.53714,-6.03619],[35.55802,-5.99737],[35.58612,-5.96335],[35.62034,-5.93543],[35.65938,-5.91468],[35.70174,-5.9019],[35.74578,-5.89759]]]}},"Open-University-of-Tanzania":{type:"Feature",id:"Open-University-of-Tanzania",properties:{},geometry:{type:"Polygon",coordinates:[[[39.26466,-6.55895],[39.30876,-6.56326],[39.35117,-6.57603],[39.39026,-6.59678],[39.42453,-6.6247],[39.45266,-6.65872],[39.47357,-6.69754],[39.48646,-6.73966],[39.49082,-6.78347],[39.4865,-6.82729],[39.47364,-6.86942],[39.45275,-6.90826],[39.42463,-6.9423],[39.39036,-6.97024],[39.35125,-6.991],[39.3088,-7.00379],[39.26466,-7.0081],[39.22052,-7.00379],[39.17807,-6.991],[39.13896,-6.97024],[39.10469,-6.9423],[39.07656,-6.90826],[39.05568,-6.86942],[39.04282,-6.82729],[39.0385,-6.78347],[39.04286,-6.73966],[39.05575,-6.69754],[39.07666,-6.65872],[39.10479,-6.6247],[39.13906,-6.59678],[39.17815,-6.57603],[39.22056,-6.56326],[39.26466,-6.55895]]]}},"Sokoine-University-of-Agriculture":{type:"Feature",id:"Sokoine-University-of-Agriculture",properties:{},geometry:{type:"Polygon",coordinates:[[[37.65636,-6.62796],[37.70047,-6.63227],[37.74288,-6.64505],[37.78198,-6.66579],[37.81625,-6.69371],[37.84439,-6.72773],[37.8653,-6.76655],[37.87819,-6.80868],[37.88255,-6.85249],[37.87823,-6.8963],[37.86537,-6.93844],[37.84448,-6.97727],[37.81636,-7.01131],[37.78208,-7.03925],[37.74296,-7.06002],[37.70051,-7.0728],[37.65636,-7.07712],[37.61221,-7.0728],[37.56976,-7.06002],[37.53064,-7.03925],[37.49636,-7.01131],[37.46824,-6.97727],[37.44735,-6.93844],[37.43449,-6.8963],[37.43017,-6.85249],[37.43453,-6.80868],[37.44742,-6.76655],[37.46833,-6.72773],[37.49647,-6.69371],[37.53074,-6.66579],[37.56984,-6.64505],[37.61225,-6.63227],[37.65636,-6.62796]]]}},"University-of-Dar-es-Salaam":{type:"Feature",id:"University-of-Dar-es-Salaam",properties:{},geometry:{type:"Polygon",coordinates:[[[39.20531,-6.55579],[39.24941,-6.56011],[39.29182,-6.57288],[39.33091,-6.59363],[39.36518,-6.62155],[39.39331,-6.65557],[39.41422,-6.69439],[39.42711,-6.73651],[39.43147,-6.78032],[39.42715,-6.82414],[39.41429,-6.86627],[39.39341,-6.90511],[39.36528,-6.93915],[39.33101,-6.96709],[39.2919,-6.98785],[39.24945,-7.00063],[39.20531,-7.00495],[39.16117,-7.00063],[39.11873,-6.98785],[39.07961,-6.96709],[39.04534,-6.93915],[39.01722,-6.90511],[38.99633,-6.86627],[38.98348,-6.82414],[38.97915,-6.78032],[38.98352,-6.73651],[38.9964,-6.69439],[39.01731,-6.65557],[39.04544,-6.62155],[39.07971,-6.59363],[39.1188,-6.57288],[39.16121,-6.56011],[39.20531,-6.55579]]]}},"Busitema-University":{type:"Feature",id:"Busitema-University",properties:{},geometry:{type:"Polygon",coordinates:[[[34.01367,0.75192],[34.05749,0.7476],[34.09962,0.73482],[34.13845,0.71407],[34.17248,0.68614],[34.20041,0.6521],[34.22117,0.61328],[34.23395,0.57115],[34.23826,0.52733],[34.23394,0.48352],[34.22116,0.44139],[34.20041,0.40256],[34.17248,0.36853],[34.13844,0.3406],[34.09962,0.31985],[34.05749,0.30707],[34.01367,0.30276],[33.96986,0.30707],[33.92773,0.31985],[33.8889,0.3406],[33.85487,0.36853],[33.82694,0.40256],[33.80618,0.44139],[33.7934,0.48352],[33.78908,0.52733],[33.7934,0.57115],[33.80618,0.61328],[33.82693,0.6521],[33.85486,0.68614],[33.88889,0.71407],[33.92772,0.73482],[33.96986,0.7476],[34.01367,0.75192]]]}},"Gulu-University":{type:"Feature",id:"Gulu-University",properties:{},geometry:{type:"Polygon",coordinates:[[[32.34375,3.03595],[32.38762,3.03163],[32.42981,3.01885],[32.46869,2.99809],[32.50276,2.97016],[32.53073,2.93613],[32.5515,2.8973],[32.56429,2.85516],[32.5686,2.81135],[32.56427,2.76754],[32.55147,2.72541],[32.53069,2.68659],[32.50272,2.65256],[32.46865,2.62463],[32.42978,2.60388],[32.38761,2.59111],[32.34375,2.58679],[32.29989,2.59111],[32.25772,2.60388],[32.21885,2.62463],[32.18478,2.65256],[32.15681,2.68659],[32.13603,2.72541],[32.12323,2.76754],[32.1189,2.81135],[32.12321,2.85516],[32.136,2.8973],[32.15677,2.93613],[32.18474,2.97016],[32.21881,2.99809],[32.25769,3.01885],[32.29988,3.03163],[32.34375,3.03595]]]}},"Kumi-University":{type:"Feature",id:"Kumi-University",properties:{},geometry:{type:"Polygon",coordinates:[[[33.83789,1.71855],[33.88172,1.71423],[33.92387,1.70145],[33.96271,1.6807],[33.99676,1.65277],[34.0247,1.61873],[34.04545,1.5799],[34.05823,1.53777],[34.06255,1.49396],[34.05822,1.45015],[34.04544,1.40802],[34.02467,1.36919],[33.99673,1.33516],[33.96269,1.30724],[33.92385,1.28649],[33.88171,1.27371],[33.83789,1.26939],[33.79407,1.27371],[33.75193,1.28649],[33.71309,1.30724],[33.67905,1.33516],[33.65111,1.36919],[33.63034,1.40802],[33.61756,1.45015],[33.61324,1.49396],[33.61755,1.53777],[33.63033,1.5799],[33.65109,1.61873],[33.67902,1.65277],[33.71307,1.6807],[33.75191,1.70145],[33.79406,1.71423],[33.83789,1.71855]]]}},"Makerere-University":{type:"Feature",id:"Makerere-University",properties:{},geometry:{type:"Polygon",coordinates:[[[32.60742,0.57614],[32.65124,0.57182],[32.69337,0.55904],[32.7322,0.53829],[32.76623,0.51036],[32.79416,0.47633],[32.81491,0.4375],[32.82769,0.39537],[32.832,0.35156],[32.82769,0.30774],[32.81491,0.26562],[32.79415,0.22679],[32.76622,0.19276],[32.73219,0.16483],[32.69336,0.14408],[32.65124,0.1313],[32.60742,0.12698],[32.56361,0.1313],[32.52148,0.14408],[32.48265,0.16483],[32.44862,0.19276],[32.42069,0.22679],[32.39994,0.26562],[32.38716,0.30774],[32.38284,0.35156],[32.38715,0.39537],[32.39993,0.4375],[32.42069,0.47633],[32.44861,0.51036],[32.48265,0.53829],[32.52148,0.55904],[32.56361,0.57182],[32.60742,0.57614]]]}},"Mbarara-University-of-Science-and-Technology":{type:"Feature",id:"Mbarara-University-of-Science-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[30.65679,-0.39187],[30.7006,-0.39618],[30.74273,-0.40896],[30.78156,-0.42971],[30.81559,-0.45764],[30.84353,-0.49167],[30.86428,-0.5305],[30.87706,-0.57263],[30.88138,-0.61644],[30.87707,-0.66025],[30.86429,-0.70238],[30.84353,-0.74121],[30.8156,-0.77524],[30.78157,-0.80317],[30.74274,-0.82393],[30.70061,-0.83671],[30.65679,-0.84102],[30.61297,-0.83671],[30.57084,-0.82393],[30.53201,-0.80317],[30.49797,-0.77524],[30.47004,-0.74121],[30.44929,-0.70238],[30.43651,-0.66025],[30.4322,-0.61644],[30.43651,-0.57263],[30.4493,-0.5305],[30.47005,-0.49167],[30.49798,-0.45764],[30.53202,-0.42971],[30.57084,-0.40896],[30.61297,-0.39618],[30.65679,-0.39187]]]}},"St.-Augustine-International-University":{type:"Feature",id:"St.-Augustine-International-University",properties:{},geometry:{type:"Polygon",coordinates:[[[32.62161,0.49696],[32.66543,0.49264],[32.70756,0.47986],[32.74639,0.45911],[32.78042,0.43118],[32.80835,0.39714],[32.8291,0.35832],[32.84188,0.31619],[32.8462,0.27237],[32.84188,0.22856],[32.8291,0.18643],[32.80834,0.14761],[32.78042,0.11357],[32.74638,0.08565],[32.70756,0.06489],[32.66543,0.05211],[32.62161,0.0478],[32.5778,0.05211],[32.53567,0.06489],[32.49684,0.08565],[32.46281,0.11357],[32.43488,0.14761],[32.41413,0.18643],[32.40135,0.22856],[32.39703,0.27237],[32.40135,0.31619],[32.41413,0.35832],[32.43488,0.39714],[32.46281,0.43118],[32.49684,0.45911],[32.53567,0.47986],[32.5778,0.49264],[32.62161,0.49696]]]}},"Uganda-Christian-University-Mbale-Campus":{type:"Feature",id:"Uganda-Christian-University-Mbale-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[34.17487,1.30046],[34.21869,1.29614],[34.26083,1.28336],[34.29967,1.26261],[34.3337,1.23468],[34.36164,1.20064],[34.38239,1.16182],[34.39517,1.11969],[34.39949,1.07587],[34.39517,1.03206],[34.38238,0.98993],[34.36162,0.95111],[34.33369,0.91707],[34.29965,0.88915],[34.26082,0.8684],[34.21868,0.85562],[34.17487,0.8513],[34.13105,0.85562],[34.08891,0.8684],[34.05008,0.88915],[34.01605,0.91707],[33.98811,0.95111],[33.96735,0.98993],[33.95457,1.03206],[33.95025,1.07587],[33.95456,1.11969],[33.96734,1.16182],[33.9881,1.20064],[34.01603,1.23468],[34.05007,1.26261],[34.0889,1.28336],[34.13104,1.29614],[34.17487,1.30046]]]}},"Uganda-Pentecostal-University":{type:"Feature",id:"Uganda-Pentecostal-University",properties:{},geometry:{type:"Polygon",coordinates:[[[30.26621,0.88664],[30.31003,0.88233],[30.35216,0.86955],[30.39099,0.84879],[30.42503,0.82086],[30.45296,0.78683],[30.47371,0.748],[30.48649,0.70587],[30.4908,0.66206],[30.48649,0.61825],[30.4737,0.57612],[30.45295,0.53729],[30.42502,0.50326],[30.39098,0.47533],[30.35215,0.45458],[30.31002,0.4418],[30.26621,0.43749],[30.22239,0.4418],[30.18026,0.45458],[30.14144,0.47533],[30.1074,0.50326],[30.07947,0.53729],[30.05871,0.57612],[30.04593,0.61825],[30.04162,0.66206],[30.04593,0.70587],[30.05871,0.748],[30.07946,0.78683],[30.10739,0.82086],[30.14143,0.84879],[30.18026,0.86955],[30.22239,0.88233],[30.26621,0.88664]]]}},"St.-Mawaggali-Trades-Training-Institute":{type:"Feature",id:"St.-Mawaggali-Trades-Training-Institute",properties:{},geometry:{type:"Polygon",coordinates:[[[26.9671,-16.59033],[27.01282,-16.59464],[27.05679,-16.60741],[27.09732,-16.62814],[27.13286,-16.65604],[27.16204,-16.69005],[27.18376,-16.72886],[27.19715,-16.77097],[27.20171,-16.81478],[27.19726,-16.8586],[27.18395,-16.90074],[27.1623,-16.93959],[27.13314,-16.97365],[27.09757,-17.0016],[27.05698,-17.02238],[27.01293,-17.03517],[26.9671,-17.03949],[26.92128,-17.03517],[26.87722,-17.02238],[26.83663,-17.0016],[26.80107,-16.97365],[26.7719,-16.93959],[26.75025,-16.90074],[26.73695,-16.8586],[26.73249,-16.81478],[26.73705,-16.77097],[26.75045,-16.72886],[26.77216,-16.69005],[26.80135,-16.65604],[26.83689,-16.62814],[26.87742,-16.60741],[26.92138,-16.59464],[26.9671,-16.59033]]]}},"The-University-of-Zambia":{type:"Feature",id:"The-University-of-Zambia",properties:{},geometry:{type:"Polygon",coordinates:[[[28.33027,-15.16737],[28.37567,-15.17168],[28.41932,-15.18445],[28.45957,-15.20518],[28.49485,-15.23309],[28.52383,-15.2671],[28.54538,-15.3059],[28.55868,-15.34802],[28.5632,-15.39183],[28.55878,-15.43565],[28.54556,-15.47779],[28.52406,-15.51664],[28.49511,-15.55069],[28.4598,-15.57864],[28.4195,-15.59942],[28.37576,-15.61221],[28.33027,-15.61653],[28.28478,-15.61221],[28.24104,-15.59942],[28.20074,-15.57864],[28.16544,-15.55069],[28.13648,-15.51664],[28.11498,-15.47779],[28.10177,-15.43565],[28.09734,-15.39183],[28.10186,-15.34802],[28.11516,-15.3059],[28.13671,-15.2671],[28.16569,-15.23309],[28.20098,-15.20518],[28.24122,-15.18445],[28.28488,-15.17168],[28.33027,-15.16737]]]}},"University-of-Zimbabwe":{type:"Feature",id:"University-of-Zimbabwe",properties:{},geometry:{type:"Polygon",coordinates:[[[31.05466,-17.56016],[31.10061,-17.56447],[31.14481,-17.57724],[31.18555,-17.59797],[31.22128,-17.62587],[31.25062,-17.65988],[31.27245,-17.69868],[31.28592,-17.74079],[31.29051,-17.7846],[31.28603,-17.82842],[31.27266,-17.87056],[31.2509,-17.90941],[31.22158,-17.94347],[31.18583,-17.97143],[31.14502,-17.99221],[31.10073,-18.005],[31.05466,-18.00932],[31.00859,-18.005],[30.9643,-17.99221],[30.92349,-17.97143],[30.88774,-17.94347],[30.85842,-17.90941],[30.83666,-17.87056],[30.82328,-17.82842],[30.81881,-17.7846],[30.8234,-17.74079],[30.83687,-17.69868],[30.85869,-17.65988],[30.88803,-17.62587],[30.92376,-17.59797],[30.96451,-17.57724],[31.0087,-17.56447],[31.05466,-17.56016]]]}},afghanistan:{type:"Feature",id:"afghanistan",geometry:{type:"Polygon",coordinates:[[[66.51861,37.36278],[67.07578,37.35614],[67.83,37.14499],[68.13556,37.02312],[68.85945,37.34434],[69.19627,37.15114],[69.51879,37.609],[70.11658,37.58822],[70.27057,37.73516],[70.3763,38.1384],[70.80682,38.48628],[71.34813,38.25891],[71.2394,37.95327],[71.54192,37.90577],[71.44869,37.06564],[71.84464,36.73817],[72.19304,36.94829],[72.63689,37.04756],[73.26006,37.49526],[73.9487,37.42157],[74.98,37.41999],[75.15803,37.13303],[74.57589,37.02084],[74.06755,36.83618],[72.92002,36.72001],[71.84629,36.50994],[71.26235,36.07439],[71.49877,35.65056],[71.61308,35.1532],[71.11502,34.73313],[71.15677,34.34891],[70.8818,33.98886],[69.93054,34.02012],[70.32359,33.35853],[69.68715,33.1055],[69.26252,32.50194],[69.31776,31.90141],[68.92668,31.62019],[68.55693,31.71331],[67.79269,31.58293],[67.68339,31.30315],[66.93889,31.30491],[66.38146,30.7389],[66.34647,29.88794],[65.04686,29.47218],[64.35042,29.56003],[64.148,29.34082],[63.55026,29.46833],[62.54986,29.31857],[60.87425,29.82924],[61.78122,30.73585],[61.69931,31.37951],[60.94194,31.54807],[60.86365,32.18292],[60.53608,32.98127],[60.9637,33.52883],[60.52843,33.67645],[60.80319,34.4041],[61.21082,35.65007],[62.23065,35.27066],[62.98466,35.40404],[63.19354,35.85717],[63.9829,36.00796],[64.54648,36.31207],[64.74611,37.11182],[65.58895,37.30522],[65.74563,37.66116],[66.21738,37.39379],[66.51861,37.36278]]]},properties:{name:"Afghanistan"}},asia_full:{type:"Feature",id:"asia_full",properties:{},geometry:{type:"Polygon",coordinates:[[[51,13.5],[43.5,12.3],[34.25,27.3],[34.9,29.45],[34,31.9],[27,34.7],[25.1,39],[25.6,40.2],[26.33,40.98],[26.33,41.23],[26.63,41.36],[26.58,41.6],[26.32,41.76],[27.2,42.1],[27.55,41.93],[35,43],[38.3,47.6],[38.7,47.7],[38.86,47.86],[39.74,47.82],[40.1,49.6],[38,50],[37.4,50.4],[36.65,50.25],[35.66,50.35],[35.2,51.1],[34.28,51.27],[34.1,51.7],[34.4,51.73],[33.9,52.35],[31.8,52.05],[31.3,53.1],[32.8,53.3],[30.77,54.78],[30.95,55.61],[28.19,56.13],[27.83,57.29],[27.33,57.53],[27.7,57.9],[27.3,58.7],[28.2,59.37],[27.2,60.2],[31.5,62.6],[29,67],[30,67.66],[28.27,68.6],[31,70],[31,90],[180,90],[180,60],[130,7],[130,-0.5],[131.8,-3.5],[132.3,-8],[128,-11.3],[65,-11.3],[51,13.5]]]}},"Asian-University-for-Women":{type:"Feature",id:"Asian-University-for-Women",properties:{},geometry:{type:"Polygon",coordinates:[[[91.8457,22.57465],[91.89315,22.57033],[91.93877,22.55753],[91.98079,22.53675],[92.0176,22.50879],[92.04778,22.47472],[92.07018,22.43586],[92.08393,22.39371],[92.08852,22.34989],[92.08378,22.30609],[92.0699,22.26398],[92.04742,22.22518],[92.01721,22.19118],[91.98043,22.16329],[91.93849,22.14257],[91.893,22.12981],[91.8457,22.1255],[91.79841,22.12981],[91.75292,22.14257],[91.71098,22.16329],[91.6742,22.19118],[91.64399,22.22518],[91.6215,22.26398],[91.60762,22.30609],[91.60288,22.34989],[91.60747,22.39371],[91.62123,22.43586],[91.64362,22.47472],[91.67381,22.50879],[91.71062,22.53675],[91.75264,22.55753],[91.79826,22.57033],[91.8457,22.57465]]]}},BGD:{type:"Feature",id:"BGD",properties:{name:"Bangladesh"},geometry:{type:"Polygon",coordinates:[[[92.67272,22.04124],[92.65226,21.32405],[92.30323,21.47548],[92.36855,20.67088],[92.08289,21.1922],[92.02522,21.70157],[91.83489,22.18294],[91.41709,22.76502],[90.49601,22.80502],[90.58696,22.39279],[90.27297,21.83637],[89.84747,22.03915],[89.70205,21.85712],[89.41886,21.96618],[89.03196,22.05571],[88.87631,22.87915],[88.52977,23.63114],[88.69994,24.23372],[88.08442,24.50166],[88.30637,24.86608],[88.93155,25.23869],[88.20979,25.76807],[88.56305,26.44653],[89.35509,26.01441],[89.83248,25.96508],[89.92069,25.26975],[90.87221,25.1326],[91.7996,25.14743],[92.3762,24.97669],[91.91509,24.13041],[91.46773,24.07264],[91.15896,23.50353],[91.70647,22.98526],[91.86993,23.62435],[92.14603,23.6275],[92.67272,22.04124]]]}},"Dhaka-College":{type:"Feature",id:"Dhaka-College",properties:{},geometry:{type:"Polygon",coordinates:[[[90.35156,23.94959],[90.3995,23.94527],[90.44559,23.93247],[90.48805,23.91168],[90.52524,23.88372],[90.55573,23.84965],[90.57835,23.81079],[90.59224,23.76864],[90.59687,23.72482],[90.59208,23.68101],[90.57805,23.6389],[90.55534,23.60011],[90.52481,23.56611],[90.48766,23.53822],[90.44529,23.5175],[90.39934,23.50474],[90.35156,23.50043],[90.30379,23.50474],[90.25783,23.5175],[90.21547,23.53822],[90.17831,23.56611],[90.14779,23.60011],[90.12507,23.6389],[90.11105,23.68101],[90.10625,23.72482],[90.11088,23.76864],[90.12478,23.81079],[90.1474,23.84965],[90.17789,23.88372],[90.21508,23.91168],[90.25754,23.93247],[90.30362,23.94527],[90.35156,23.94959]]]}},"Dhaka-University":{type:"Feature",id:"Dhaka-University",properties:{},geometry:{type:"Polygon",coordinates:[[[90.35156,23.94959],[90.3995,23.94527],[90.44559,23.93247],[90.48805,23.91168],[90.52524,23.88372],[90.55573,23.84965],[90.57835,23.81079],[90.59224,23.76864],[90.59687,23.72482],[90.59208,23.68101],[90.57805,23.6389],[90.55534,23.60011],[90.52481,23.56611],[90.48766,23.53822],[90.44529,23.5175],[90.39934,23.50474],[90.35156,23.50043],[90.30379,23.50474],[90.25783,23.5175],[90.21547,23.53822],[90.17831,23.56611],[90.14779,23.60011],[90.12507,23.6389],[90.11105,23.68101],[90.10625,23.72482],[90.11088,23.76864],[90.12478,23.81079],[90.1474,23.84965],[90.17789,23.88372],[90.21508,23.91168],[90.25754,23.93247],[90.30362,23.94527],[90.35156,23.94959]]]}},"Eastern-University":{type:"Feature",id:"Eastern-University",properties:{},geometry:{type:"Polygon",coordinates:[[[90.38063,23.96703],[90.42857,23.96271],[90.47466,23.94991],[90.51713,23.92913],[90.55432,23.90116],[90.58482,23.86709],[90.60744,23.82823],[90.62134,23.78608],[90.62597,23.74226],[90.62117,23.69846],[90.60714,23.65635],[90.58443,23.61755],[90.5539,23.58356],[90.51674,23.55567],[90.47437,23.53494],[90.42841,23.52218],[90.38063,23.51788],[90.33284,23.52218],[90.28688,23.53494],[90.24451,23.55567],[90.20735,23.58356],[90.17682,23.61755],[90.15411,23.65635],[90.14008,23.69846],[90.13528,23.74226],[90.13991,23.78608],[90.15381,23.82823],[90.17643,23.86709],[90.20693,23.90116],[90.24412,23.92913],[90.28659,23.94991],[90.33268,23.96271],[90.38063,23.96703]]]}},"Jahangirnagar-University":{type:"Feature",id:"Jahangirnagar-University",properties:{},geometry:{type:"Polygon",coordinates:[[[90.26753,24.10689],[90.31553,24.10257],[90.36167,24.08977],[90.40418,24.06899],[90.44141,24.04102],[90.47194,24.00695],[90.49459,23.96809],[90.5085,23.92594],[90.51314,23.88212],[90.50834,23.83831],[90.49429,23.79621],[90.47155,23.75741],[90.44099,23.72342],[90.40378,23.69552],[90.36137,23.6748],[90.31536,23.66204],[90.26753,23.65774],[90.21969,23.66204],[90.17369,23.6748],[90.13127,23.69552],[90.09407,23.72342],[90.06351,23.75741],[90.04077,23.79621],[90.02672,23.83831],[90.02192,23.88212],[90.02656,23.92594],[90.04046,23.96809],[90.06312,24.00695],[90.09364,24.04102],[90.13088,24.06899],[90.17339,24.08977],[90.21953,24.10257],[90.26753,24.10689]]]}},"Khulna-University":{type:"Feature",id:"Khulna-University",properties:{},geometry:{type:"Polygon",coordinates:[[[89.56055,23.06152],[89.60816,23.0572],[89.65394,23.0444],[89.69611,23.02362],[89.73306,22.99565],[89.76335,22.96159],[89.78582,22.92273],[89.79962,22.88058],[89.80423,22.83676],[89.79947,22.79295],[89.78554,22.75085],[89.76297,22.71205],[89.73265,22.67805],[89.69574,22.65016],[89.65366,22.62944],[89.60801,22.61668],[89.56055,22.61237],[89.51308,22.61668],[89.46744,22.62944],[89.42535,22.65016],[89.38844,22.67805],[89.35812,22.71205],[89.33556,22.75085],[89.32163,22.79295],[89.31687,22.83676],[89.32147,22.88058],[89.33527,22.92273],[89.35775,22.96159],[89.38804,22.99565],[89.42498,23.02362],[89.46715,23.0444],[89.51293,23.0572],[89.56055,23.06152]]]}},"Rajshahi-University-of-Engineering-Technology":{type:"Feature",id:"Rajshahi-University-of-Engineering-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[88.62839,24.58841],[88.67657,24.58409],[88.72289,24.57129],[88.76556,24.5505],[88.80293,24.52253],[88.83358,24.48846],[88.85631,24.4496],[88.87027,24.40745],[88.87492,24.36363],[88.8701,24.31983],[88.856,24.27772],[88.83317,24.23893],[88.8025,24.20493],[88.76515,24.17704],[88.72258,24.15632],[88.6764,24.14356],[88.62839,24.13925],[88.58037,24.14356],[88.5342,24.15632],[88.49162,24.17704],[88.45428,24.20493],[88.4236,24.23893],[88.40077,24.27772],[88.38667,24.31983],[88.38185,24.36363],[88.38651,24.40745],[88.40047,24.4496],[88.4232,24.48846],[88.45384,24.52253],[88.49122,24.5505],[88.53389,24.57129],[88.58021,24.58409],[88.62839,24.58841]]]}},"Sherubtse-College":{type:"Feature",id:"Sherubtse-College",properties:{},geometry:{type:"Polygon",coordinates:[[[91.52369,27.51129],[91.57309,27.50697],[91.62058,27.49416],[91.66432,27.47337],[91.70263,27.4454],[91.73404,27.41133],[91.75734,27.37246],[91.77163,27.33031],[91.77639,27.28649],[91.77144,27.24268],[91.75698,27.20058],[91.73357,27.16179],[91.70212,27.1278],[91.66385,27.09991],[91.62022,27.0792],[91.5729,27.06644],[91.52369,27.06214],[91.47449,27.06644],[91.42717,27.0792],[91.38354,27.09991],[91.34526,27.1278],[91.31382,27.16179],[91.29041,27.20058],[91.27595,27.24268],[91.271,27.28649],[91.27575,27.33031],[91.29005,27.37246],[91.31335,27.41133],[91.34475,27.4454],[91.38307,27.47337],[91.42681,27.49416],[91.4743,27.50697],[91.52369,27.51129]]]}},"Gujarat-University":{type:"Feature",id:"Gujarat-University",properties:{},geometry:{type:"Polygon",coordinates:[[[72.50977,23.22343],[72.55744,23.21911],[72.60327,23.20631],[72.6455,23.18552],[72.68248,23.15756],[72.71281,23.12349],[72.73531,23.08463],[72.74913,23.04248],[72.75374,22.99866],[72.74897,22.95486],[72.73502,22.91275],[72.71243,22.87395],[72.68208,22.83996],[72.64512,22.81206],[72.60299,22.79134],[72.55728,22.77858],[72.50977,22.77427],[72.46225,22.77858],[72.41654,22.79134],[72.37441,22.81206],[72.33745,22.83996],[72.3071,22.87395],[72.28451,22.91275],[72.27056,22.95486],[72.26579,22.99866],[72.2704,23.04248],[72.28422,23.08463],[72.30672,23.12349],[72.33705,23.15756],[72.37403,23.18552],[72.41626,23.20631],[72.46209,23.21911],[72.50977,23.22343]]]}},india_andhrapradesh:{type:"Feature",id:"india_andhrapradesh",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],[85.14492,18.85295],[85.05442,18.77126],[85.01176,18.69225],[84.94947,18.67649],[84.44354,18.21885],[83.98107,17.79763],[83.77893,17.63361],[83.20925,17.15734],[82.8246,16.92714],[82.20846,16.16914],[81.78413,16.05362],[81.60171,16.04774],[80.84225,15.52037],[80.65306,15.4875],[80.54735,15.42991],[80.4922,15.34128],[80.47381,15.25261],[80.48624,15.06582],[80.49835,15.0251],[80.66968,13.56514],[80.26863,13.56255],[80.24181,13.46797],[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]]]}},india_full:{type:"Feature",id:"india_full",properties:{name:"India"},geometry:{type:"MultiPolygon",coordinates:[[[[77.83745,35.49401],[78.91227,34.32194],[78.81109,33.5062],[79.20889,32.99439],[79.17613,32.48378],[78.45845,32.61816],[78.73889,31.51591],[79.72137,30.88272],[81.11126,30.18348],[80.47672,29.72987],[80.08843,28.79447],[81.0572,28.41609],[81.99999,27.92548],[83.30425,27.36451],[84.67502,27.2349],[85.25178,26.7262],[86.02439,26.63098],[87.22747,26.3979],[88.06024,26.41462],[88.1748,26.8104],[88.04313,27.44582],[88.12044,27.87654],[88.73033,28.08686],[88.81425,27.29932],[88.83564,27.09897],[89.74453,26.7194],[90.37328,26.87572],[91.21751,26.80865],[92.03348,26.83831],[92.10371,27.45261],[91.69666,27.77174],[92.50312,27.89688],[93.41335,28.64063],[94.56599,29.27744],[95.4048,29.03172],[96.11768,29.4528],[96.58659,28.83098],[96.24883,28.41103],[97.32711,28.26158],[97.40256,27.88254],[97.05199,27.69906],[97.134,27.08377],[96.41937,27.26459],[95.12477,26.57357],[95.15515,26.00131],[94.60325,25.16249],[94.55266,24.67524],[94.10674,23.85074],[93.32519,24.07856],[93.28633,23.04366],[93.06029,22.70311],[93.16613,22.27846],[92.67272,22.04124],[92.14603,23.6275],[91.86993,23.62435],[91.70647,22.98526],[91.15896,23.50353],[91.46773,24.07264],[91.91509,24.13041],[92.3762,24.97669],[91.7996,25.14743],[90.87221,25.1326],[89.92069,25.26975],[89.83248,25.96508],[89.35509,26.01441],[88.56305,26.44653],[88.20979,25.76807],[88.93155,25.23869],[88.30637,24.86608],[88.08442,24.50166],[88.69994,24.23372],[88.52977,23.63114],[88.87631,22.87915],[89.03196,22.05571],[88.88877,21.69059],[88.2085,21.70317],[86.9757,21.49556],[87.03317,20.74331],[86.49935,20.15164],[85.06027,19.47858],[83.94101,18.30201],[83.18922,17.67122],[82.19279,17.01664],[82.19124,16.55666],[81.69272,16.31022],[80.792,15.95197],[80.3249,15.89918],[80.02507,15.13641],[80.23327,13.83577],[80.28629,13.00626],[79.86255,12.05621],[79.858,10.35727],[79.34051,10.30885],[78.88535,9.54614],[79.18972,9.21654],[78.27794,8.93305],[77.94116,8.25296],[77.5399,7.96554],[76.59298,8.89928],[76.13006,10.29963],[75.74647,11.30825],[75.3961,11.78125],[74.86482,12.74194],[74.61672,13.99258],[74.44386,14.61722],[73.5342,15.99065],[73.11991,17.92857],[72.82091,19.20823],[72.82448,20.4195],[72.63053,21.35601],[71.17527,20.75744],[70.47046,20.87733],[69.16413,22.0893],[69.64493,22.45078],[69.3496,22.84318],[68.17664,23.69196],[68.8426,24.35913],[71.04324,24.35652],[70.8447,25.2151],[70.28287,25.72223],[70.16893,26.49187],[69.51439,26.94097],[70.6165,27.9892],[71.77767,27.91318],[72.82375,28.96159],[73.45064,29.97641],[74.42138,30.97981],[74.40593,31.69264],[75.25864,32.2711],[74.45156,32.7649],[74.10429,33.44147],[73.74995,34.3177],[74.2402,34.74889],[75.75706,34.50492],[76.87172,34.65354],[77.83745,35.49401]]]]}},india_karnataka:{type:"Feature",id:"india_karnataka",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]]]}},india_kerala:{type:"Feature",id:"india_kerala",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]]]}},india_maharashtra:{type:"Feature",id:"india_maharashtra",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]]]}},india_puducherry:{type:"Feature",id:"india_puducherry",properties:{name:"Puducherry"},geometry:{type:"Polygon",coordinates:[[[79.87782,12.04973],[79.84726,11.95536],[79.83593,11.90229],[79.81979,11.85761],[79.81464,11.79006],[79.79645,11.7736],[79.77036,11.77191],[79.74564,11.78065],[79.6804,11.7988],[79.61655,11.82434],[79.58702,11.88549],[79.65672,11.93152],[79.64745,11.9594],[79.6423,12.0138],[79.66599,12.03865],[79.72813,12.04201],[79.79885,12.0457],[79.8452,12.05644],[79.87782,12.04973]]]}},india_tamilnadu:{type:"Feature",id:"india_tamilnadu",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]]]}},india_telengana:{type:"Feature",id:"india_telengana",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]]]}},IDN:{type:"Feature",id:"IDN",properties:{},geometry:{type:"Polygon",coordinates:[[[109.538,1.92671],[109.58606,1.79192],[109.68554,1.78179],[109.66224,1.61881],[109.82759,1.48148],[109.93117,1.42466],[109.97919,1.29865],[110.09758,1.19756],[110.1922,1.18303],[110.30096,0.99575],[110.39497,0.99668],[110.49064,0.87637],[110.59486,0.858],[110.85815,0.94998],[110.9055,1.02835],[111.19759,1.06475],[111.22607,1.08799],[111.40504,1.0094],[111.48916,1.03442],[111.52219,0.95868],[111.66704,1.04281],[111.82599,0.98538],[111.934,1.10284],[112.13391,1.13752],[112.22581,1.39272],[112.20003,1.43709],[112.5171,1.57395],[112.77536,1.56153],[112.87744,1.58118],[113.05767,1.55877],[113.106,1.44495],[113.35493,1.35908],[113.41908,1.28549],[113.53549,1.32127],[113.63068,1.21597],[113.81508,1.30294],[113.85093,1.38715],[113.97573,1.45005],[114.14945,1.46149],[114.2027,1.4213],[114.41581,1.51111],[114.52646,1.44179],[114.58583,1.44665],[114.61498,1.57508],[114.71115,1.67148],[114.69469,1.81063],[114.74372,1.86954],[114.87834,1.91463],[114.80632,2.02438],[114.78024,2.14454],[114.79949,2.24936],[114.90604,2.25697],[114.95039,2.35132],[115.09508,2.41123],[115.13965,2.4776],[115.23743,2.50599],[115.09278,2.69409],[115.14115,2.74432],[115.11387,2.83327],[115.15001,2.90895],[115.24912,2.9667],[115.48328,3.01964],[115.56423,3.17109],[115.51617,3.26111],[115.53779,3.36201],[115.6344,3.45571],[115.57652,3.6094],[115.57965,3.74752],[115.61864,3.84247],[115.58177,3.88792],[115.64991,3.98828],[115.70731,4.19935],[115.8296,4.24118],[115.8779,4.39102],[116.00607,4.34818],[116.07901,4.27643],[116.18028,4.38255],[116.34851,4.39138],[116.43275,4.32567],[116.53602,4.37566],[116.61942,4.33622],[116.89887,4.36704],[116.97351,4.34488],[117.28899,4.31595],[117.52934,4.1615],[117.8992,4.16585],[117.95861,4.19058],[118.26478,4.09696],[127.3,5.2],[129,2.7],[141,-2.4],[141,-6.3],[140.83,-6.7],[141.02,-6.95],[141.02,-9.5],[128.5,-9.5],[127.3,-8.2],[125,-8.5],[123.96,-9.2],[124.11,-9.42],[124.22,-9.37],[124.269,-9.4],[124.287,-9.5],[124.358,-9.48564],[124.355,-9.43281],[124.383,-9.361],[124.444,-9.31899],[124.48,-9.15],[124.95,-8.9],[124.94064,-9.03565],[124.99695,-9.06413],[125.11368,-8.98275],[125.18234,-9.03293],[125.18234,-9.17396],[124.98459,-9.19429],[124.99283,-9.28646],[125.04913,-9.33254],[125.16,-9.7],[123,-11.4],[100,-7],[93.5,6.3],[96.6,6.1],[103,1.4],[103.75,1.14],[103.9,1.2],[104.5,1.3],[105,3],[108,5.1],[109.64501,2.08141],[109.62041,1.98321],[109.538,1.92671]]]}},"Universitas-Negeri-Makassar":{type:"Feature",id:"Universitas-Negeri-Makassar",properties:{},geometry:{type:"Polygon",coordinates:[[[119.4292,-4.96157],[119.47318,-4.96588],[119.51547,-4.97866],[119.55445,-4.9994],[119.58862,-5.02733],[119.61666,-5.06135],[119.63751,-5.10017],[119.65035,-5.14229],[119.6547,-5.18611],[119.65039,-5.22992],[119.63757,-5.27205],[119.61674,-5.31089],[119.5887,-5.34493],[119.55452,-5.37286],[119.51553,-5.39362],[119.47321,-5.40641],[119.4292,-5.41072],[119.38519,-5.40641],[119.34288,-5.39362],[119.30388,-5.37286],[119.26971,-5.34493],[119.24167,-5.31089],[119.22084,-5.27205],[119.20802,-5.22992],[119.2037,-5.18611],[119.20805,-5.14229],[119.22089,-5.10017],[119.24174,-5.06135],[119.26979,-5.02733],[119.30396,-4.9994],[119.34293,-4.97866],[119.38522,-4.96588],[119.4292,-4.96157]]]}},"University-Muhammadiyah-Surakarta":{type:"Feature",id:"University-Muhammadiyah-Surakarta",properties:{},geometry:{type:"Polygon",coordinates:[[[110.76899,-7.33303],[110.81316,-7.33735],[110.85564,-7.35012],[110.89479,-7.37086],[110.92912,-7.39878],[110.9573,-7.4328],[110.97825,-7.47162],[110.99116,-7.51374],[110.99553,-7.55755],[110.9912,-7.60137],[110.97833,-7.64351],[110.95741,-7.68234],[110.92924,-7.71638],[110.8949,-7.74433],[110.85572,-7.76509],[110.81321,-7.77787],[110.76899,-7.78219],[110.72477,-7.77787],[110.68225,-7.76509],[110.64307,-7.74433],[110.60873,-7.71638],[110.58056,-7.68234],[110.55964,-7.64351],[110.54677,-7.60137],[110.54244,-7.55755],[110.54681,-7.51374],[110.55973,-7.47162],[110.58067,-7.4328],[110.60885,-7.39878],[110.64318,-7.37086],[110.68233,-7.35012],[110.72481,-7.33735],[110.76899,-7.33303]]]}},iran:{type:"Feature",properties:{},id:"iran",geometry:{type:"Polygon",coordinates:[[[43.96643,39.42704],[44.36828,39.45104],[44.3518,39.57183],[44.62479,39.89048],[45.02746,39.54218],[45.50433,39.06259],[45.9613,38.92951],[46.50828,38.94537],[47.3236,39.44892],[48.00512,39.77374],[48.4411,39.3641],[48.19977,39.25565],[48.3728,39.10236],[48.30414,38.906],[48.10427,38.85269],[48.67649,38.48336],[49.32106,38.48734],[53.94287,37.48358],[54.43724,37.47487],[54.70691,37.69815],[55.26122,38.10864],[55.91695,38.16284],[56.239,38.26407],[57.28683,38.36073],[57.57896,37.98007],[58.01879,37.91821],[58.41395,37.7018],[58.72191,37.76204],[59.4218,37.59896],[59.63834,37.17964],[60.08422,37.11653],[60.37835,36.70792],[61.23424,36.72619],[61.37598,35.51361],[60.99608,34.29808],[60.63333,34.05914],[60.68847,33.68779],[61.01753,33.53868],[60.68833,33.11604],[60.98034,32.20735],[60.95577,31.5572],[61.7915,31.4486],[61.89696,31.1188],[61.90736,30.81546],[60.99448,29.85451],[61.42455,29.4109],[61.97206,28.63509],[62.8889,28.33884],[62.90715,27.31879],[63.29659,27.35528],[63.40209,27.17648],[63.2895,26.57212],[62.5891,26.47058],[62.29032,26.24108],[61.94822,26.12877],[61.62376,24.73837],[60.55845,24.98624],[58.03141,25.27164],[57.11051,25.5495],[56.54686,26.57238],[55.4988,26.01213],[55.28816,25.6474],[54.37853,25.61961],[53.90126,26.2239],[53.08217,26.52934],[51.26311,27.61327],[50.77328,28.14996],[50.48217,27.81479],[50.17456,27.78564],[49.93835,27.81965],[49.88342,27.975],[49.92187,28.18825],[50.33305,28.67232],[49.4197,29.70202],[48.58632,29.62242],[47.9928,30.44356],[47.98907,30.97004],[47.65869,30.98703],[47.65817,31.39276],[47.76361,31.76875],[47.30962,32.37144],[45.91075,33.02471],[46.06882,33.24741],[45.37024,33.9384],[45.40649,34.48845],[45.61523,34.74162],[45.84765,35.07793],[46.0613,35.21211],[45.91186,35.63945],[46.06018,35.76881],[45.75644,35.74371],[45.3092,35.9317],[45.19226,36.33283],[44.97802,36.46548],[44.95056,36.68605],[44.80224,36.7609],[44.83543,36.92589],[44.74731,37.02887],[44.71435,37.2828],[44.57153,37.38762],[44.51099,37.70537],[44.17537,37.86225],[44.29736,38.30899],[44.10461,39.10449],[43.93976,39.34825],[43.96643,39.42704]]]}},japan:{type:"Feature",id:"japan",properties:{},geometry:{type:"Polygon",coordinates:[[[141.11938,45.69083],[142.28497,45.56863],[145.39307,44.48867],[145.57983,44.11125],[145.27222,43.79291],[145.47821,43.46289],[145.68695,43.4589],[145.91217,43.39108],[145.44903,42.69934],[143.91094,41.8376],[142.48272,39.3181],[142.1751,38.15265],[141.38409,35.69383],[140.94463,35.21056],[140.55908,32.1198],[139.38457,31.87843],[138.98907,33.1752],[138.01025,34.29807],[135.99976,33.17434],[133.53882,32.71336],[132.48516,32.06483],[131.56128,31.04352],[131.03497,29.53613],[129.94629,27.50827],[127.78301,25.4442],[126.47461,25.42343],[125.86487,24.52713],[124.92657,23.88678],[123.37921,23.82053],[122.67883,24.31456],[122.7293,24.64795],[124.67834,25.02588],[125.36602,25.52354],[126.24493,26.35342],[127.56329,27.13828],[128.57403,28.73003],[128.74981,31.46703],[128.36426,32.62087],[128.92559,33.76174],[129.21021,34.62417],[129.56177,34.84086],[136.69739,37.9312],[139.1209,38.85762],[139.04297,42.04929],[140.13165,43.58114],[140.5711,45.64549],[141.11938,45.69083]]]}},malaysia:{type:"Feature",id:"malaysia",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[109.538,1.92671],[109.62041,1.98321],[109.64501,2.08141],[113.8,4.8],[114.26015,4.50701],[114.33278,4.34889],[114.31645,4.26363],[114.45418,4.24183],[114.49579,4.14668],[114.6492,4.00624],[114.80762,4.14929],[114.85775,4.26957],[114.87758,4.42656],[114.82955,4.42966],[114.80229,4.67536],[114.85851,4.79751],[114.97133,4.80824],[115.02238,4.74977],[115.09879,4.4685],[115.15547,4.38302],[115.24582,4.34118],[115.28924,4.60384],[115.2375,4.79584],[115.15038,4.87204],[115.15825,5.02512],[115,5.3],[116.9,7.6],[117.5,7.4],[119.35011,5.53088],[119.43909,5.11578],[118.83773,4.45269],[118.26478,4.09696],[117.95861,4.19058],[117.8992,4.16585],[117.52934,4.1615],[117.28899,4.31595],[116.97351,4.34488],[116.89887,4.36704],[116.61942,4.33622],[116.53602,4.37566],[116.43275,4.32567],[116.34851,4.39138],[116.18028,4.38255],[116.07901,4.27643],[116.00607,4.34818],[115.8779,4.39102],[115.8296,4.24118],[115.70731,4.19935],[115.64991,3.98828],[115.58177,3.88792],[115.61864,3.84247],[115.57965,3.74752],[115.57652,3.6094],[115.6344,3.45571],[115.53779,3.36201],[115.51617,3.26111],[115.56423,3.17109],[115.48328,3.01964],[115.24912,2.9667],[115.15001,2.90895],[115.11387,2.83327],[115.14115,2.74432],[115.09278,2.69409],[115.23743,2.50599],[115.13965,2.4776],[115.09508,2.41123],[114.95039,2.35132],[114.90604,2.25697],[114.79949,2.24936],[114.78024,2.14454],[114.80632,2.02438],[114.87834,1.91463],[114.74372,1.86954],[114.69469,1.81063],[114.71115,1.67148],[114.61498,1.57508],[114.58583,1.44665],[114.52646,1.44179],[114.41581,1.51111],[114.2027,1.4213],[114.14945,1.46149],[113.97573,1.45005],[113.85093,1.38715],[113.81508,1.30294],[113.63068,1.21597],[113.53549,1.32127],[113.41908,1.28549],[113.35493,1.35908],[113.106,1.44495],[113.05767,1.55877],[112.87744,1.58118],[112.77536,1.56153],[112.5171,1.57395],[112.20003,1.43709],[112.22581,1.39272],[112.13391,1.13752],[111.934,1.10284],[111.82599,0.98538],[111.66704,1.04281],[111.52219,0.95868],[111.48916,1.03442],[111.40504,1.0094],[111.22607,1.08799],[111.19759,1.06475],[110.9055,1.02835],[110.85815,0.94998],[110.59486,0.858],[110.49064,0.87637],[110.39497,0.99668],[110.30096,0.99575],[110.1922,1.18303],[110.09758,1.19756],[109.97919,1.29865],[109.93117,1.42466],[109.82759,1.48148],[109.66224,1.61881],[109.68554,1.78179],[109.58606,1.79192],[109.538,1.92671]]],[[[99.45833,6.30667],[99.51167,6.48167],[99.68908,6.47146],[99.91691,6.5233],[100.07588,6.40615],[100.15906,6.48065],[100.17157,6.69376],[100.32605,6.6597],[100.36648,6.53967],[100.4962,6.52128],[100.66237,6.45103],[100.73937,6.49207],[100.81258,6.44219],[100.83515,6.29654],[100.90398,6.23379],[100.98414,6.27884],[101.0943,6.26044],[101.12667,6.19264],[101.0868,5.9109],[101.03707,5.91804],[100.98946,5.78393],[101.1192,5.67031],[101.25999,5.71155],[101.27615,5.81155],[101.39691,5.87241],[101.48454,5.86993],[101.58131,5.93436],[101.66236,5.86871],[101.69082,5.75576],[101.79332,5.75066],[101.94402,5.87247],[101.94265,5.98109],[102.05204,6.0785],[102.08029,6.22537],[102.2,6.5],[103.6,5.8],[104.8,2.5],[104.5,1.5],[104.31571,1.28352],[104.12518,1.27582],[104.07647,1.43092],[103.89786,1.42794],[103.81267,1.47847],[103.67389,1.42814],[103.56667,1.1955],[103,1.325],[99,4.5],[99.45833,6.30667]]]]}},MNG:{type:"Feature",id:"MNG",properties:{name:"Mongolia"},geometry:{type:"Polygon",coordinates:[[[87.75126,49.2972],[88.80557,49.47052],[90.71367,50.33181],[92.23471,50.80217],[93.10422,50.49529],[94.14757,50.48054],[94.81595,50.01343],[95.81403,49.97747],[97.25973,49.72606],[98.23176,50.4224],[97.82574,51.011],[98.86149,52.04737],[99.98173,51.63401],[100.88948,51.51686],[102.06522,51.25992],[102.25591,50.51056],[103.67655,50.08997],[104.62155,50.27533],[105.88659,50.40602],[106.8888,50.2743],[107.86818,49.79371],[108.47517,49.28255],[109.40245,49.29296],[110.66201,49.13013],[111.58123,49.37797],[112.89774,49.54357],[114.36246,50.2483],[114.96211,50.14025],[115.4857,49.80518],[116.6788,49.88853],[116.1918,49.1346],[115.48528,48.13538],[115.74284,47.72655],[116.30895,47.85341],[117.29551,47.69771],[118.06414,48.06673],[118.86657,47.74706],[119.77282,47.04806],[119.66327,46.69268],[118.87433,46.80541],[117.4217,46.67273],[116.71787,46.3882],[115.9851,45.72724],[114.46033,45.33982],[113.46391,44.80889],[112.43606,45.01165],[111.87331,45.10208],[111.34838,44.45744],[111.66774,44.07318],[111.82959,43.74312],[111.12968,43.40683],[110.4121,42.87123],[109.2436,42.51945],[107.74477,42.48152],[106.12932,42.13433],[104.96499,41.59741],[104.52228,41.90835],[103.31228,41.90747],[101.83304,42.51487],[100.84587,42.6638],[99.51582,42.52469],[97.45176,42.74889],[96.3494,42.72563],[95.76246,43.31945],[95.30688,44.24133],[94.68893,44.35233],[93.48073,44.97547],[92.13389,45.11508],[90.94554,45.28607],[90.58577,45.71972],[90.97081,46.88815],[90.28083,47.69355],[88.8543,48.06908],[88.01383,48.59946],[87.75126,49.2972]]]}},MMR:{type:"Feature",id:"MMR",properties:{name:"Myanmar"},geometry:{type:"Polygon",coordinates:[[[92.10937,20.85881],[92.3291,21.49396],[92.68066,21.28937],[92.63672,22.08564],[92.98828,22.06528],[93.18604,22.22809],[93.14209,23.09994],[93.38379,23.22115],[93.36182,24.1267],[94.19678,23.92601],[94.70215,25.04579],[94.57031,25.26457],[95.20752,26.03704],[95.05371,26.49024],[97.66846,28.51697],[98.65723,27.50827],[98.56934,25.85922],[97.62451,24.8665],[97.73438,23.88584],[98.83301,24.14675],[98.85498,23.18076],[99.49219,23.05952],[99.1626,22.04491],[100.0415,21.96342],[100.32715,21.49396],[101.09619,21.71868],[101.16211,21.41216],[99.99756,20.36523],[97.91016,19.49766],[97.53662,18.29195],[98.83301,16.21467],[98.50342,15.32657],[98.21777,15.11455],[98.65723,14.24309],[99.18457,13.66734],[99.22852,12.85465],[99.66797,11.65224],[98.4375,9.90392],[97.77832,14.34955],[97.00928,16.80454],[95.42725,15.55954],[94.021,16.04581],[94.21875,18.0832],[92.10937,20.85881]]]}},"Institute-of-Crisis-Management-Studies":{type:"Feature",id:"Institute-of-Crisis-Management-Studies",properties:{},geometry:{type:"Polygon",coordinates:[[[85.34173,27.95228],[85.39133,27.94796],[85.43901,27.93515],[85.48293,27.91436],[85.5214,27.88639],[85.55293,27.85231],[85.57632,27.81345],[85.59067,27.77129],[85.59544,27.72747],[85.59047,27.68367],[85.57595,27.64156],[85.55245,27.60278],[85.52087,27.56879],[85.48245,27.5409],[85.43864,27.52019],[85.39113,27.50743],[85.34173,27.50313],[85.29233,27.50743],[85.24482,27.52019],[85.20102,27.5409],[85.16259,27.56879],[85.13102,27.60278],[85.10752,27.64156],[85.09299,27.68367],[85.08802,27.72747],[85.09279,27.77129],[85.10715,27.81345],[85.13054,27.85231],[85.16207,27.88639],[85.20053,27.91436],[85.24445,27.93515],[85.29213,27.94796],[85.34173,27.95228]]]}},"Kathmandu-University":{type:"Feature",id:"Kathmandu-University",properties:{},geometry:{type:"Polygon",coordinates:[[[85.53873,27.84494],[85.58828,27.84062],[85.63591,27.82781],[85.67979,27.80702],[85.71822,27.77905],[85.74972,27.74497],[85.77308,27.70611],[85.78742,27.66395],[85.79219,27.62013],[85.78722,27.57633],[85.77272,27.53422],[85.74924,27.49543],[85.7177,27.46145],[85.67931,27.43356],[85.63554,27.41285],[85.58808,27.40009],[85.53873,27.39578],[85.48938,27.40009],[85.44192,27.41285],[85.39815,27.43356],[85.35976,27.46145],[85.32822,27.49543],[85.30474,27.53422],[85.29024,27.57633],[85.28527,27.62013],[85.29004,27.66395],[85.30438,27.70611],[85.32774,27.74497],[85.35924,27.77905],[85.39767,27.80702],[85.44155,27.82781],[85.48918,27.84062],[85.53873,27.84494]]]}},NPL:{type:"Feature",id:"NPL",properties:{name:"Nepal"},geometry:{type:"Polygon",coordinates:[[[88.12044,27.87654],[88.04313,27.44582],[88.1748,26.8104],[88.06024,26.41462],[87.22747,26.3979],[86.02439,26.63098],[85.25178,26.7262],[84.67502,27.2349],[83.30425,27.36451],[81.99999,27.92548],[81.0572,28.41609],[80.08843,28.79447],[80.47672,29.72987],[81.11126,30.18348],[81.5258,30.42272],[82.32751,30.11527],[83.33711,29.46373],[83.89899,29.32023],[84.23458,28.83989],[85.01164,28.64277],[85.82332,28.20358],[86.95452,27.97426],[88.12044,27.87654]]]}},"Tribhuvan-University":{type:"Feature",id:"Tribhuvan-University",properties:{},geometry:{type:"Polygon",coordinates:[[[83.97645,28.47849],[84.0263,28.47417],[84.07421,28.46136],[84.11835,28.44057],[84.157,28.4126],[84.18869,28.37852],[84.21219,28.33965],[84.22661,28.2975],[84.23141,28.25368],[84.22641,28.20987],[84.21181,28.16777],[84.18819,28.12898],[84.15647,28.09499],[84.11785,28.06711],[84.07383,28.04639],[84.02609,28.03364],[83.97645,28.02933],[83.92682,28.03364],[83.87908,28.04639],[83.83506,28.06711],[83.79644,28.09499],[83.76471,28.12898],[83.7411,28.16777],[83.7265,28.20987],[83.7215,28.25368],[83.72629,28.2975],[83.74072,28.33965],[83.76422,28.37852],[83.7959,28.4126],[83.83456,28.44057],[83.8787,28.46136],[83.92661,28.47417],[83.97645,28.47849]]]}},north_korea:{type:"Feature",id:"north_korea",properties:{},geometry:{type:"Polygon",coordinates:[[[125,37.2],[123.5,38.4],[124.38,40.12],[124.87,40.47],[126.05,40.95],[126.6,41.6],[126.9,41.8],[127.25,41.5],[128.2,41.4],[128.3,41.56],[128.04,42.03],[128.95,42.03],[129.35,42.44],[129.69,42.44],[129.88,43],[130.2,42.9],[130.3,42.66],[130.5,42.6],[130.7,42.3],[131,39],[128.33,38.61],[128.28,38.42],[128.08,38.32],[127.14,38.32],[126.99,38.21],[126.95,38.14],[126.88,38.1],[126.82,38],[126.67,37.95],[126.69,37.84],[126.667,37.828],[126.66,37.79],[126.585,37.76],[126.474,37.81],[126.42,37.845],[126.2,37.82],[126.18,37.74],[125,37.2]]]}},"Far-Eastern-University-Institute-of-Technology":{type:"Feature",id:"Far-Eastern-University-Institute-of-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[120.98888,14.60404],[120.98887,14.60385],[120.98861,14.60381],[120.98839,14.60362],[120.98819,14.60383],[120.98849,14.60444],[120.98888,14.60404]]]}},philippines:{type:"Feature",id:"philippines",properties:{},geometry:{type:"Polygon",coordinates:[[[114.93896,8.23324],[122.01416,21.71868],[127.6062,7.39515],[125.50781,5.14566],[118.89954,4.41761],[119.49829,5.28789],[117.53174,7.39515],[114.93896,8.23324]]]}},"University-of-the-Philippines-Resilience-Institute":{type:"Feature",id:"University-of-the-Philippines-Resilience-Institute",properties:{},geometry:{type:"Polygon",coordinates:[[[121.04486,14.66156],[121.0453,14.66164],[121.04613,14.66179],[121.04657,14.66189],[121.0469,14.66197],[121.04725,14.66209],[121.04744,14.66212],[121.04804,14.66209],[121.04977,14.66207],[121.05481,14.66197],[121.05577,14.66195],[121.0606,14.66181],[121.06115,14.66177],[121.06138,14.66173],[121.06252,14.66172],[121.06463,14.66187],[121.06501,14.66179],[121.06632,14.66232],[121.06771,14.66252],[121.07231,14.66314],[121.07389,14.66336],[121.07425,14.66299],[121.07431,14.66292],[121.07437,14.66284],[121.07447,14.66271],[121.07458,14.66258],[121.07478,14.66233],[121.07483,14.66226],[121.07493,14.6621],[121.07587,14.66015],[121.07598,14.65991],[121.07607,14.65972],[121.07619,14.65969],[121.07621,14.65957],[121.07621,14.65945],[121.07618,14.65935],[121.07614,14.65927],[121.07596,14.65909],[121.07468,14.65799],[121.07452,14.65778],[121.07443,14.65752],[121.07443,14.65486],[121.07438,14.65296],[121.07618,14.65296],[121.07626,14.64952],[121.07435,14.64741],[121.07269,14.6458],[121.07236,14.64546],[121.07072,14.64385],[121.06455,14.63779],[121.0638,14.63704],[121.06295,14.63719],[121.06193,14.6371],[121.06176,14.63904],[121.06176,14.63908],[121.06117,14.64685],[121.05981,14.64687],[121.05952,14.6483],[121.05889,14.65118],[121.05867,14.65146],[121.05861,14.65156],[121.0584,14.65176],[121.05823,14.65186],[121.05813,14.65189],[121.05806,14.65204],[121.05793,14.65212],[121.05776,14.6522],[121.0576,14.65221],[121.05713,14.65222],[121.05691,14.65217],[121.05662,14.65216],[121.05624,14.65209],[121.05588,14.65205],[121.05562,14.65209],[121.05541,14.65242],[121.0553,14.65256],[121.055,14.65256],[121.05485,14.65248],[121.05466,14.65234],[121.05455,14.65238],[121.0543,14.65248],[121.05408,14.65244],[121.05396,14.65224],[121.05384,14.65214],[121.05365,14.65225],[121.05358,14.65257],[121.05348,14.65284],[121.05342,14.65301],[121.05323,14.65313],[121.05301,14.65325],[121.05288,14.65341],[121.05273,14.6536],[121.05248,14.6539],[121.05245,14.65415],[121.05247,14.65436],[121.05231,14.65445],[121.05155,14.65465],[121.05129,14.65476],[121.05088,14.65539],[121.05051,14.6558],[121.05026,14.656],[121.04971,14.65623],[121.04854,14.65727],[121.04771,14.6583],[121.04749,14.6584],[121.0473,14.6586],[121.04711,14.65869],[121.04677,14.65869],[121.04667,14.65899],[121.04639,14.65965],[121.04621,14.65973],[121.0461,14.65965],[121.04595,14.65973],[121.046,14.65987],[121.04611,14.66001],[121.04627,14.66021],[121.04635,14.66056],[121.04618,14.66082],[121.04602,14.66104],[121.04591,14.66128],[121.04567,14.66127],[121.04548,14.66114],[121.04535,14.66097],[121.04513,14.66104],[121.04492,14.66129],[121.04477,14.66154],[121.04486,14.66156]]]}},russia:{type:"Feature",id:"russia",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[22.7311,54.32754],[20.89224,54.31253],[19.66064,54.42608],[19.88848,54.86616],[21.26845,55.19048],[22.31572,55.0153],[22.75776,54.85657],[22.65105,54.58274],[22.7311,54.32754]]],[[[-180,83],[-169,66.5],[-171,64],[-180,64],[-180,83]]],[[[180,83],[180,64.97971],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.63387,42.90302],[131.14469,42.92999],[131.28856,44.11152],[131.02519,44.96796],[131.88345,45.32116],[133.09712,45.14409],[133.76964,46.11693],[134.11235,47.21248],[134.50081,47.57845],[135.02631,48.47823],[133.3736,48.18344],[132.50669,47.78896],[130.98726,47.79013],[130.58229,48.72969],[129.39782,49.4406],[127.6574,49.76027],[127.28746,50.7398],[126.93916,51.35389],[126.5644,51.78426],[125.94635,52.7928],[125.06821,53.16105],[123.57147,53.4588],[122.24575,53.43173],[121.00308,53.2514],[120.17709,52.75389],[120.72579,52.51623],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.28846,50.14288],[117.87924,49.51098],[116.6788,49.88853],[115.4857,49.80518],[114.96211,50.14025],[114.36246,50.2483],[112.89774,49.54357],[111.58123,49.37797],[110.66201,49.13013],[109.40245,49.29296],[108.47517,49.28255],[107.86818,49.79371],[106.8888,50.2743],[105.88659,50.40602],[104.62158,50.27532],[103.67655,50.08997],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.51686],[99.98173,51.63401],[98.86149,52.04737],[97.82574,51.011],[98.23176,50.4224],[97.25976,49.72605],[95.81402,49.97746],[94.81595,50.01343],[94.14757,50.48054],[93.10421,50.49529],[92.23471,50.80217],[90.71367,50.33181],[88.80557,49.47052],[87.75126,49.2972],[87.35997,49.21498],[86.82936,49.82668],[85.54127,49.69286],[85.11556,50.1173],[84.41638,50.3114],[83.93511,50.88925],[83.383,51.06918],[81.94599,50.8122],[80.56845,51.38834],[80.03556,50.86475],[77.80092,53.40442],[76.52518,54.177],[76.8911,54.49052],[74.38482,53.54685],[73.42568,53.48981],[73.50852,54.03562],[72.22415,54.37665],[71.18013,54.13329],[70.86527,55.16973],[69.06817,55.38525],[68.1691,54.97039],[65.66687,54.60125],[65.17853,54.35423],[61.4366,54.00625],[60.97807,53.66499],[61.69999,52.98],[60.73999,52.71999],[60.92727,52.44755],[59.96753,51.96042],[61.588,51.27266],[61.33742,50.79907],[59.93281,50.84219],[59.64228,50.54544],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.53288,51.02624],[52.32872,51.71865],[50.76665,51.69276],[48.70238,50.60513],[48.57784,49.87476],[47.54948,50.4547],[46.7516,49.35601],[47.04367,49.15204],[46.46645,48.39415],[47.31524,47.71585],[48.05725,47.74377],[48.69473,47.07563],[48.59325,46.56104],[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.98728,41.40582],[47.81567,41.15142],[47.37331,41.21973],[46.68607,41.82714],[46.40495,41.86068],[45.7764,42.09244],[45.47028,42.50278],[44.53762,42.71199],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.07697,43.5531],[39.95501,43.435],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.22354,47.10219],[38.25511,47.5464],[38.77057,47.82562],[39.73828,47.89894],[39.89562,48.23241],[39.67465,48.78382],[40.08079,49.30743],[40.06904,49.60105],[38.59499,49.92646],[38.01063,49.91566],[37.39346,50.38395],[36.62617,50.22559],[35.35612,50.5772],[35.37791,50.77394],[35.02218,51.20757],[34.22482,51.25599],[34.14198,51.56641],[34.39173,51.76888],[33.7527,52.33508],[32.71576,52.23846],[32.41206,52.28869],[32.15944,52.06125],[31.78597,52.10168],[31.54002,52.74205],[31.3052,53.074],[31.49764,53.16743],[32.30452,53.13273],[32.69364,53.35142],[32.4056,53.61805],[31.73127,53.79403],[31.79142,53.97464],[31.38447,54.15706],[30.75753,54.81177],[30.97184,55.08155],[30.87391,55.55098],[29.89629,55.78946],[29.37157,55.67009],[29.22951,55.91834],[28.17671,56.16913],[27.85528,56.75933],[27.77002,57.24426],[27.28818,57.47453],[27.71669,57.7919],[27.42015,58.72457],[28.1317,59.30083],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.21111,61.78003],[31.13999,62.35769],[31.51609,62.86769],[30.03587,63.55281],[30.44468,64.20445],[29.54443,64.94867],[30.21765,65.80598],[29.05459,66.94429],[29.97743,67.6983],[28.44594,68.36461],[28.59193,69.06478],[35,71],[40,83],[180,83]]]]}},south_korea:{type:"Feature",id:"south_korea",properties:{},geometry:{type:"Polygon",coordinates:[[[125,33],[125,37.2],[126.18,37.74],[126.2,37.82],[126.42,37.845],[126.474,37.81],[126.585,37.76],[126.66,37.79],[126.667,37.828],[126.69,37.84],[126.67,37.95],[126.82,38],[126.88,38.1],[126.95,38.14],[126.99,38.21],[127.14,38.32],[128.08,38.32],[128.28,38.42],[128.33,38.61],[131,39],[131.3,36.6],[127.3,33],[125,33]]]}},sri_lanka:{type:"Feature",id:"sri_lanka",properties:{name:"Sri Lanka"},geometry:{type:"Polygon",coordinates:[[[81.78796,7.52306],[81.63732,6.48177],[81.21802,6.19714],[80.34836,5.96837],[79.87247,6.76346],[79.69517,8.20084],[80.1478,9.82408],[80.83882,9.26843],[81.30432,8.56421],[81.78796,7.52306]]]}},taiwan:{type:"Feature",id:"taiwan",properties:{},geometry:{type:"Polygon",coordinates:[[[119,23.5],[121.7,26],[122.5,25.5],[121.8,21.8],[120,21.5],[119,23.5]]]}},thailand_cnx:{type:"Feature",id:"thailand_cnx",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]]]}},thailand_full:{type:"Feature",id:"thailand_full",properties:{},geometry:{type:"Polygon",coordinates:[[[97.50366,8.39358],[97.7124,9.60075],[99.47021,11.8566],[98.05298,14.84923],[98.32764,16.15137],[97.21802,18.39623],[97.38281,19.73568],[100.2832,20.66363],[101.37085,19.69431],[101.40381,18.27109],[104.08447,18.58377],[105.76538,16.06693],[105.52368,14.15788],[102.854,13.82741],[103.00781,11.69527],[102.12891,5.81276],[101.11542,5.4875],[100.66498,6.42448],[99.13788,6.34806],[97.50366,8.39358]]]}},"al-tirana":{type:"Feature",id:"al-tirana",properties:{},geometry:{type:"Polygon",coordinates:[[[19.77796,41.36244],[19.78028,41.36267],[19.78123,41.36014],[19.78004,41.35915],[19.78099,41.35803],[19.77752,41.35682],[19.78082,41.35409],[19.77658,41.35122],[19.78029,41.34936],[19.7832,41.35026],[19.7899,41.34976],[19.79536,41.34793],[19.80046,41.3502],[19.81074,41.35213],[19.81874,41.35044],[19.82238,41.35173],[19.83428,41.35186],[19.84174,41.35434],[19.84682,41.3589],[19.84829,41.35842],[19.85095,41.36008],[19.85159,41.35903],[19.8561,41.35843],[19.85488,41.3545],[19.85784,41.35167],[19.85518,41.35228],[19.85275,41.35145],[19.85276,41.34956],[19.85151,41.34955],[19.85462,41.34419],[19.85876,41.33995],[19.8642,41.33947],[19.86465,41.33789],[19.86829,41.33772],[19.86999,41.33882],[19.87262,41.33794],[19.87259,41.33606],[19.87543,41.3355],[19.87644,41.33126],[19.87554,41.33042],[19.87232,41.33102],[19.87095,41.32999],[19.86659,41.33088],[19.86535,41.32664],[19.86164,41.32543],[19.85813,41.3214],[19.85489,41.32066],[19.85575,41.31876],[19.84532,41.314],[19.84458,41.31212],[19.85095,41.30156],[19.84975,41.29748],[19.8457,41.29559],[19.83906,41.29791],[19.82955,41.29568],[19.82738,41.29791],[19.82504,41.29827],[19.82605,41.29986],[19.82333,41.30509],[19.82032,41.30525],[19.81821,41.3037],[19.81168,41.30787],[19.81162,41.31002],[19.80709,41.31302],[19.79827,41.31487],[19.79767,41.31238],[19.79374,41.313],[19.78954,41.31035],[19.7852,41.31117],[19.78057,41.3142],[19.77976,41.31244],[19.78765,41.30887],[19.78369,41.30473],[19.77721,41.30247],[19.77515,41.30039],[19.77077,41.30363],[19.76019,41.29972],[19.75706,41.30651],[19.75854,41.30874],[19.75473,41.31208],[19.75643,41.31314],[19.75571,41.31548],[19.76586,41.3199],[19.76813,41.32266],[19.77017,41.32139],[19.76811,41.31882],[19.76922,41.31754],[19.77559,41.31854],[19.77323,41.32284],[19.77378,41.32422],[19.77893,41.32349],[19.77968,41.32518],[19.78451,41.32399],[19.78734,41.32541],[19.78321,41.33328],[19.78343,41.33578],[19.77659,41.33783],[19.78083,41.34567],[19.76839,41.35239],[19.75832,41.35489],[19.76053,41.35931],[19.75484,41.3598],[19.75767,41.36542],[19.76169,41.36185],[19.76434,41.36249],[19.76411,41.36393],[19.76775,41.36369],[19.76857,41.36459],[19.77145,41.364],[19.77204,41.36125],[19.77796,41.36244]]]}},albania:{type:"Feature",id:"albania",properties:{},geometry:{type:"Polygon",coordinates:[[[19.39087,41.86138],[19.40186,42.09007],[19.27002,42.18376],[19.69849,42.67436],[19.81384,42.46399],[20.07202,42.55713],[20.25879,42.33824],[20.34668,42.32606],[20.51697,42.23665],[20.61584,41.92272],[20.52795,41.71803],[20.56091,41.57847],[20.44556,41.54559],[20.56091,41.40566],[20.50049,41.3397],[20.58289,41.09177],[20.65979,41.07521],[20.71472,40.90521],[20.95642,40.92181],[20.98389,40.7431],[21.07178,40.60978],[20.95093,40.47202],[20.85205,40.47202],[20.68726,40.10329],[20.43457,40.07387],[20.33569,39.99396],[20.43457,39.82119],[20.38513,39.77899],[20.28625,39.8001],[20.31921,39.72831],[20.20386,39.63954],[19.97314,39.69451],[20.0116,39.86759],[19.86328,40.04444],[19.35791,40.2921],[19.25354,40.51798],[19.4458,40.3298],[19.50073,40.43859],[19.31396,40.65564],[19.41833,40.90936],[19.53918,40.92181],[19.4458,41.00063],[19.43481,41.15384],[19.50623,41.2489],[19.4458,41.32733],[19.41284,41.4139],[19.51721,41.52092],[19.45129,41.60312],[19.52271,41.57847],[19.58862,41.62366],[19.59961,41.7836],[19.39087,41.86138]]]}},austria:{type:"Feature",id:"austria",properties:{},geometry:{type:"Polygon",coordinates:[[[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]]]}},graz:{type:"Feature",id:"graz",properties:{},geometry:{type:"Polygon",coordinates:[[[15.26276,46.94182],[15.26276,47.16918],[15.62943,47.16918],[15.62943,46.94182],[15.26276,46.94182]]]}},belarus:{type:"Feature",id:"belarus",properties:{},geometry:{type:"Polygon",coordinates:[[[23.19351,52.37811],[23.38715,52.57134],[23.67554,52.61806],[23.87329,52.72215],[23.75656,53.20027],[23.42148,53.83956],[23.43521,53.97467],[24.33609,53.99082],[24.73022,54.03762],[24.70825,54.16967],[24.95682,54.18253],[25.48004,54.37176],[25.63385,54.95239],[26.53748,55.24468],[26.27655,55.26973],[26.48804,55.71009],[26.89728,55.87993],[27.56195,55.82597],[27.56195,55.97226],[27.98218,56.20976],[29.64935,55.96304],[30.28107,55.89303],[30.95398,55.64815],[31.20941,54.67065],[32.47009,53.7617],[32.83539,53.3866],[32.22839,53.02635],[31.51978,53.16159],[31.84662,52.06262],[30.8139,51.93411],[30.4953,51.21032],[27.71301,51.46085],[25.85083,51.88666],[24.5874,51.81541],[23.51898,51.41634],[23.45581,51.99841],[23.15918,52.1874],[23.19351,52.37811]]]}},belgium:{type:"Feature",id:"belgium",properties:{},geometry:{type:"Polygon",coordinates:[[[3.08167,51.55146],[3.30963,51.43346],[3.36834,51.36996],[3.37761,51.35956],[3.37589,51.34841],[3.38482,51.34337],[3.38722,51.33887],[3.38688,51.33286],[3.36096,51.31527],[3.3819,51.30207],[3.37641,51.29928],[3.36782,51.29681],[3.38293,51.28726],[3.38327,51.2806],[3.37915,51.27824],[3.38121,51.27598],[3.39031,51.27416],[3.39598,51.26686],[3.40439,51.26449],[3.40937,51.25923],[3.41795,51.26127],[3.42138,51.25848],[3.4267,51.25482],[3.42894,51.24709],[3.44679,51.24279],[3.52592,51.24677],[3.51425,51.2878],[3.52927,51.28935],[3.53434,51.28474],[3.53811,51.28479],[3.54266,51.29177],[3.55717,51.29187],[3.5588,51.2959],[3.56163,51.29644],[3.56489,51.29569],[3.5727,51.29225],[3.57253,51.29107],[3.57571,51.28946],[3.57905,51.28951],[3.58206,51.28876],[3.58214,51.29247],[3.58618,51.29316],[3.58026,51.29869],[3.58987,51.30663],[3.62626,51.29413],[3.64145,51.28914],[3.64411,51.29069],[3.6581,51.29096],[3.6781,51.28345],[3.67905,51.28168],[3.69063,51.28173],[3.69424,51.27668],[3.71801,51.27217],[3.71827,51.27368],[3.72273,51.274],[3.75054,51.27061],[3.75286,51.27104],[3.75681,51.26986],[3.76342,51.26261],[3.76848,51.26106],[3.77123,51.26218],[3.77355,51.2646],[3.79698,51.25665],[3.79071,51.24553],[3.79063,51.21608],[3.80453,51.2143],[3.80796,51.21398],[3.82479,51.21086],[3.8356,51.21516],[3.85225,51.21484],[3.85895,51.21291],[3.89002,51.22473],[3.89568,51.21968],[3.89482,51.2143],[3.88298,51.20764],[3.88762,51.20301],[3.89345,51.20527],[3.89929,51.20398],[3.91542,51.20989],[3.91388,51.21764],[3.92349,51.21989],[3.93105,51.22194],[3.9374,51.21398],[3.94323,51.21721],[3.95748,51.21764],[3.96023,51.22527],[3.97654,51.22667],[3.9846,51.2357],[3.99473,51.23914],[4.00469,51.24311],[4.01636,51.24623],[4.03851,51.24687],[4.04125,51.24397],[4.05842,51.24505],[4.06082,51.24773],[4.16365,51.29391],[4.23815,51.35345],[4.22373,51.35881],[4.21686,51.36878],[4.21635,51.37435],[4.33685,51.37842],[4.34235,51.35988],[4.35093,51.35967],[4.36861,51.35795],[4.38543,51.35592],[4.39505,51.35753],[4.42114,51.36707],[4.42818,51.36642],[4.42337,51.37242],[4.42904,51.37521],[4.38852,51.40702],[4.38097,51.42137],[4.38904,51.42597],[4.39093,51.43304],[4.3935,51.43486],[4.39161,51.44416],[4.37891,51.44502],[4.37719,51.44716],[4.38131,51.45165],[4.38509,51.4508],[4.44157,51.47005],[4.46354,51.4723],[4.47487,51.47978],[4.48654,51.4786],[4.53856,51.48416],[4.55074,51.47283],[4.53238,51.44877],[4.53701,51.42522],[4.57512,51.43411],[4.63469,51.42651],[4.64087,51.42372],[4.65048,51.42747],[4.6673,51.42779],[4.66473,51.44556],[4.69236,51.45326],[4.70146,51.46845],[4.71416,51.47026],[4.71519,51.47304],[4.72781,51.48486],[4.74524,51.48988],[4.74721,51.49368],[4.74781,51.49651],[4.75047,51.49945],[4.75648,51.50196],[4.77253,51.50682],[4.79485,51.5034],[4.82025,51.49784],[4.82643,51.48609],[4.84737,51.48352],[4.84291,51.46449],[4.84909,51.46085],[4.84463,51.4478],[4.83089,51.44438],[4.83742,51.42683],[4.8563,51.41805],[4.88171,51.43325],[4.91741,51.4127],[4.93389,51.42083],[4.90162,51.44053],[4.9387,51.46192],[4.97646,51.44545],[5.02419,51.48523],[5.03225,51.48919],[5.04187,51.4878],[5.04135,51.48053],[5.04856,51.47433],[5.08032,51.47475],[5.10658,51.43047],[5.07294,51.39358],[5.11765,51.36149],[5.12074,51.35592],[5.13268,51.3475],[5.13525,51.31608],[5.1622,51.31135],[5.17241,51.31688],[5.19001,51.32069],[5.19585,51.32123],[5.19988,51.32348],[5.24331,51.30594],[5.2276,51.26841],[5.23842,51.26208],[5.26357,51.26782],[5.29584,51.26267],[5.31567,51.26449],[5.33755,51.26428],[5.34107,51.26686],[5.34399,51.27309],[5.34554,51.27668],[5.4172,51.2632],[5.43222,51.27706],[5.43806,51.27695],[5.44132,51.2827],[5.46398,51.28549],[5.47608,51.29209],[5.47608,51.29536],[5.48226,51.29923],[5.48201,51.301],[5.51625,51.29612],[5.52011,51.28957],[5.54363,51.27298],[5.55711,51.26718],[5.55874,51.2631],[5.55745,51.25316],[5.55651,51.24472],[5.56131,51.22301],[5.63667,51.20355],[5.65401,51.19812],[5.65513,51.1936],[5.65212,51.1929],[5.65753,51.1865],[5.66834,51.18671],[5.67624,51.18548],[5.67761,51.18435],[5.6856,51.18542],[5.68946,51.18623],[5.69815,51.1842],[5.70201,51.18397],[5.70165,51.18275],[5.70645,51.18248],[5.70815,51.18223],[5.70987,51.1812],[5.71431,51.1839],[5.7177,51.18475],[5.72948,51.18601],[5.73031,51.18553],[5.73274,51.18564],[5.73274,51.18615],[5.7345,51.18657],[5.73993,51.18757],[5.74576,51.19032],[5.75769,51.18618],[5.75821,51.1851],[5.76731,51.18413],[5.77821,51.1787],[5.77477,51.17337],[5.7801,51.17289],[5.78078,51.17208],[5.77992,51.17052],[5.77673,51.1702],[5.77585,51.17028],[5.77321,51.16967],[5.77274,51.16925],[5.77192,51.16924],[5.77093,51.1698],[5.76993,51.16905],[5.77059,51.16458],[5.77383,51.16453],[5.77385,51.16558],[5.77638,51.16565],[5.77701,51.16306],[5.7775,51.16298],[5.77808,51.16353],[5.77975,51.16356],[5.78025,51.15935],[5.77797,51.15803],[5.77677,51.15554],[5.77829,51.15502],[5.77907,51.15319],[5.78456,51.15421],[5.79005,51.15798],[5.79512,51.15798],[5.80095,51.15954],[5.80027,51.16094],[5.80361,51.1632],[5.80619,51.16352],[5.8134,51.16051],[5.8146,51.16325],[5.82473,51.16874],[5.83434,51.16314],[5.83589,51.15905],[5.84078,51.15819],[5.84129,51.15523],[5.8564,51.15071],[5.86258,51.14446],[5.85674,51.14037],[5.85159,51.13671],[5.84816,51.12938],[5.83374,51.12744],[5.82241,51.12249],[5.81211,51.11387],[5.82275,51.11171],[5.84026,51.10611],[5.83683,51.0936],[5.82584,51.08929],[5.80559,51.09102],[5.81142,51.07851],[5.80421,51.07031],[5.80868,51.06233],[5.797,51.05564],[5.77709,51.05693],[5.76576,51.03384],[5.78568,51.02412],[5.77263,51.01354],[5.77332,51.00555],[5.76885,50.99345],[5.7589,50.98912],[5.74654,50.97767],[5.72765,50.9647],[5.72834,50.95843],[5.73761,50.96145],[5.75306,50.96232],[5.76851,50.9541],[5.7589,50.94567],[5.73521,50.92446],[5.73177,50.91061],[5.7177,50.90563],[5.70362,50.9078],[5.70122,50.89545],[5.68954,50.88224],[5.68096,50.87726],[5.67169,50.87574],[5.65453,50.87054],[5.64766,50.86274],[5.64766,50.84757],[5.65453,50.83435],[5.66448,50.82437],[5.6971,50.81353],[5.71838,50.80333],[5.72113,50.77642],[5.78018,50.79639],[5.82962,50.77294],[5.9079,50.77381],[6.00403,50.76947],[6.04248,50.76252],[6.05621,50.75123],[6.129,50.73385],[6.16745,50.69037],[6.21689,50.66252],[6.2471,50.65991],[6.28143,50.64424],[6.28693,50.62333],[6.27045,50.59631],[6.24847,50.58542],[6.24058,50.56078],[6.22719,50.5538],[6.21586,50.54965],[6.20419,50.53591],[6.21552,50.52063],[6.22993,50.50295],[6.23989,50.50513],[6.2598,50.50338],[6.27766,50.50731],[6.29139,50.50076],[6.3089,50.50513],[6.3216,50.49923],[6.35078,50.49377],[6.35765,50.48722],[6.34838,50.47936],[6.35147,50.46188],[6.37756,50.45925],[6.38065,50.44657],[6.37619,50.40786],[6.36383,50.39561],[6.35387,50.38028],[6.36246,50.37634],[6.41155,50.34415],[6.41499,50.33363],[6.40675,50.31982],[6.38718,50.31763],[6.36829,50.3025],[6.35765,50.30338],[6.33018,50.31565],[6.31645,50.31478],[6.30444,50.30601],[6.29585,50.29044],[6.29414,50.27354],[6.27628,50.26411],[6.22856,50.25511],[6.21483,50.25094],[6.20659,50.24062],[6.19869,50.23403],[6.17947,50.23139],[6.18221,50.22678],[6.17672,50.22151],[6.19251,50.21206],[6.19801,50.18437],[6.19217,50.17646],[6.15166,50.16656],[6.15509,50.15491],[6.16058,50.14633],[6.15578,50.13554],[6.14376,50.13224],[6.13243,50.12454],[6.10737,50.13378],[6.11012,50.16282],[6.09947,50.16502],[6.08677,50.15425],[6.06583,50.14875],[6.02943,50.15579],[6.01639,50.17294],[5.97931,50.16898],[5.96832,50.12542],[5.94566,50.12278],[5.90378,50.10473],[5.89073,50.06948],[5.86876,50.06243],[5.87837,50.03289],[5.83168,50.01039],[5.84404,49.99935],[5.84747,49.98214],[5.81932,49.95785],[5.78773,49.95255],[5.77263,49.91144],[5.74722,49.89994],[5.7843,49.88977],[5.7946,49.87473],[5.76645,49.86012],[5.75203,49.834],[5.76645,49.80121],[5.79941,49.79855],[5.84404,49.74977],[5.83923,49.72847],[5.87906,49.72892],[5.89622,49.70672],[5.87563,49.67963],[5.91176,49.66218],[5.90567,49.65779],[5.9073,49.65479],[5.90429,49.65213],[5.90507,49.64735],[5.90567,49.64262],[5.90876,49.63868],[5.89854,49.63362],[5.89374,49.63573],[5.88524,49.6319],[5.88799,49.62645],[5.87837,49.62],[5.87829,49.61305],[5.8776,49.60737],[5.84996,49.59675],[5.85202,49.58824],[5.86318,49.58773],[5.86524,49.58974],[5.86962,49.59013],[5.87279,49.58913],[5.87502,49.58295],[5.87073,49.58134],[5.87288,49.57961],[5.87314,49.57677],[5.87451,49.5736],[5.86387,49.56965],[5.86164,49.56603],[5.85288,49.56347],[5.85168,49.56185],[5.84661,49.5608],[5.84773,49.55896],[5.84722,49.55567],[5.84224,49.55233],[5.8267,49.54933],[5.82524,49.55066],[5.82026,49.54599],[5.81623,49.54599],[5.81245,49.54582],[5.80765,49.5486],[5.79941,49.54816],[5.78859,49.55194],[5.77263,49.56141],[5.76181,49.55963],[5.75941,49.54203],[5.7407,49.53724],[5.73521,49.53813],[5.72971,49.54225],[5.7189,49.53802],[5.70156,49.5378],[5.6904,49.54392],[5.67993,49.54348],[5.67787,49.54715],[5.66757,49.54682],[5.66002,49.5505],[5.64526,49.54437],[5.62878,49.53579],[5.6262,49.52287],[5.62346,49.5144],[5.61298,49.50292],[5.60217,49.50671],[5.59359,49.51953],[5.56904,49.52565],[5.56372,49.52409],[5.55462,49.52744],[5.54192,49.51384],[5.50329,49.50504],[5.4875,49.50526],[5.48458,49.50113],[5.47085,49.49322],[5.46209,49.49679],[5.46055,49.50738],[5.45214,49.51083],[5.44304,49.51841],[5.46158,49.52788],[5.46209,49.53735],[5.4372,49.55283],[5.45368,49.56542],[5.44458,49.56586],[5.43549,49.56887],[5.42673,49.5899],[5.42862,49.59358],[5.41523,49.59947],[5.40871,49.60748],[5.39892,49.6096],[5.39652,49.6146],[5.3742,49.62128],[5.37025,49.62105],[5.36047,49.62428],[5.34897,49.62895],[5.34279,49.61505],[5.33781,49.61427],[5.32957,49.61494],[5.32064,49.61271],[5.31378,49.6096],[5.31034,49.61071],[5.30863,49.61694],[5.30279,49.62317],[5.30245,49.62962],[5.30794,49.63851],[5.31738,49.64807],[5.33043,49.65318],[5.30708,49.67085],[5.29284,49.67607],[5.27962,49.68496],[5.2791,49.6884],[5.26829,49.69495],[5.25782,49.69295],[5.2482,49.68529],[5.24117,49.68429],[5.24134,49.68851],[5.23104,49.69007],[5.2173,49.6864],[5.21421,49.68784],[5.20666,49.69451],[5.19722,49.69062],[5.18932,49.6924],[5.17542,49.6924],[5.16306,49.69218],[5.1622,49.6995],[5.1646,49.71083],[5.15963,49.71438],[5.15327,49.71671],[5.15087,49.71249],[5.14263,49.70739],[5.14006,49.71194],[5.13147,49.71205],[5.12529,49.71105],[5.12032,49.71704],[5.12358,49.72637],[5.11723,49.73757],[5.09302,49.76297],[5.08796,49.76475],[5.08452,49.76186],[5.07963,49.76164],[5.07611,49.76109],[5.07139,49.75987],[5.06727,49.76081],[5.06144,49.76192],[5.06092,49.76624],[5.04908,49.76741],[5.00599,49.7816],[5.00547,49.7832],[5.00504,49.78719],[5.00041,49.79312],[4.99741,49.79379],[4.99603,49.79506],[4.99715,49.79672],[4.99672,49.79955],[4.9938,49.79977],[4.98539,49.79888],[4.97895,49.79972],[4.96977,49.8011],[4.96779,49.79756],[4.96179,49.79717],[4.95569,49.80027],[4.94865,49.79811],[4.94814,49.79473],[4.94368,49.79035],[4.94213,49.79035],[4.94132,49.79226],[4.93887,49.7926],[4.93286,49.78977],[4.9329,49.78825],[4.93114,49.78661],[4.92939,49.78686],[4.92102,49.78805],[4.91793,49.78708],[4.91269,49.78573],[4.90475,49.78492],[4.89947,49.78597],[4.89741,49.78836],[4.88913,49.78769],[4.88724,49.78786],[4.88244,49.79049],[4.87939,49.79249],[4.87591,49.79282],[4.87068,49.79268],[4.87188,49.78922],[4.87081,49.78839],[4.86227,49.78805],[4.85712,49.78966],[4.85201,49.79035],[4.84909,49.79368],[4.8563,49.79722],[4.86076,49.80354],[4.86214,49.81373],[4.87364,49.81883],[4.86712,49.82071],[4.86712,49.82625],[4.86506,49.83444],[4.8654,49.83964],[4.85304,49.84042],[4.84943,49.84894],[4.84789,49.86278],[4.84463,49.8703],[4.85561,49.87096],[4.87484,49.89618],[4.87347,49.90459],[4.87999,49.90879],[4.87553,49.92006],[4.85424,49.92957],[4.84325,49.94636],[4.82849,49.94724],[4.78558,49.9563],[4.78523,49.9828],[4.80995,49.99626],[4.81647,50.02671],[4.83021,50.04127],[4.81441,50.04788],[4.8127,50.06794],[4.8357,50.07014],[4.83192,50.09085],[4.84291,50.10363],[4.86626,50.10318],[4.85836,50.1164],[4.88274,50.13664],[4.87072,50.14875],[4.8278,50.14963],[4.82025,50.15579],[4.76875,50.1296],[4.75262,50.10539],[4.70352,50.08424],[4.70112,50.01502],[4.69803,49.99229],[4.63383,49.98037],[4.56963,49.96712],[4.53255,49.94857],[4.51401,49.93973],[4.44122,49.93178],[4.35745,49.94327],[4.31145,49.95564],[4.22974,49.94945],[4.18785,49.95034],[4.16725,49.96801],[4.12331,49.97286],[4.12193,50.01215],[4.14734,50.05273],[4.18167,50.05493],[4.22012,50.07301],[4.1906,50.10252],[4.18922,50.1263],[4.16382,50.1219],[4.11644,50.13158],[4.13841,50.21734],[4.20708,50.25555],[4.1827,50.27025],[4.16382,50.28298],[4.15901,50.27596],[4.17309,50.2685],[4.17309,50.25994],[4.16519,50.25401],[4.13258,50.25489],[4.1312,50.26433],[4.13017,50.27091],[4.11644,50.27464],[4.12262,50.2821],[4.1185,50.2957],[4.09653,50.30864],[4.07696,50.30579],[4.07215,50.31807],[4.05533,50.32946],[4.03679,50.33998],[4.02512,50.35291],[3.98598,50.33911],[3.95748,50.33845],[3.8974,50.32267],[3.88264,50.32377],[3.88092,50.33494],[3.85448,50.33911],[3.84933,50.34875],[3.82942,50.35028],[3.82633,50.34217],[3.80711,50.3413],[3.80608,50.35072],[3.74256,50.34393],[3.73604,50.31149],[3.72437,50.30272],[3.70583,50.29921],[3.68076,50.31894],[3.66428,50.34152],[3.65227,50.37087],[3.66634,50.39123],[3.66325,50.42143],[3.65398,50.4551],[3.62995,50.46712],[3.60832,50.49006],[3.59974,50.48657],[3.55476,50.48853],[3.49915,50.47936],[3.48198,50.48635],[3.50945,50.52085],[3.4758,50.52478],[3.45726,50.50513],[3.43735,50.49945],[3.36662,50.48416],[3.27324,50.52609],[3.25951,50.60154],[3.2341,50.65251],[3.24097,50.67862],[3.24783,50.70037],[3.19565,50.70776],[3.1311,50.77642],[3.06725,50.76296],[2.99652,50.74428],[2.95807,50.67035],[2.82898,50.68602],[2.68341,50.77816],[2.57629,50.81114],[2.5708,50.93939],[2.51862,51.05866],[2.36755,51.2516],[3.08167,51.55146]]]}},be_brussels:{type:"Feature",id:"be_brussels",properties:{},geometry:{type:"Polygon",coordinates:[[[4.37973,50.76382],[4.37853,50.76811],[4.34522,50.77337],[4.34205,50.77164],[4.32952,50.77381],[4.31621,50.78624],[4.31458,50.79454],[4.30282,50.79709],[4.29802,50.80593],[4.28901,50.80691],[4.2854,50.80506],[4.27579,50.80696],[4.27218,50.81011],[4.25802,50.80935],[4.25519,50.8151],[4.24403,50.81548],[4.24343,50.82182],[4.25227,50.82697],[4.25107,50.83288],[4.25467,50.83695],[4.27193,50.84036],[4.28094,50.84215],[4.28042,50.85721],[4.27802,50.85911],[4.27699,50.86713],[4.28274,50.87227],[4.29561,50.88094],[4.29553,50.88262],[4.29149,50.88495],[4.29004,50.88982],[4.30634,50.89274],[4.31647,50.89605],[4.32892,50.90249],[4.34025,50.90411],[4.34857,50.90341],[4.36213,50.9033],[4.3726,50.90032],[4.38119,50.90319],[4.38462,50.91093],[4.39578,50.91407],[4.41543,50.91342],[4.41655,50.90757],[4.4296,50.90103],[4.43595,50.89502],[4.43106,50.89014],[4.44007,50.87845],[4.43183,50.87628],[4.4253,50.86615],[4.44599,50.85992],[4.44968,50.85591],[4.46238,50.85396],[4.46899,50.84573],[4.46959,50.83537],[4.47972,50.82036],[4.45947,50.81661],[4.45921,50.80626],[4.48238,50.79617],[4.4817,50.79134],[4.46427,50.78645],[4.435,50.775],[4.43028,50.77517],[4.38917,50.76377],[4.37973,50.76382]]]}},be_flanders:{type:"Feature",id:"be_flanders",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]]]}},be_wallonia:{type:"Feature",id:"be_wallonia",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]]]}},croatia:{type:"Feature",id:"croatia",properties:{},geometry:{type:"Polygon",coordinates:[[[18.55316,42.39709],[18.487,42.33],[16,42.2],[13,45],[13.48,45.55],[13.6,45.46],[13.67282,45.45244],[13.78445,45.47445],[13.87695,45.43477],[13.98354,45.46061],[13.95607,45.5049],[13.99868,45.52812],[14.07402,45.49231],[14.19361,45.48114],[14.23361,45.51383],[14.33098,45.47073],[14.4841,45.54339],[14.55276,45.65149],[15.16462,45.43061],[15.36301,45.48661],[15.28061,45.60731],[15.34584,45.65341],[15.24587,45.72718],[15.55939,45.85272],[15.68573,45.84315],[15.71043,46.04506],[15.61913,46.08657],[15.60059,46.16509],[15.67131,46.23068],[15.78049,46.21928],[15.79422,46.26439],[16.073,46.34266],[16.04759,46.3891],[16.15145,46.40378],[16.30028,46.38152],[16.24191,46.49508],[16.36894,46.55083],[16.66077,46.45725],[16.72462,46.39715],[16.86058,46.35783],[16.97456,46.22688],[17.17232,46.1551],[17.31102,45.97167],[17.58087,45.93874],[17.66574,45.84483],[17.86118,45.77993],[18.15765,45.79625],[18.43522,45.74655],[18.68019,45.91486],[18.77838,45.88666],[18.82507,45.91724],[18.9164,45.70714],[18.96652,45.66972],[18.89717,45.56551],[18.94817,45.54136],[19.01686,45.56369],[19.10858,45.5144],[19.08125,45.47585],[19.00341,45.48553],[18.99315,45.44969],[19.03735,45.40735],[18.9792,45.37883],[19.09424,45.3367],[19.10972,45.30469],[19.2687,45.24886],[19.42108,45.23622],[19.45198,45.16219],[19.2041,45.17236],[19.14345,45.119],[19.09331,45.13091],[19.08464,45.11852],[19.11231,45.08359],[19.1011,44.98811],[19.16343,44.94855],[19.06865,44.88961],[18.99843,44.89696],[19.01991,44.84386],[18.83764,44.84591],[18.75065,44.90197],[18.73803,44.94119],[18.75375,44.95245],[18.78491,44.94261],[18.77858,44.98426],[18.72157,44.98326],[18.66267,45.04785],[18.46602,45.05359],[18.41889,45.09637],[18.22841,45.09274],[18.2011,45.0684],[18.11746,45.06832],[18.0011,45.14282],[17.93745,45.09903],[17.93891,45.07086],[17.84756,45.03242],[17.66404,45.12204],[17.59713,45.09425],[17.16882,45.13674],[16.92275,45.23503],[16.81812,45.17296],[16.5105,45.20898],[16.46738,45.13326],[16.40374,45.10639],[16.36047,44.99622],[16.29175,44.9865],[16.11145,45.08758],[15.99747,45.21978],[15.81894,45.2072],[15.77283,45.16143],[15.80439,45.1121],[15.75505,45.05587],[15.78598,44.96966],[15.7338,44.9371],[15.78598,44.84029],[15.74818,44.81311],[15.82858,44.72686],[15.90458,44.75089],[16.14789,44.48088],[16.15253,44.38405],[16.39709,44.06983],[17.1476,43.49677],[17.22656,43.49776],[17.282,43.47769],[17.30151,43.4393],[17.26227,43.39108],[17.37488,43.2502],[17.44734,43.1998],[17.43805,43.18365],[17.63424,43.09863],[17.71339,42.97351],[17.53967,42.93531],[17.64267,42.88351],[17.67975,42.92174],[17.7903,42.89961],[17.80815,42.92073],[17.85896,42.89458],[17.90239,42.81647],[18.24898,42.61375],[18.3609,42.61526],[18.44437,42.56076],[18.43575,42.48273],[18.55316,42.39709]]]}},czechia:{type:"Feature",id:"czechia",properties:{},geometry:{type:"Polygon",coordinates:[[[14.3811,51.06902],[15.13916,51.08282],[16.42456,50.70863],[16.68823,50.32442],[16.78711,50.49246],[17.75391,50.35247],[18.58887,49.96536],[18.92944,49.51808],[18.1604,48.98022],[17.00684,48.61839],[15.13916,48.85749],[14.67773,48.55298],[13.85376,48.58206],[12.00806,50.05008],[11.92017,50.35948],[14.3811,51.06902]]]}},denmark:{type:"Feature",id:"denmark",properties:{},geometry:{type:"Polygon",coordinates:[[[7.99805,55.11608],[7.9541,56.94497],[10.62378,57.94401],[12.65625,56.01681],[12.65625,55.91535],[12.82928,55.5566],[12.60956,55.42122],[12.66449,55.25095],[14.82605,55.37911],[15.28198,55.22902],[15.11719,54.85448],[12.87598,54.85922],[12.07672,54.44769],[10.849,54.73414],[10.67871,54.58002],[9.88083,54.83708],[9.73972,54.82265],[9.60823,54.8525],[9.63158,54.87996],[9.59038,54.88668],[9.4994,54.83886],[9.43176,54.82601],[9.41013,54.84242],[9.38198,54.83827],[9.37443,54.82047],[9.34422,54.80108],[9.25152,54.80979],[9.23985,54.84993],[9.13822,54.87483],[9.06338,54.87048],[8.90167,54.90386],[8.85532,54.89517],[8.82408,54.90662],[8.79765,54.90445],[8.77602,54.893],[8.72761,54.89181],[8.67645,54.91195],[8.66066,54.90859],[8.55698,54.92063],[8.47355,55.05537],[7.99805,55.11608]]]}},"Queen-Mary-University-of-London":{type:"Feature",id:"Queen-Mary-University-of-London",properties:{},geometry:{type:"Polygon",coordinates:[[[-0.04049,51.74867],[0.03027,51.74434],[0.09827,51.7315],[0.16087,51.71065],[0.21563,51.68262],[0.26045,51.64848],[0.29361,51.60956],[0.31386,51.56737],[0.32046,51.52354],[0.31318,51.47975],[0.29235,51.43768],[0.25881,51.39894],[0.21385,51.36502],[0.15922,51.33719],[0.09701,51.31653],[0.02959,51.30381],[-0.04049,51.29952],[-0.11057,51.30381],[-0.178,51.31653],[-0.24021,51.33719],[-0.29484,51.36502],[-0.33979,51.39894],[-0.37334,51.43768],[-0.39417,51.47975],[-0.40144,51.52354],[-0.39485,51.56737],[-0.3746,51.60956],[-0.34144,51.64848],[-0.29662,51.68262],[-0.24185,51.71065],[-0.17926,51.7315],[-0.11125,51.74434],[-0.04049,51.74867]]]}},finland:{type:"Feature",id:"finland",properties:{},geometry:{type:"Polygon",coordinates:[[[24.16992,65.34851],[23.90625,66.14274],[23.68652,66.44311],[23.99414,66.80922],[23.51074,67.27204],[23.37891,67.44123],[23.73047,67.97463],[20.74219,69.03714],[21.18164,69.28726],[21.70898,69.27171],[22.45605,68.73638],[23.15918,68.65655],[23.90625,68.8318],[25.00488,68.59249],[25.40039,68.87936],[25.75195,68.95839],[25.97168,69.70287],[26.45508,69.96044],[27.20215,69.90012],[27.50977,70.0506],[27.86133,70.08056],[28.38867,69.82447],[29.04785,69.71811],[29.26758,69.53452],[28.87207,69.225],[29.0918,69.02141],[28.52051,68.89519],[28.78418,68.84767],[28.52051,68.56038],[28.69629,68.17156],[29.26758,68.0733],[30.05859,67.69277],[29.17969,67.0503],[29.0918,66.8956],[30.14648,65.73063],[29.66309,65.20147],[29.70703,64.79285],[30.05859,64.79285],[30.10254,64.41592],[30.4541,64.30182],[30.05859,63.74363],[31.59668,63.01511],[30.27832,61.89758],[27.81738,60.56538],[27.33398,60.19616],[24.65332,59.88894],[21.84082,59.46741],[20.43457,59.46741],[19.11621,60.19616],[19.2041,60.58697],[20.08301,60.75916],[20.69824,61.14324],[20.96191,61.73153],[19.99512,63.27318],[21.44531,63.66576],[22.93945,64.20638],[23.24707,64.51064],[23.81836,64.66152],[24.16992,65.34851]]]}},france:{type:"Feature",id:"france",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[9.9,42.64836],[9.9,42.02785],[9.63227,41.43244],[9.36968,41.35052],[9.32602,41.3036],[9.27311,41.29196],[9.07196,41.26129],[8.94186,41.27688],[8.8742,41.26232],[8.84542,41.26311],[8.78782,41.25725],[7.3114,41.4242],[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.24593,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],[-6.3,48.98],[-2.25,50.09],[1.26331,50.92504],[1.76605,51.17762],[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.26696,43.39308],[9.8,43.1],[9.9,42.64836]]]]}},"de-berlin-brandenburg":{type:"Feature",id:"de-berlin-brandenburg",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]]]}},"de-ostwestfalen-lippe":{type:"Feature",id:"de-ostwestfalen-lippe",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]]]}},germany:{type:"Feature",id:"germany",properties:{},geometry:{type:"Polygon",coordinates:[[[7.05048,52.62973],[7.21252,53.20274],[6.56982,53.61858],[8.30772,55.1467],[8.6483,54.96421],[9.45305,54.83313],[9.95018,54.82838],[11.99913,54.44689],[13.3889,54.89162],[14.15245,54.47562],[14.26231,53.78037],[14.44359,53.27096],[14.36119,53.0668],[14.16344,52.97097],[14.13597,52.84508],[14.62486,52.60555],[14.5919,52.35463],[14.71825,52.24042],[14.74571,52.06516],[14.60838,51.83153],[14.74571,51.69554],[14.76768,51.54206],[14.98741,51.43261],[15.03136,51.27824],[14.94347,51.04744],[14.85558,50.88138],[14.77867,50.81548],[14.64684,50.85017],[14.5974,50.99215],[14.32823,51.07506],[14.32823,50.88138],[13.01537,50.49508],[12.48253,50.38663],[12.33421,50.18305],[12.1804,50.30952],[12.12547,50.25686],[12.22984,50.09856],[12.55394,49.92912],[12.4276,49.75199],[12.5045,49.68807],[12.77916,49.35286],[12.93297,49.36002],[13.03185,49.28841],[13.57018,48.96489],[13.80089,48.81319],[13.75694,48.52297],[13.52074,48.58842],[13.45482,48.57388],[13.40538,48.36994],[13.23509,48.28959],[12.99889,48.24571],[12.75169,48.12118],[12.9879,47.86385],[12.91649,47.71623],[13.04832,47.72362],[13.09776,47.67186],[13.0648,47.50885],[12.93846,47.47173],[12.77367,47.5793],[12.8286,47.60894],[12.70226,47.70144],[12.1859,47.70514],[12.16942,47.62005],[11.86729,47.60524],[11.63109,47.59412],[11.25755,47.40114],[10.98839,47.40486],[10.88402,47.52369],[10.67528,47.55707],[10.45006,47.54594],[10.46654,47.41973],[10.34019,47.3081],[10.19737,47.27457],[10.21385,47.38998],[10.10948,47.3751],[10.08202,47.46431],[9.84581,47.55336],[9.40636,47.55336],[9.09874,47.68388],[8.90236,47.65521],[8.85292,47.70329],[8.80348,47.74025],[8.76915,47.71993],[8.80486,47.70329],[8.79524,47.68388],[8.7307,47.69867],[8.73482,47.7227],[8.71284,47.7384],[8.7513,47.76887],[8.69637,47.76425],[8.65654,47.8067],[8.63594,47.76518],[8.61122,47.80947],[8.57002,47.79286],[8.48763,47.77902],[8.41621,47.71808],[8.41347,47.68111],[8.46428,47.65891],[8.53706,47.67001],[8.60985,47.67741],[8.63457,47.64966],[8.59886,47.64319],[8.61122,47.6219],[8.56865,47.60061],[8.56865,47.6219],[8.52745,47.64041],[8.45879,47.60801],[8.50273,47.58672],[8.38463,47.57004],[8.33107,47.57375],[8.29399,47.61542],[8.2061,47.62653],[8.10173,47.56819],[7.96852,47.5617],[7.92046,47.55429],[7.89024,47.59505],[7.8257,47.58949],[7.81197,47.56726],[7.6815,47.54038],[7.6403,47.56448],[7.69386,47.5756],[7.6815,47.59412],[7.64854,47.60061],[7.61421,47.58394],[7.50641,47.70237],[7.79205,48.60749],[8.22876,48.97481],[6.84174,49.17093],[6.37482,49.48597],[6.53961,49.80963],[6.1441,50.01833],[6.19835,50.21119],[6.41808,50.35159],[6.19835,50.63117],[6.02257,50.77034],[6.02257,51.07506],[6.24229,51.37778],[5.97862,51.81456],[6.1496,51.90022],[6.44073,51.85105],[6.828,51.95611],[6.68518,52.05587],[7.04773,52.23957],[6.99554,52.45768],[6.70166,52.48445],[6.72913,52.64973],[7.05048,52.62973]]]}},"Heidelberg-University":{type:"Feature",id:"Heidelberg-University",properties:{},geometry:{type:"Polygon",coordinates:[[[8.67039,49.64365],[8.73804,49.63932],[8.80306,49.62648],[8.86292,49.60564],[8.91529,49.57762],[8.95817,49.54349],[8.98989,49.50458],[9.00928,49.46239],[9.01561,49.41856],[9.00868,49.37477],[8.98878,49.33269],[8.95671,49.29395],[8.91371,49.26002],[8.86146,49.23218],[8.80194,49.21151],[8.73744,49.19879],[8.67039,49.19449],[8.60334,49.19879],[8.53883,49.21151],[8.47931,49.23218],[8.42706,49.26002],[8.38407,49.29395],[8.352,49.33269],[8.3321,49.37477],[8.32516,49.41856],[8.33149,49.46239],[8.35088,49.50458],[8.38261,49.54349],[8.42548,49.57762],[8.47786,49.60564],[8.53771,49.62648],[8.60273,49.63932],[8.67039,49.64365]]]}},hungary:{type:"Feature",id:"hungary",properties:{},geometry:{type:"Polygon",coordinates:[[[18.43643,45.73111],[17.67426,45.83454],[17.57675,45.92823],[17.35153,45.94303],[17.14966,46.16081],[16.52756,46.50028],[16.3147,46.86582],[16.11969,46.86582],[16.28448,46.99337],[16.48224,47.01584],[16.5152,47.1505],[16.42731,47.2177],[16.43829,47.41136],[16.66763,47.44852],[16.67587,47.60616],[16.43829,47.65614],[16.54816,47.75964],[16.71844,47.73563],[16.75003,47.68111],[17.08099,47.70791],[17.04254,47.86293],[17.09473,47.96234],[17.20734,48.02484],[17.75665,47.74486],[18.71246,47.76702],[18.85529,47.82606],[18.77838,47.87767],[18.75641,47.98808],[18.82233,48.04687],[19.50348,48.1056],[19.55566,48.25028],[19.92096,48.14227],[20.34943,48.30329],[20.54718,48.54389],[20.82184,48.58751],[21.14044,48.50751],[21.47003,48.58751],[21.70074,48.36902],[21.8367,48.34073],[22.2171,48.42282],[22.38327,48.24205],[22.50549,48.24845],[22.61948,48.1056],[22.83371,48.11843],[22.90649,47.95406],[22.59064,47.75779],[22.48077,47.81131],[22.42584,47.74486],[22.32147,47.75779],[22.02759,47.51442],[22.03033,47.38161],[21.9397,47.3658],[21.48926,46.75868],[21.52908,46.73233],[21.4151,46.61737],[21.33133,46.61549],[21.10611,46.23875],[20.79575,46.27863],[20.7106,46.15035],[20.25055,46.13227],[19.82758,46.16461],[19.54742,46.17793],[19.51447,46.1018],[18.80997,45.87567],[18.70285,45.91294],[18.43643,45.73111]]]}},iceland:{type:"Feature",id:"iceland",properties:{},geometry:{type:"Polygon",coordinates:[[[-25.21,65.81],[-23.17,66.89],[-19.51,66.29],[-19.09,67.46],[-17.98,67.34],[-17.38,66.83],[-14.01,66.72],[-12.36,64.54],[-17.21,62.92],[-23.63,63.15],[-25.21,65.81]]]}},italy:{type:"Feature",id:"italy",properties:{},geometry:{type:"Polygon",coordinates:[[[7.6,43.5],[7.49542,43.86523],[7.69043,44.0718],[7.69043,44.19796],[7.42676,44.15068],[6.9873,44.26094],[6.85547,44.55916],[7.03125,44.73113],[7.00928,44.87144],[6.72363,44.91814],[6.5918,45.12005],[7.09717,45.25942],[7.14111,45.41388],[6.96533,45.61404],[6.76758,45.79817],[7.03125,45.9053],[7.55859,45.9817],[7.77832,45.93587],[8.12988,46.13417],[8.08594,46.30141],[8.48145,46.46813],[8.61328,46.13417],[8.81104,46.10371],[9.05273,45.8288],[9.07471,46.11894],[9.27246,46.25585],[9.25049,46.43786],[9.44824,46.49839],[9.49219,46.31658],[9.68994,46.31658],[9.95361,46.36209],[10.06348,46.17983],[10.17334,46.25585],[10.0415,46.453],[10.08545,46.60417],[10.26123,46.66452],[10.45898,46.49839],[10.50293,46.61926],[10.39307,46.70974],[10.41504,46.86019],[10.61279,46.87521],[11.03027,46.76997],[11.16211,46.93526],[11.27197,46.99524],[11.53564,47.01023],[11.7334,46.99524],[12.2168,47.10004],[12.15088,46.93526],[12.43652,46.70974],[12.96387,46.61926],[13.73291,46.54375],[13.71094,46.42271],[13.40332,46.33176],[13.40332,46.22545],[13.66699,46.17983],[13.51318,46.05799],[13.64502,45.96642],[13.5791,45.85941],[13.93066,45.64477],[13.82629,45.5756],[13.6,45.6294],[12.9,45.4],[12.8,45],[18.9,40.3],[18.5,39],[15,36],[11,38],[9.6,43.2],[7.6,43.5]]]}},IT_Lazio:{type:"Feature",id:"IT_Lazio",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]]]}},"Politecnico-di-Milano":{type:"Feature",id:"Politecnico-di-Milano",properties:{},geometry:{type:"Polygon",coordinates:[[[9.22852,45.68471],[9.29123,45.68038],[9.3515,45.66755],[9.40699,45.64672],[9.45556,45.61871],[9.49533,45.58459],[9.52478,45.54569],[9.54279,45.50351],[9.5487,45.45968],[9.5423,45.41589],[9.52388,45.37381],[9.49415,45.33505],[9.45428,45.30111],[9.40581,45.27326],[9.3506,45.25258],[9.29074,45.23985],[9.22852,45.23555],[9.16629,45.23985],[9.10644,45.25258],[9.05122,45.27326],[9.00275,45.30111],[8.96288,45.33505],[8.93316,45.37381],[8.91473,45.41589],[8.90833,45.45968],[8.91424,45.50351],[8.93225,45.54569],[8.9617,45.58459],[9.00147,45.61871],[9.05004,45.64672],[9.10553,45.66755],[9.16581,45.68038],[9.22852,45.68471]]]}},IT_Roma_Capitale:{type:"Feature",id:"IT_Roma_Capitale",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]]]}},south_tyrol:{type:"Feature",id:"south_tyrol",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]]]}},trentino:{type:"Feature",id:"trentino",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]]]}},"Yarmouk-University":{type:"Feature",id:"Yarmouk-University",properties:{},geometry:{type:"Polygon",coordinates:[[[35.85811,32.76124],[35.91021,32.75691],[35.96029,32.7441],[36.00642,32.72331],[36.04681,32.69532],[36.07992,32.66124],[36.10446,32.62236],[36.11951,32.5802],[36.1245,32.53638],[36.11926,32.49258],[36.10399,32.45048],[36.0793,32.4117],[36.04615,32.37772],[36.00581,32.34985],[35.95982,32.32914],[35.90996,32.31639],[35.85811,32.31208],[35.80627,32.31639],[35.75641,32.32914],[35.71042,32.34985],[35.67008,32.37772],[35.63693,32.4117],[35.61224,32.45048],[35.59697,32.49258],[35.59173,32.53638],[35.59672,32.5802],[35.61177,32.62236],[35.63631,32.66124],[35.66941,32.69532],[35.70981,32.72331],[35.75593,32.7441],[35.80602,32.75691],[35.85811,32.76124]]]}},kosovo:{type:"Feature",id:"kosovo",properties:{},geometry:{type:"Polygon",coordinates:[[[20.68323,41.85101],[20.64878,41.8621],[20.62895,41.87788],[20.59321,41.87344],[20.5834,41.88906],[20.57131,41.92032],[20.61548,41.94279],[20.61932,41.97284],[20.60727,41.98358],[20.58959,42.03994],[20.56682,42.05515],[20.55,42.08081],[20.5618,42.12415],[20.51171,42.21912],[20.4557,42.26696],[20.40232,42.28017],[20.39286,42.29328],[20.35016,42.30573],[20.34327,42.32034],[20.32919,42.32272],[20.30564,42.30975],[20.28975,42.31841],[20.25651,42.31381],[20.23897,42.32339],[20.24172,42.33451],[20.23137,42.34709],[20.24041,42.36756],[20.20299,42.40034],[20.2216,42.42031],[20.18897,42.44976],[20.18995,42.46123],[20.16241,42.50248],[20.09905,42.52756],[20.07781,42.55062],[20.05218,42.55643],[20.0611,42.56636],[20.07983,42.63561],[20.09833,42.65387],[20.02597,42.70293],[20.01357,42.73718],[20.0294,42.76543],[20.05828,42.77918],[20.17177,42.77208],[20.25749,42.77015],[20.26633,42.81006],[20.26709,42.81838],[20.40458,42.85177],[20.48421,42.87209],[20.52629,42.8857],[20.48117,42.92979],[20.48712,42.94371],[20.52036,42.97599],[20.538,42.97944],[20.54736,42.96696],[20.56759,43.00047],[20.59714,43.01791],[20.61815,43.00738],[20.63582,43.01263],[20.65529,43.03791],[20.66666,43.05941],[20.65555,43.06668],[20.65535,43.07614],[20.69024,43.09046],[20.68474,43.11734],[20.6571,43.13426],[20.60822,43.17079],[20.59313,43.19966],[20.59288,43.20807],[20.60326,43.21586],[20.61577,43.20947],[20.6759,43.21404],[20.71781,43.23861],[20.72976,43.25396],[20.78861,43.2509],[20.79902,43.26973],[20.82402,43.27416],[20.88056,43.23237],[20.89633,43.2064],[20.89185,43.19741],[20.86038,43.18418],[20.88322,43.17221],[20.968,43.12786],[20.97317,43.13725],[21.00171,43.14304],[21.02916,43.13467],[21.05505,43.11374],[21.0768,43.12108],[21.0795,43.1332],[21.09221,43.14057],[21.11813,43.11808],[21.14314,43.11815],[21.15722,43.09497],[21.14943,43.08237],[21.15915,43.04152],[21.17346,43.02927],[21.17228,43.01229],[21.18865,43.01181],[21.19528,43.02655],[21.20838,43.03051],[21.24098,43.01253],[21.25156,42.98139],[21.24127,42.95446],[21.27793,42.90132],[21.30679,42.91192],[21.33168,42.90934],[21.34717,42.90549],[21.36699,42.87815],[21.44,42.87777],[21.44185,42.85103],[21.43,42.84464],[21.42818,42.80712],[21.41748,42.77388],[21.39541,42.75691],[21.39835,42.75158],[21.45096,42.75723],[21.46671,42.74511],[21.48212,42.7524],[21.53015,42.73143],[21.56111,42.74322],[21.59623,42.731],[21.59439,42.7097],[21.67045,42.68104],[21.68037,42.6972],[21.73393,42.71782],[21.7767,42.72243],[21.77888,42.69807],[21.80449,42.65599],[21.77972,42.64209],[21.77173,42.62838],[21.77008,42.60166],[21.75125,42.58434],[21.75095,42.55505],[21.72961,42.54235],[21.70728,42.54294],[21.70222,42.53272],[21.71414,42.51308],[21.69423,42.49888],[21.67446,42.49033],[21.67458,42.48071],[21.62857,42.45056],[21.65142,42.40951],[21.62852,42.37199],[21.57112,42.35813],[21.5391,42.36425],[21.53133,42.33801],[21.56671,42.3189],[21.59596,42.27006],[21.58272,42.25167],[21.52186,42.23975],[21.50594,42.2651],[21.44573,42.27489],[21.43843,42.25552],[21.44638,42.23142],[21.43208,42.22775],[21.39412,42.24212],[21.3493,42.20076],[21.33667,42.1989],[21.33915,42.18753],[21.30895,42.13871],[21.32219,42.10706],[21.30296,42.10363],[21.29279,42.10824],[21.25722,42.08817],[21.23557,42.08617],[21.21595,42.09461],[21.20791,42.12657],[21.16719,42.1714],[21.16274,42.19266],[21.11303,42.20093],[21.05269,42.16308],[21.02143,42.14681],[20.92263,42.12229],[20.89259,42.09216],[20.83556,42.08285],[20.79199,42.07669],[20.76879,42.04106],[20.77208,41.95756],[20.77892,41.91873],[20.74544,41.8779],[20.68323,41.85101]]]}},luxembourg_full:{type:"Feature",id:"luxembourg_full",properties:{},geometry:{type:"Polygon",coordinates:[[[5.74606,49.90779],[5.75308,49.91198],[5.76368,49.9154],[5.76047,49.91732],[5.76203,49.91969],[5.76168,49.92325],[5.76479,49.92643],[5.76341,49.92731],[5.76466,49.92902],[5.76395,49.93146],[5.77097,49.93165],[5.77008,49.9332],[5.77043,49.93668],[5.77516,49.93771],[5.77389,49.94144],[5.77178,49.94448],[5.77037,49.94959],[5.77503,49.95315],[5.77367,49.95651],[5.77723,49.95774],[5.77502,49.9608],[5.78061,49.9627],[5.78563,49.96099],[5.79119,49.9618],[5.79094,49.96388],[5.79608,49.96563],[5.80022,49.96296],[5.80427,49.96314],[5.80654,49.96231],[5.81055,49.96407],[5.80968,49.96764],[5.81047,49.97065],[5.81318,49.97256],[5.81948,49.97205],[5.82022,49.97378],[5.82358,49.97519],[5.8264,49.97466],[5.82796,49.97597],[5.83204,49.97653],[5.83355,49.97854],[5.83578,49.97892],[5.83856,49.98229],[5.83924,49.98889],[5.83664,49.99116],[5.83243,49.99052],[5.82964,49.99414],[5.82359,49.99699],[5.82068,50.00081],[5.8217,50.00182],[5.82043,50.00518],[5.82225,50.00592],[5.82078,50.00776],[5.81899,50.01281],[5.82229,50.01441],[5.83013,50.01484],[5.8293,50.01577],[5.83375,50.01842],[5.8402,50.01941],[5.84113,50.01834],[5.85066,50.02256],[5.85246,50.0229],[5.85152,50.0261],[5.85326,50.02757],[5.85988,50.02888],[5.85757,50.0331],[5.85808,50.03469],[5.85607,50.03628],[5.8633,50.0394],[5.86324,50.04221],[5.86847,50.04394],[5.86746,50.04533],[5.86991,50.04594],[5.86744,50.05019],[5.86102,50.05505],[5.85752,50.05502],[5.85647,50.05768],[5.8542,50.05889],[5.85665,50.0616],[5.85673,50.06394],[5.86066,50.06921],[5.86593,50.07066],[5.86772,50.07335],[5.87878,50.0764],[5.88263,50.07656],[5.88645,50.0784],[5.88755,50.08192],[5.88658,50.09079],[5.89208,50.09942],[5.89461,50.10133],[5.8953,50.10528],[5.89532,50.11216],[5.90101,50.1162],[5.90952,50.11909],[5.91409,50.1219],[5.91741,50.12154],[5.9259,50.12441],[5.92966,50.12619],[5.93717,50.12694],[5.94426,50.12922],[5.94974,50.12917],[5.95467,50.13109],[5.96133,50.13136],[5.95854,50.13886],[5.96135,50.14256],[5.96017,50.14755],[5.96121,50.14981],[5.95814,50.15139],[5.96269,50.15333],[5.96542,50.15371],[5.96707,50.15543],[5.96431,50.15824],[5.96319,50.16094],[5.96177,50.16076],[5.96418,50.16489],[5.96425,50.17126],[5.96368,50.17263],[5.96836,50.17285],[5.97107,50.17502],[5.9893,50.1752],[6.00301,50.17633],[6.01321,50.17898],[6.01827,50.18143],[6.0248,50.18277],[6.02974,50.17106],[6.02956,50.16589],[6.03229,50.1632],[6.03755,50.1605],[6.04551,50.15768],[6.05023,50.15684],[6.05757,50.15423],[6.06422,50.1534],[6.06886,50.15535],[6.07181,50.15736],[6.07878,50.15651],[6.07856,50.15818],[6.08058,50.16311],[6.07891,50.16827],[6.07924,50.17077],[6.08447,50.17199],[6.09471,50.16929],[6.10069,50.17073],[6.10249,50.17056],[6.11982,50.16335],[6.12032,50.16192],[6.11519,50.15633],[6.12063,50.1518],[6.12561,50.15015],[6.11772,50.14732],[6.11698,50.14459],[6.11499,50.14427],[6.1123,50.13602],[6.12071,50.13613],[6.12659,50.13386],[6.13054,50.13],[6.13787,50.12985],[6.13747,50.12568],[6.13611,50.12359],[6.13029,50.12177],[6.1281,50.11596],[6.1296,50.11438],[6.13521,50.11327],[6.13114,50.10826],[6.13135,50.10657],[6.13584,50.10366],[6.1344,50.10263],[6.12986,50.10278],[6.12561,50.1011],[6.12572,50.09915],[6.12858,50.09547],[6.13219,50.09511],[6.13334,50.09374],[6.12951,50.09224],[6.12229,50.09354],[6.1195,50.08949],[6.11977,50.08578],[6.12224,50.08355],[6.1222,50.0813],[6.1185,50.07587],[6.11625,50.07449],[6.1204,50.07247],[6.12316,50.07635],[6.12497,50.0771],[6.12875,50.07468],[6.12933,50.07326],[6.12611,50.07098],[6.1214,50.06893],[6.12045,50.06477],[6.11369,50.06537],[6.11415,50.06367],[6.11247,50.06008],[6.11343,50.05823],[6.1179,50.05644],[6.12034,50.0571],[6.12037,50.06005],[6.12372,50.06014],[6.12363,50.05674],[6.1211,50.05414],[6.12163,50.0527],[6.12449,50.05147],[6.12749,50.04776],[6.13265,50.04341],[6.13454,50.03949],[6.13247,50.03499],[6.12984,50.03156],[6.13041,50.02932],[6.14081,50.02489],[6.14327,50.02458],[6.14613,50.02226],[6.14456,50.02035],[6.13815,50.01587],[6.13477,50.01634],[6.13151,50.0193],[6.12966,50.01813],[6.13365,50.01567],[6.13796,50.01148],[6.14007,50.01074],[6.14808,50.01043],[6.14973,50.0092],[6.14972,50.00681],[6.14707,50.0029],[6.14497,49.99799],[6.13992,50.00003],[6.138,49.99886],[6.14253,49.99478],[6.14665,49.99507],[6.15099,49.99423],[6.15363,49.98949],[6.15737,49.98716],[6.16315,49.98734],[6.17147,49.98547],[6.16997,49.98435],[6.16887,49.98087],[6.16736,49.97976],[6.16501,49.9727],[6.1653,49.97009],[6.16762,49.9681],[6.17077,49.9631],[6.17596,49.96188],[6.17758,49.95509],[6.17944,49.95331],[6.18247,49.95368],[6.1878,49.95634],[6.18314,49.95739],[6.18289,49.95997],[6.18074,49.96473],[6.18372,49.96793],[6.19037,49.96955],[6.19286,49.96846],[6.1931,49.96482],[6.19497,49.96026],[6.19416,49.95668],[6.19649,49.95418],[6.19865,49.95009],[6.20078,49.95293],[6.2046,49.95505],[6.20849,49.95461],[6.20884,49.95301],[6.21174,49.95023],[6.22391,49.95008],[6.22355,49.94901],[6.21654,49.94451],[6.22,49.94333],[6.22733,49.93662],[6.22369,49.9343],[6.22608,49.92893],[6.21866,49.92486],[6.2185,49.92286],[6.22961,49.92097],[6.23272,49.91707],[6.23409,49.91255],[6.23176,49.91118],[6.22756,49.91146],[6.22722,49.91039],[6.23234,49.9065],[6.23405,49.90002],[6.24076,49.89618],[6.24617,49.89565],[6.24937,49.89289],[6.25113,49.8902],[6.25792,49.8863],[6.25931,49.88312],[6.26186,49.88116],[6.26996,49.87904],[6.27297,49.87736],[6.2763,49.87689],[6.27961,49.87869],[6.28273,49.87871],[6.2858,49.87573],[6.29032,49.87539],[6.29226,49.87404],[6.29217,49.87175],[6.29384,49.86867],[6.2977,49.8663],[6.30119,49.86697],[6.30852,49.87015],[6.31127,49.86998],[6.31403,49.86745],[6.31482,49.86508],[6.3139,49.86206],[6.31468,49.85983],[6.31846,49.85525],[6.32163,49.85331],[6.3231,49.85091],[6.322,49.84686],[6.31999,49.84309],[6.32149,49.83898],[6.32747,49.83618],[6.3331,49.83732],[6.3364,49.83909],[6.33785,49.8416],[6.33877,49.84663],[6.34229,49.84928],[6.34992,49.85072],[6.36424,49.85094],[6.36598,49.85021],[6.37285,49.84256],[6.3772,49.84037],[6.37896,49.83805],[6.38244,49.83592],[6.38501,49.83266],[6.39293,49.8276],[6.39721,49.82264],[6.4031,49.8196],[6.40958,49.81793],[6.4262,49.81566],[6.42673,49.81269],[6.43149,49.81063],[6.43722,49.81371],[6.44154,49.81448],[6.44411,49.81161],[6.45401,49.8116],[6.45611,49.81272],[6.46072,49.81741],[6.46337,49.81935],[6.46975,49.82255],[6.47157,49.82279],[6.48017,49.81925],[6.48477,49.81419],[6.48925,49.81199],[6.49278,49.81162],[6.49627,49.81261],[6.50113,49.81063],[6.50686,49.80903],[6.51047,49.80311],[6.51226,49.80244],[6.51603,49.80532],[6.51763,49.80802],[6.51884,49.81252],[6.52059,49.81349],[6.52714,49.81126],[6.52978,49.80943],[6.53125,49.80575],[6.53031,49.80426],[6.52626,49.80172],[6.52067,49.79629],[6.51444,49.7937],[6.50886,49.79209],[6.50619,49.78891],[6.50929,49.78648],[6.51593,49.78424],[6.51733,49.78264],[6.5153,49.77994],[6.51134,49.77695],[6.51052,49.77349],[6.51748,49.76947],[6.51852,49.76744],[6.51906,49.76256],[6.51748,49.7601],[6.51243,49.75727],[6.50525,49.75531],[6.50097,49.7524],[6.50112,49.74833],[6.5032,49.74533],[6.50215,49.7432],[6.50276,49.74003],[6.50215,49.73713],[6.50303,49.73183],[6.50793,49.72853],[6.51583,49.72548],[6.51768,49.72346],[6.51612,49.72188],[6.51166,49.72025],[6.50315,49.72615],[6.49965,49.72657],[6.49566,49.72523],[6.49759,49.7223],[6.50662,49.71668],[6.50723,49.71347],[6.49978,49.71105],[6.49395,49.70744],[6.48105,49.69697],[6.46938,49.69291],[6.46219,49.69171],[6.4577,49.68878],[6.45493,49.68509],[6.44496,49.67583],[6.43881,49.67179],[6.43195,49.66939],[6.42699,49.66384],[6.42697,49.66212],[6.42928,49.66076],[6.43577,49.66097],[6.44051,49.65901],[6.44131,49.6574],[6.44042,49.65274],[6.43779,49.64758],[6.433,49.64013],[6.42991,49.63682],[6.4241,49.62574],[6.4223,49.62065],[6.41864,49.61639],[6.413,49.61415],[6.40594,49.60875],[6.40376,49.60528],[6.39731,49.6007],[6.39308,49.59954],[6.38499,49.59881],[6.38125,49.59654],[6.37576,49.59149],[6.37532,49.58758],[6.37808,49.58455],[6.38308,49.58105],[6.38344,49.57825],[6.37988,49.57583],[6.37567,49.5762],[6.37172,49.57821],[6.36884,49.57843],[6.36179,49.5762],[6.35882,49.57391],[6.35866,49.57164],[6.36497,49.56851],[6.3803,49.55987],[6.38333,49.55665],[6.3805,49.55007],[6.37903,49.54824],[6.37216,49.54387],[6.3686,49.54038],[6.36026,49.53533],[6.35808,49.5321],[6.35784,49.52864],[6.36339,49.51647],[6.36449,49.51529],[6.36684,49.50917],[6.36874,49.50133],[6.36786,49.49502],[6.36983,49.48866],[6.36835,49.47923],[6.36875,49.46922],[6.36772,49.46942],[6.36756,49.46506],[6.36885,49.45987],[6.36445,49.45951],[6.36055,49.46142],[6.35285,49.46732],[6.34715,49.46587],[6.34265,49.46911],[6.33875,49.46862],[6.33402,49.46694],[6.33279,49.46963],[6.3299,49.47006],[6.32065,49.47742],[6.31861,49.47801],[6.3146,49.47707],[6.31296,49.4804],[6.30802,49.47893],[6.30544,49.47714],[6.30429,49.47832],[6.29622,49.4802],[6.29511,49.48139],[6.29907,49.48761],[6.29166,49.48685],[6.29117,49.48466],[6.28754,49.48615],[6.28956,49.48643],[6.28642,49.48805],[6.28439,49.49143],[6.28834,49.49144],[6.28962,49.49372],[6.2819,49.4932],[6.27889,49.4964],[6.28133,49.50104],[6.27986,49.50328],[6.27464,49.50379],[6.27186,49.50473],[6.2633,49.50395],[6.26195,49.50714],[6.25805,49.50755],[6.25701,49.5098],[6.24845,49.50851],[6.2464,49.5092],[6.24513,49.51151],[6.24182,49.51188],[6.24172,49.51423],[6.23896,49.5135],[6.23616,49.50815],[6.22758,49.51036],[6.22,49.50877],[6.21713,49.50976],[6.21723,49.5069],[6.2145,49.50635],[6.2074,49.50625],[6.2029,49.50699],[6.19576,49.50536],[6.19525,49.50642],[6.19136,49.50598],[6.18084,49.50801],[6.17831,49.50696],[6.17497,49.51031],[6.17199,49.50814],[6.16194,49.50415],[6.16165,49.50492],[6.15711,49.50423],[6.15389,49.50163],[6.15747,49.49673],[6.16249,49.49348],[6.15734,49.49148],[6.15585,49.49339],[6.1447,49.48789],[6.14077,49.48667],[6.14176,49.49168],[6.13373,49.48998],[6.13175,49.49063],[6.12804,49.49392],[6.12676,49.49002],[6.12748,49.48233],[6.12256,49.4752],[6.12345,49.47346],[6.11419,49.47049],[6.11139,49.47252],[6.10948,49.47252],[6.10198,49.47038],[6.1026,49.4694],[6.09981,49.46746],[6.09821,49.46427],[6.09878,49.46063],[6.10102,49.45786],[6.10163,49.4543],[6.10077,49.45289],[6.09232,49.45314],[6.09208,49.45428],[6.08694,49.45504],[6.086,49.45612],[6.08071,49.45847],[6.07921,49.46392],[6.07367,49.46365],[6.07264,49.46542],[6.06631,49.46482],[6.06114,49.46539],[6.05811,49.46644],[6.05309,49.4639],[6.04693,49.45555],[6.04177,49.44785],[6.03258,49.44953],[6.02725,49.44826],[6.02588,49.45073],[6.02711,49.45364],[6.02326,49.45507],[6.01559,49.45395],[6.01382,49.45253],[6.0115,49.45352],[6.00785,49.45164],[6.00123,49.4565],[5.99793,49.4565],[5.98197,49.45106],[5.97909,49.45268],[5.9793,49.45524],[5.98236,49.45703],[5.98572,49.45574],[5.98807,49.46129],[5.98732,49.46264],[5.98258,49.46352],[5.98144,49.46122],[5.97931,49.46091],[5.97401,49.46549],[5.97363,49.46859],[5.97194,49.46957],[5.97279,49.47119],[5.97241,49.47553],[5.97467,49.47743],[5.9748,49.482],[5.97141,49.48307],[5.96809,49.4864],[5.9709,49.4884],[5.9738,49.48911],[5.97211,49.49141],[5.96613,49.49134],[5.96523,49.49276],[5.95207,49.49414],[5.94917,49.49649],[5.94199,49.49835],[5.94315,49.50023],[5.94012,49.50096],[5.93414,49.50062],[5.93241,49.49957],[5.93056,49.50064],[5.92754,49.49838],[5.92195,49.50073],[5.92001,49.50021],[5.91227,49.502],[5.9086,49.50159],[5.90363,49.49826],[5.89752,49.49676],[5.89005,49.49668],[5.88698,49.49827],[5.88183,49.49917],[5.87332,49.49852],[5.87192,49.50027],[5.86969,49.49928],[5.86626,49.49991],[5.86246,49.50187],[5.85892,49.50589],[5.85322,49.50705],[5.84973,49.50897],[5.84917,49.51273],[5.84785,49.51494],[5.8412,49.51693],[5.83811,49.51952],[5.83615,49.51987],[5.83578,49.52264],[5.8343,49.52372],[5.83412,49.52638],[5.84303,49.5295],[5.84581,49.5299],[5.83916,49.53731],[5.83708,49.54258],[5.83507,49.54234],[5.82444,49.53917],[5.82272,49.53802],[5.81716,49.53702],[5.81334,49.54155],[5.80855,49.54091],[5.80813,49.54256],[5.81795,49.54575],[5.8201,49.5476],[5.82016,49.54927],[5.82273,49.54972],[5.82604,49.55223],[5.82797,49.55001],[5.83565,49.55246],[5.84181,49.55311],[5.84201,49.5545],[5.84606,49.55628],[5.84585,49.55877],[5.84242,49.56102],[5.84515,49.56105],[5.85021,49.56322],[5.85224,49.56528],[5.86106,49.56702],[5.86041,49.56979],[5.86324,49.57051],[5.86749,49.57308],[5.8728,49.57429],[5.86975,49.57678],[5.87192,49.57963],[5.86601,49.58056],[5.87314,49.58397],[5.87146,49.58778],[5.86778,49.58965],[5.8643,49.58648],[5.85951,49.58603],[5.85007,49.58695],[5.8488,49.59043],[5.8478,49.59598],[5.84907,49.59771],[5.85581,49.5999],[5.86496,49.60433],[5.87007,49.60578],[5.8766,49.60841],[5.87575,49.61136],[5.87718,49.61231],[5.87544,49.61457],[5.87563,49.61889],[5.87665,49.6207],[5.88128,49.62429],[5.88678,49.62732],[5.88582,49.62902],[5.8827,49.63094],[5.88386,49.63298],[5.88691,49.63495],[5.89228,49.63623],[5.89762,49.63582],[5.89897,49.63438],[5.90319,49.63616],[5.90772,49.63907],[5.90437,49.64148],[5.90412,49.64561],[5.90222,49.64595],[5.90296,49.65383],[5.90541,49.65476],[5.90295,49.65758],[5.90508,49.66071],[5.91064,49.66249],[5.90865,49.6655],[5.90601,49.6656],[5.90167,49.66441],[5.90146,49.66632],[5.89809,49.66635],[5.89581,49.66875],[5.89374,49.66629],[5.89029,49.6694],[5.88748,49.66972],[5.88711,49.6679],[5.88509,49.66867],[5.88471,49.67057],[5.87694,49.67343],[5.87391,49.67326],[5.8702,49.67535],[5.8654,49.67608],[5.86181,49.68106],[5.86265,49.68456],[5.86455,49.68735],[5.8634,49.6885],[5.86698,49.69215],[5.8667,49.69436],[5.86925,49.69487],[5.87179,49.69844],[5.87788,49.70117],[5.88191,49.70541],[5.88693,49.70928],[5.88153,49.71307],[5.87482,49.71576],[5.87416,49.71742],[5.87655,49.71813],[5.87517,49.72185],[5.87072,49.72162],[5.87045,49.72341],[5.86503,49.72696],[5.86173,49.72621],[5.86004,49.72723],[5.85443,49.72469],[5.85083,49.72424],[5.84467,49.72137],[5.84093,49.72148],[5.83762,49.724],[5.83139,49.72447],[5.82633,49.72352],[5.82437,49.72605],[5.82692,49.72689],[5.82719,49.72887],[5.82542,49.732],[5.82829,49.73332],[5.82739,49.73911],[5.83263,49.74145],[5.83038,49.74338],[5.83243,49.74692],[5.83047,49.74961],[5.82798,49.75026],[5.82302,49.74947],[5.82046,49.75127],[5.82086,49.75326],[5.81785,49.75397],[5.81597,49.76221],[5.81111,49.76535],[5.80945,49.76533],[5.80724,49.77246],[5.80343,49.7766],[5.79943,49.77806],[5.79847,49.78183],[5.79204,49.78701],[5.7933,49.79057],[5.79037,49.79576],[5.78839,49.79665],[5.78519,49.79617],[5.78135,49.79227],[5.7769,49.7946],[5.7717,49.79319],[5.77026,49.79424],[5.76136,49.79305],[5.75516,49.79146],[5.75309,49.7934],[5.7529,49.79695],[5.75011,49.80895],[5.74995,49.81197],[5.75117,49.81489],[5.74624,49.81577],[5.74347,49.82111],[5.7474,49.82301],[5.74822,49.82446],[5.74632,49.82614],[5.74393,49.8313],[5.73919,49.83362],[5.74079,49.83875],[5.74296,49.83956],[5.74777,49.8385],[5.75064,49.84067],[5.74858,49.84234],[5.74821,49.84597],[5.7516,49.84718],[5.75412,49.84484],[5.75836,49.84666],[5.75821,49.84934],[5.75492,49.85172],[5.74955,49.85146],[5.74584,49.85256],[5.74609,49.85411],[5.74983,49.85433],[5.75456,49.85655],[5.76066,49.8563],[5.7545,49.86221],[5.75698,49.86511],[5.75604,49.8668],[5.7527,49.86884],[5.75393,49.87192],[5.75615,49.87317],[5.75873,49.8728],[5.76293,49.86946],[5.76556,49.86936],[5.76891,49.87227],[5.77207,49.8714],[5.77443,49.86728],[5.77747,49.87204],[5.7829,49.87187],[5.784,49.87306],[5.77896,49.8749],[5.77991,49.87714],[5.78257,49.87573],[5.78337,49.87874],[5.77884,49.88114],[5.77794,49.88388],[5.77183,49.88507],[5.77061,49.88735],[5.76736,49.88729],[5.7601,49.88929],[5.75734,49.88946],[5.75396,49.89137],[5.74787,49.89239],[5.74628,49.89416],[5.73976,49.895],[5.73578,49.89709],[5.73766,49.90103],[5.74046,49.90218],[5.73992,49.90422],[5.74667,49.90631],[5.74606,49.90779]]]}},"Universit-Mohammed-V-Rabat":{type:"Feature",id:"Universit-Mohammed-V-Rabat",properties:{},geometry:{type:"Polygon",coordinates:[[[-6.84395,34.22335],[-6.79097,34.21902],[-6.74003,34.20621],[-6.69312,34.18541],[-6.65205,34.15742],[-6.61839,34.12333],[-6.59343,34.08446],[-6.57813,34.0423],[-6.57307,33.99847],[-6.57841,33.95467],[-6.59394,33.91257],[-6.61905,33.8738],[-6.65276,33.83982],[-6.69379,33.81195],[-6.74054,33.79124],[-6.79124,33.7785],[-6.84395,33.77419],[-6.89666,33.7785],[-6.94736,33.79124],[-6.99412,33.81195],[-7.03514,33.83982],[-7.06886,33.8738],[-7.09397,33.91257],[-7.1095,33.95467],[-7.11484,33.99847],[-7.10977,34.0423],[-7.09447,34.08446],[-7.06952,34.12333],[-7.03586,34.15742],[-6.99478,34.18541],[-6.94787,34.20621],[-6.89694,34.21902],[-6.84395,34.22335]]]}},norway:{type:"Feature",id:"norway",properties:{},geometry:{type:"Polygon",coordinates:[[[25.98816,69.6179],[25.24109,68.60752],[20.42908,68.97318],[16.9519,67.9499],[13.77686,64.59561],[14.28223,64.47279],[14.08447,63.99524],[13.02979,64.10101],[12.00806,63.2633],[12.14813,61.6586],[12.87323,61.31245],[12.67548,61.0636],[12.26074,61.00241],[12.60681,60.50593],[12.49146,60.08128],[12.17285,59.88756],[11.87622,59.84895],[11.94214,59.69547],[11.6922,59.58998],[11.84601,59.25044],[11.64276,58.89471],[11.45325,58.88194],[11.44775,59.00168],[11.34888,59.11254],[11.18134,59.08009],[11.06186,58.97054],[8,57.5],[3,57.5],[3,83],[40,83],[35,71],[29.61365,69.28629],[27.98767,69.99711],[25.98816,69.6179]]]}},poland:{type:"Feature",id:"poland",properties:{},geometry:{type:"Polygon",coordinates:[[[14.03,52.84],[14.34,53.26],[14.13,54.16],[15.95,54.52],[16.31,54.76],[17.13,54.97],[18.29,55.08],[18.9,54.98],[19.69,54.5],[21.47,54.37],[22.9,54.46],[23.39,54.3],[24.01,53.17],[24.03,52.71],[23.29,52.3],[23.74,52.09],[23.64,51.61],[24.24,50.86],[24.11,50.41],[23.78,50.34],[22.77,49.55],[22.96,48.97],[22.18,49.1],[21.6,49.38],[20.93,49.24],[20.47,49.34],[20.12,49.13],[19.76,49.14],[19.45,49.51],[18.94,49.34],[18.48,49.85],[17.83,49.92],[17.54,50.21],[17.06,50.35],[17.08,50.18],[16.65,50.05],[16.11,50.41],[16.3,50.6],[16.01,50.54],[15.34,50.73],[15.14,50.93],[14.78,50.82],[14.94,51.27],[14.5,51.81],[14.66,52.05],[14.53,52.57],[14.03,52.84]]]}},portugal_full:{type:"Feature",id:"portugal_full",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-9.8183,39.46654],[-9.74297,39.61243],[-9.15336,40.2689],[-9.02339,40.66605],[-9.06499,41.53361],[-9.14028,41.86583],[-8.87097,41.86393],[-8.63678,42.04749],[-8.33189,42.08383],[-8.09392,41.80804],[-7.70414,41.90734],[-7.57391,41.82972],[-7.31532,41.84255],[-7.07696,41.95194],[-6.59946,41.9483],[-6.54827,41.6856],[-6.18916,41.57483],[-6.31541,41.39007],[-6.64838,41.24755],[-6.80893,41.0365],[-6.78122,40.3638],[-7.00889,40.22732],[-6.88093,40.04168],[-7.01552,39.67043],[-7.49982,39.59116],[-7.29426,39.45683],[-7.22161,39.1933],[-6.95113,39.0236],[-7.03302,38.87882],[-7.26003,38.72294],[-7.3179,38.44009],[-7.00719,38.02075],[-7.24557,37.9918],[-7.52267,37.55307],[-7.44048,37.39102],[-7.36982,36.96795],[-7.86807,36.75651],[-8.93249,36.70613],[-9.19102,36.85095],[-9.24841,37.0566],[-9.15002,37.89299],[-9.43993,38.30501],[-9.69634,38.59117],[-9.76209,38.77148],[-9.8183,39.46654]]],[[[-29.09544,38.59321],[-28.99861,38.75606],[-28.29551,38.95917],[-28.27253,39.20819],[-28.0874,39.30317],[-27.74735,39.18461],[-27.67871,38.98361],[-27.87807,38.81064],[-27.64155,38.71777],[-27.49973,38.96044],[-27.24547,39.00544],[-26.96172,38.94667],[-26.75981,38.69471],[-26.84006,38.53312],[-27.09439,38.40899],[-27.50811,38.51656],[-27.62972,38.36611],[-27.92878,38.22365],[-28.20466,38.18043],[-28.57194,38.21044],[-28.8786,38.34414],[-29.09544,38.59321]]],[[[-17.50448,32.80672],[-17.33873,33.02841],[-17.13654,33.07618],[-16.85671,33.03341],[-16.64298,33.07363],[-16.50498,33.26683],[-16.31749,33.32499],[-16.07438,33.22887],[-16.03974,33.01477],[-16.29967,32.80354],[-16.32939,32.68259],[-16.23823,32.34105],[-16.43009,32.20188],[-16.57427,32.2215],[-17.20787,32.49171],[-17.4233,32.6378],[-17.50448,32.80672]]],[[[-31.55753,39.44564],[-31.35042,39.8176],[-31.19648,39.91735],[-30.95234,39.88204],[-30.85434,39.72257],[-30.8573,39.42079],[-30.93102,39.25354],[-31.27059,39.14744],[-31.46896,39.23418],[-31.55753,39.44564]]],[[[-26.09699,37.8288],[-25.94558,38.06895],[-25.76694,38.10856],[-25.14862,38.0596],[-24.91128,37.9213],[-24.55129,37.35666],[-24.56246,37.16939],[-24.80604,36.81868],[-24.95535,36.7319],[-25.22799,36.74365],[-25.37354,36.82104],[-26.05947,37.72099],[-26.09699,37.8288]]],[[[-16.28153,30.01758],[-16.25213,30.14668],[-16.00891,30.32696],[-15.68743,30.28727],[-15.63441,30.07799],[-15.89594,29.862],[-16.08667,29.83115],[-16.28153,30.01758]]]]}},slovenia:{type:"Feature",id:"slovenia",properties:{},geometry:{type:"Polygon",coordinates:[[[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.37688,45.56647],[13.63953,45.6426],[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]]]}},spain:{type:"Feature",id:"spain",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-19,29],[-13,30],[-13,29],[-14,27.8],[-19,27],[-19,29]]],[[[-8.89106,41.82289],[-10,44],[-4,44],[-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],[5,40],[4,39],[-2.2,36.5],[-5.6,35.95],[-6,36],[-7.37535,37.15354],[-7.40832,37.16822],[-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]]]]}},"Universidad-Autonoma-de-Madrid":{type:"Feature",id:"Universidad-Autonoma-de-Madrid",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.69437,40.77124],[-3.63652,40.76691],[-3.58092,40.75409],[-3.52972,40.73327],[-3.48489,40.70527],[-3.44818,40.67117],[-3.42097,40.63228],[-3.40432,40.59011],[-3.39883,40.54628],[-3.4047,40.50248],[-3.42167,40.46039],[-3.44909,40.42163],[-3.48588,40.38767],[-3.53063,40.35981],[-3.58162,40.33912],[-3.6369,40.32638],[-3.69437,40.32208],[-3.75184,40.32638],[-3.80712,40.33912],[-3.85811,40.35981],[-3.90286,40.38767],[-3.93965,40.42163],[-3.96707,40.46039],[-3.98405,40.50248],[-3.98992,40.54628],[-3.98443,40.59011],[-3.96777,40.63228],[-3.94057,40.67117],[-3.90385,40.70527],[-3.85903,40.73327],[-3.80783,40.75409],[-3.75222,40.76691],[-3.69437,40.77124]]]}},"Universidad-Politcnica-de-Madrid":{type:"Feature",id:"Universidad-Politcnica-de-Madrid",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.7173,40.67259],[-3.65954,40.66826],[-3.60402,40.65544],[-3.55289,40.63463],[-3.50813,40.60662],[-3.47147,40.57252],[-3.44431,40.53363],[-3.42767,40.49146],[-3.42219,40.44764],[-3.42805,40.40384],[-3.445,40.36175],[-3.47238,40.32298],[-3.50912,40.28902],[-3.5538,40.26117],[-3.60472,40.24047],[-3.65992,40.22773],[-3.7173,40.22343],[-3.77469,40.22773],[-3.82989,40.24047],[-3.8808,40.26117],[-3.92549,40.28902],[-3.96222,40.32298],[-3.9896,40.36175],[-4.00656,40.40384],[-4.01241,40.44764],[-4.00693,40.49146],[-3.9903,40.53363],[-3.96314,40.57252],[-3.92647,40.60662],[-3.88172,40.63463],[-3.83059,40.65544],[-3.77507,40.66826],[-3.7173,40.67259]]]}},sweden:{type:"Feature",id:"sweden",properties:{},geometry:{type:"Polygon",coordinates:[[[10.57159,58.2445],[10.63202,58.9245],[11.35712,59.12804],[11.53839,58.91174],[11.62079,58.92308],[11.75812,59.24341],[11.65649,59.61777],[11.85974,59.7121],[11.82129,59.84481],[11.95862,59.91098],[12.15363,59.91235],[12.44476,60.0895],[12.48322,60.32151],[12.56012,60.50458],[12.36511,60.71217],[12.19482,61.01572],[12.64801,61.09415],[12.82928,61.34276],[12.55463,61.55018],[12.42828,61.54495],[12.12341,61.71331],[12.28546,62.26664],[12.03278,62.60851],[12.10968,62.74718],[12.06024,62.89772],[12.18658,62.99765],[11.95587,63.28183],[12.18109,63.47873],[12.1344,63.59012],[12.659,63.9856],[12.90619,64.0722],[13.20831,64.10461],[13.9801,64.03014],[14.06525,64.46214],[13.60382,64.56968],[14.26025,65.11608],[14.31519,65.23831],[14.45251,65.31412],[14.47998,65.62656],[14.57886,65.80953],[14.49097,66.15163],[14.99634,66.17161],[15.4248,66.29337],[15.33691,66.51107],[16.04004,66.93221],[16.37512,67.06743],[16.35864,67.21467],[16.06201,67.42015],[16.1499,67.52957],[16.37512,67.55266],[16.70471,67.91688],[17.25952,68.13067],[17.88025,67.99523],[18.09448,68.19809],[18.06702,68.54432],[18.39661,68.58848],[19.00085,68.52019],[19.89075,68.39109],[20.13245,68.48798],[19.89075,68.55637],[20.28076,68.78613],[19.99512,69.06268],[20.62134,69.08033],[20.86853,69.03518],[21.24756,68.8437],[21.92322,68.60652],[22.90649,68.39514],[23.73596,67.96639],[23.5437,67.8362],[23.62061,67.47492],[23.79639,67.44544],[23.81287,67.26992],[23.63159,67.23806],[24.04358,66.82868],[23.91174,66.57448],[23.71399,66.31986],[24.22485,65.97333],[24.04358,65.64469],[21.00586,63.63894],[18.57239,61.83023],[19.18762,60.53297],[19.11346,60.18387],[19.66827,59.82687],[19.90173,58.07788],[18.78662,56.9869],[16.73218,56.05977],[15.0238,55.72711],[14.36462,55.31977],[13.1163,55.22276],[12.7002,55.30414],[12.82654,55.57834],[12.84851,55.72402],[12.79358,55.83214],[12.6123,56.0751],[12.49146,56.13331],[12.07947,56.30435],[11.35437,57.67185],[10.57159,58.2445]]]}},"Istanbul-Technical-University":{type:"Feature",id:"Istanbul-Technical-University",properties:{},geometry:{type:"Polygon",coordinates:[[[29.02465,41.33019],[29.083,41.32586],[29.13907,41.31304],[29.19071,41.29222],[29.23592,41.26422],[29.27294,41.23011],[29.30037,41.19122],[29.31717,41.14905],[29.3227,41.10523],[29.31678,41.06143],[29.29965,41.01934],[29.272,40.98058],[29.2349,40.94662],[29.18977,40.91876],[29.13835,40.89807],[29.08261,40.88533],[29.02465,40.88103],[28.9667,40.88533],[28.91095,40.89807],[28.85954,40.91876],[28.81441,40.94662],[28.77731,40.98058],[28.74965,41.01934],[28.73253,41.06143],[28.72661,41.10523],[28.73214,41.14905],[28.74893,41.19122],[28.77636,41.23011],[28.81339,41.26422],[28.85859,41.29222],[28.91023,41.31304],[28.96631,41.32586],[29.02465,41.33019]]]}},east_midlands_uk:{type:"Feature",id:"east_midlands_uk",properties:{},geometry:{type:"Polygon",coordinates:[[[0.03031,53.53488],[0.28564,53.56315],[0.48889,53.10722],[0.27299,52.82421],[0.24507,52.7845],[0.27219,52.77279],[0.18631,52.73533],[0.14206,52.7399],[0.08901,52.72361],[0.06361,52.72737],[0.04413,52.71436],[0.04883,52.68175],[0.02104,52.66476],[-0.03129,52.66151],[-0.06373,52.67521],[-0.08777,52.66676],[-0.10221,52.67218],[-0.14108,52.65149],[-0.18003,52.66054],[-0.19288,52.65242],[-0.20605,52.66805],[-0.26064,52.65139],[-0.28925,52.67025],[-0.335,52.67485],[-0.35023,52.66159],[-0.40569,52.64802],[-0.45065,52.65411],[-0.49897,52.63931],[-0.52006,52.64143],[-0.55014,52.61223],[-0.54419,52.59287],[-0.55813,52.59447],[-0.57192,52.58579],[-0.58149,52.59587],[-0.58865,52.58679],[-0.60303,52.58857],[-0.66093,52.56893],[-0.69783,52.5457],[-0.71564,52.52237],[-0.75723,52.51093],[-0.77488,52.51826],[-0.82013,52.51552],[-0.86871,52.52699],[-0.88346,52.51395],[-0.88214,52.49315],[-0.89806,52.4869],[-0.88241,52.47127],[-0.90065,52.45994],[-0.94219,52.46777],[-0.95192,52.47741],[-1.0007,52.47092],[-1.04452,52.44573],[-1.03429,52.43627],[-1.04987,52.42225],[-1.08439,52.43628],[-1.12928,52.41609],[-1.14947,52.39701],[-1.20141,52.39648],[-1.30715,52.49423],[-1.52226,52.57033],[-1.52716,52.58272],[-1.56075,52.59612],[-1.55447,52.61472],[-1.57139,52.6353],[-1.54714,52.64218],[-1.54245,52.65362],[-1.55281,52.66845],[-1.58965,52.68724],[-1.59082,52.69801],[-1.65505,52.69878],[-1.65662,52.72173],[-1.70372,52.7298],[-1.69687,52.75272],[-1.66654,52.78471],[-1.61113,52.78139],[-1.61435,52.78826],[-1.58887,52.79985],[-1.59183,52.80947],[-1.6105,52.81639],[-1.58536,52.8317],[-1.62672,52.85441],[-1.69028,52.86445],[-1.70061,52.86057],[-1.70435,52.86666],[-1.72527,52.85964],[-1.77712,52.88377],[-1.79092,52.88023],[-1.80186,52.88613],[-1.81171,52.88058],[-1.83295,52.8869],[-1.85422,52.93063],[-1.82982,52.94565],[-1.82678,52.97707],[-1.76257,52.99965],[-1.75775,53.01698],[-1.75978,53.03869],[-1.7847,53.04991],[-1.77566,53.05933],[-1.79424,53.08837],[-1.78373,53.10281],[-1.82144,53.13579],[-1.81254,53.15432],[-1.8393,53.1769],[-1.87403,53.19536],[-1.95671,53.21373],[-1.96237,53.22622],[-1.9896,53.21572],[-1.97486,53.23106],[-2.00948,53.26065],[-2.00679,53.35457],[-2.009,53.36201],[-2.03173,53.36573],[-2.03385,53.37517],[-2.00464,53.38633],[-1.99233,53.41519],[-2.02371,53.42055],[-2.02738,53.43233],[-2.01366,53.43988],[-2.00422,53.43592],[-2.00823,53.44155],[-1.98579,53.45523],[-1.98809,53.48033],[-1.97428,53.48838],[-1.97159,53.50434],[-1.92197,53.50995],[-1.92678,53.52095],[-1.91189,53.53803],[-1.89411,53.5336],[-1.87349,53.54041],[-1.84182,53.51989],[-1.82223,53.52108],[-1.80428,53.537],[-1.77188,53.53384],[-1.74155,53.54105],[-1.72318,53.55991],[-1.66945,53.5532],[-1.65103,53.56166],[-1.61581,53.56305],[-1.59636,53.57692],[-1.59109,53.60677],[-1.55023,53.60421],[-1.53078,53.59311],[-1.51867,53.5997],[-1.49656,53.59736],[-1.49512,53.60317],[-1.48371,53.59485],[-1.44763,53.61272],[-1.40036,53.59865],[-1.3767,53.60646],[-1.35612,53.59535],[-1.35143,53.58106],[-1.30782,53.57535],[-1.25803,53.59198],[-1.24825,53.61634],[-1.21778,53.62429],[-1.21602,53.642],[-1.1886,53.63583],[-1.15503,53.64319],[-1.13504,53.63254],[-1.12095,53.64688],[-0.99046,53.6612],[-0.94448,53.65868],[-0.86533,53.63769],[-0.89792,53.58325],[-0.90111,53.5687],[-0.89099,53.56654],[-0.90126,53.54788],[-0.89233,53.53738],[-0.94654,53.52732],[-0.95001,53.51363],[-0.93209,53.51065],[-0.93557,53.5025],[-0.90047,53.47513],[-0.92046,53.46446],[-0.87373,53.46146],[-0.87192,53.46629],[-0.79748,53.45504],[-0.78436,53.46336],[-0.78439,53.47665],[-0.77157,53.47918],[-0.76811,53.4989],[-0.75211,53.50051],[-0.73959,53.51991],[-0.62449,53.51282],[-0.62975,53.45819],[-0.55179,53.4595],[-0.47175,53.47485],[-0.48663,53.48045],[-0.48838,53.50484],[-0.40507,53.51759],[-0.40814,53.53208],[-0.43066,53.54631],[-0.50123,53.53744],[-0.46702,53.54894],[-0.429,53.5745],[-0.41967,53.56375],[-0.33594,53.5586],[-0.30342,53.59077],[-0.30093,53.61636],[-0.24847,53.59364],[-0.25139,53.58463],[-0.23466,53.58623],[-0.22255,53.56799],[-0.19169,53.56844],[-0.21988,53.53258],[-0.21059,53.53168],[-0.20408,53.51174],[-0.2106,53.48626],[-0.18856,53.48451],[-0.1818,53.46862],[-0.15368,53.46565],[-0.14923,53.44667],[-0.13188,53.43591],[-0.12034,53.43357],[-0.08221,53.45112],[-0.10786,53.46987],[-0.0898,53.47765],[-0.09548,53.48596],[-0.07526,53.48931],[-0.06493,53.51878],[-0.01452,53.51538],[0.03031,53.53488]]]}},"england-west-midlands":{type:"Feature",id:"england-west-midlands",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]]]}},london_uk:{type:"Feature",id:"london_uk",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]]]}},united_kingdom:{type:"Feature",id:"united_kingdom",properties:{name:"United Kingdom",source:"OpenStreetMap"},geometry:{type:"Polygon",coordinates:[[[-7.24863,55.06999],[-6.96705,55.19847],[-6.59182,55.36664],[-9.93166,58.01975],[0.32957,61.43878],[2.43894,51.64531],[0.72508,50.42953],[-7.66848,49.03788],[-5.93264,51.46771],[-5.4053,53.54032],[-6.07527,54.0096],[-6.28173,54.11135],[-6.309,54.10669],[-6.31788,54.09098],[-6.33629,54.09472],[-6.33993,54.11189],[-6.3662,54.11374],[-6.36237,54.0766],[-6.37492,54.06914],[-6.37907,54.06909],[-6.37911,54.06907],[-6.37918,54.06902],[-6.39105,54.05885],[-6.41198,54.06306],[-6.44345,54.05649],[-6.45607,54.07252],[-6.47779,54.07709],[-6.4713,54.0663],[-6.51051,54.05268],[-6.53187,54.05968],[-6.55772,54.04917],[-6.58643,54.05757],[-6.59499,54.04462],[-6.62381,54.03646],[-6.66426,54.06917],[-6.66202,54.09283],[-6.64506,54.096],[-6.66127,54.12266],[-6.64886,54.12138],[-6.63961,54.13187],[-6.63436,54.16317],[-6.66539,54.19316],[-6.70601,54.20005],[-6.72106,54.18197],[-6.74076,54.18192],[-6.75617,54.19926],[-6.77562,54.19895],[-6.80097,54.21317],[-6.80042,54.2211],[-6.81617,54.22302],[-6.82774,54.26149],[-6.87804,54.27924],[-6.87229,54.28794],[-6.859,54.28191],[-6.85087,54.29728],[-6.87594,54.34641],[-6.90626,54.3503],[-6.91129,54.37474],[-6.93074,54.37575],[-6.9237,54.38284],[-6.95963,54.39221],[-6.98165,54.40946],[-6.99601,54.40538],[-7.0291,54.42137],[-7.05724,54.41108],[-7.07234,54.38839],[-7.10979,54.36824],[-7.10388,54.35574],[-7.15344,54.33501],[-7.18882,54.33765],[-7.17974,54.32046],[-7.17949,54.30924],[-7.19789,54.31106],[-7.21219,54.29962],[-7.17302,54.28613],[-7.17937,54.2726],[-7.16092,54.27371],[-7.14225,54.25559],[-7.15893,54.24396],[-7.14594,54.23957],[-7.14503,54.22473],[-7.17104,54.2176],[-7.18808,54.22492],[-7.1986,54.21578],[-7.22085,54.21581],[-7.23182,54.20557],[-7.24806,54.20446],[-7.24915,54.19817],[-7.233,54.19784],[-7.25942,54.19225],[-7.25828,54.17737],[-7.24028,54.1697],[-7.25812,54.16451],[-7.26296,54.13741],[-7.29195,54.11911],[-7.30891,54.13211],[-7.28551,54.13626],[-7.30149,54.14421],[-7.28379,54.15386],[-7.27997,54.16797],[-7.2913,54.17196],[-7.33956,54.14672],[-7.30533,54.12336],[-7.31867,54.11329],[-7.32713,54.12458],[-7.34602,54.11645],[-7.3632,54.1316],[-7.39181,54.12013],[-7.37279,54.13963],[-7.42078,54.13705],[-7.40959,54.15646],[-7.44192,54.15409],[-7.46841,54.14081],[-7.47919,54.12227],[-7.5281,54.13574],[-7.54738,54.12214],[-7.56576,54.12659],[-7.57454,54.14151],[-7.61043,54.14378],[-7.62966,54.1703],[-7.66425,54.18797],[-7.67659,54.18196],[-7.68829,54.20197],[-7.68543,54.20776],[-7.7394,54.20353],[-7.74858,54.20942],[-7.80368,54.20707],[-7.81173,54.20073],[-7.86017,54.21728],[-7.86046,54.26026],[-7.87322,54.27945],[-7.86187,54.29343],[-7.88087,54.29188],[-7.9017,54.30143],[-7.91095,54.29595],[-7.9616,54.31247],[-8.00093,54.35846],[-8.03129,54.35671],[-8.05733,54.36572],[-8.08416,54.39741],[-8.16026,54.44028],[-8.14291,54.45092],[-8.17751,54.46476],[-8.11467,54.46903],[-8.11324,54.4764],[-8.09148,54.47653],[-8.09868,54.48433],[-8.08933,54.48708],[-8.04265,54.48763],[-8.04185,54.50638],[-8.00601,54.54594],[-7.9703,54.54705],[-7.94973,54.53363],[-7.85055,54.53313],[-7.82402,54.54427],[-7.83325,54.55223],[-7.79659,54.57163],[-7.79341,54.58188],[-7.76212,54.58588],[-7.75151,54.59878],[-7.69725,54.61007],[-7.70877,54.63495],[-7.74165,54.61797],[-7.75797,54.62503],[-7.77236,54.62149],[-7.81366,54.64411],[-7.82828,54.63305],[-7.85213,54.63078],[-7.85669,54.65057],[-7.89164,54.65594],[-7.9099,54.66828],[-7.91381,54.67596],[-7.89766,54.68701],[-7.92089,54.69596],[-7.91804,54.70282],[-7.8796,54.70269],[-7.83665,54.73642],[-7.81761,54.73378],[-7.8047,54.7186],[-7.78875,54.71964],[-7.75006,54.70428],[-7.73551,54.71683],[-7.7116,54.72611],[-7.69723,54.72356],[-7.63657,54.75151],[-7.60944,54.74415],[-7.59117,54.74438],[-7.57919,54.75047],[-7.57865,54.74191],[-7.5698,54.74384],[-7.54826,54.74101],[-7.53859,54.751],[-7.54804,54.75711],[-7.54795,54.78835],[-7.52847,54.80757],[-7.47096,54.8348],[-7.44188,54.87561],[-7.45258,54.89849],[-7.44727,54.93524],[-7.39202,54.94545],[-7.4072,54.95521],[-7.4027,54.96689],[-7.40705,54.98294],[-7.39135,54.99774],[-7.40558,55.00332],[-7.37023,55.03476],[-7.34516,55.05083],[-7.31828,55.04507],[-7.29947,55.0561],[-7.28944,55.04771],[-7.27251,55.06357],[-7.24863,55.06999]]]}},"University-of-Exeter":{type:"Feature",id:"University-of-Exeter",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.53515,50.96148],[-3.46559,50.95715],[-3.39875,50.94431],[-3.33721,50.92347],[-3.28338,50.89544],[-3.23931,50.8613],[-3.20671,50.82239],[-3.18679,50.7802],[-3.1803,50.73637],[-3.18744,50.69258],[-3.20791,50.6505],[-3.24089,50.61177],[-3.28508,50.57784],[-3.33879,50.55001],[-3.39995,50.52934],[-3.46624,50.51662],[-3.53515,50.51233],[-3.60405,50.51662],[-3.67035,50.52934],[-3.73151,50.55001],[-3.78522,50.57784],[-3.82941,50.61177],[-3.86239,50.6505],[-3.88285,50.69258],[-3.89,50.73637],[-3.8835,50.7802],[-3.86359,50.82239],[-3.83098,50.8613],[-3.78692,50.89544],[-3.73308,50.92347],[-3.67155,50.94431],[-3.6047,50.95715],[-3.53515,50.96148]]]}},"University-of-Warwick":{type:"Feature",id:"University-of-Warwick",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.56119,52.60392],[-1.48906,52.59958],[-1.41974,52.58674],[-1.35593,52.56589],[-1.30011,52.53785],[-1.25443,52.50371],[-1.22063,52.46479],[-1.2,52.4226],[-1.19329,52.37877],[-1.20072,52.33498],[-1.22196,52.29291],[-1.25615,52.25418],[-1.30198,52.22025],[-1.35766,52.19243],[-1.42106,52.17177],[-1.48977,52.15905],[-1.56119,52.15476],[-1.63261,52.15905],[-1.70132,52.17177],[-1.76473,52.19243],[-1.8204,52.22025],[-1.86623,52.25418],[-1.90043,52.29291],[-1.92166,52.33498],[-1.92909,52.37877],[-1.92238,52.4226],[-1.90175,52.46479],[-1.86796,52.50371],[-1.82228,52.53785],[-1.76645,52.56589],[-1.70265,52.58674],[-1.63333,52.59958],[-1.56119,52.60392]]]}},"Sacred-Heart-Junior-College":{type:"Feature",id:"Sacred-Heart-Junior-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-89.07411,17.38565],[-89.0282,17.38133],[-88.98406,17.36853],[-88.9434,17.34776],[-88.90777,17.3198],[-88.87855,17.28574],[-88.85686,17.24689],[-88.84353,17.20475],[-88.83907,17.16093],[-88.84364,17.11712],[-88.85706,17.07501],[-88.87881,17.0362],[-88.90805,17.0022],[-88.94366,16.97429],[-88.98426,16.95356],[-89.02831,16.9408],[-89.07411,16.93649],[-89.11991,16.9408],[-89.16396,16.95356],[-89.20456,16.97429],[-89.24017,17.0022],[-89.26941,17.0362],[-89.29116,17.07501],[-89.30458,17.11712],[-89.30915,17.16093],[-89.30469,17.20475],[-89.29136,17.24689],[-89.26967,17.28574],[-89.24045,17.3198],[-89.20483,17.34776],[-89.16416,17.36853],[-89.12002,17.38133],[-89.07411,17.38565]]]}},canada_full:{type:"Feature",id:"canada_full",properties:{},geometry:{type:"Polygon",coordinates:[[[-140.99854,69.64945],[-120.9375,78.7335],[-91.05469,82.7432],[-75.58594,83.40004],[-63.45703,83.15311],[-59.32617,82.37915],[-63.76465,81.42049],[-67.19238,80.79583],[-73.21289,78.85307],[-74.9707,76.33114],[-61.34766,70.75797],[-50.1416,46.67959],[-65.98389,42.85181],[-66.95892,44.48769],[-66.9397,44.81692],[-67.13745,45.15493],[-67.26379,45.18591],[-67.31873,45.1278],[-67.43958,45.21881],[-67.44507,45.58329],[-67.79114,45.67164],[-67.78015,47.07012],[-68.19763,47.35743],[-68.39539,47.35743],[-68.37891,47.29413],[-68.90625,47.17478],[-69.06006,47.23449],[-69.08203,47.43552],[-69.22485,47.46524],[-70.00488,46.70974],[-70.05981,46.41514],[-70.18066,46.36209],[-70.3125,46.21025],[-70.24658,46.14178],[-70.3125,45.97406],[-70.26855,45.91294],[-70.42236,45.80583],[-70.42236,45.72152],[-70.71899,45.49865],[-70.62012,45.38302],[-70.80688,45.4293],[-70.85083,45.22848],[-71.00464,45.3367],[-71.1145,45.25169],[-71.26831,45.29035],[-71.41113,45.24395],[-71.5155,45.0153],[-74.81689,45.0153],[-75.31128,44.84808],[-75.7782,44.51218],[-75.82214,44.4377],[-76.43188,44.09942],[-76.79993,43.63011],[-78.68683,43.63806],[-79.19495,43.45292],[-79.07204,43.26521],[-79.05693,43.25671],[-79.04594,43.13807],[-79.06998,43.12103],[-79.06311,43.11652],[-79.05693,43.10951],[-79.07616,43.08393],[-79.07684,43.07691],[-79.01505,43.06839],[-78.99719,43.05785],[-79.02672,43.02071],[-79.01779,42.98456],[-78.98003,42.97099],[-78.96423,42.95843],[-78.93402,42.95542],[-78.91136,42.93883],[-78.90518,42.90011],[-78.93127,42.82361],[-80.07935,42.38289],[-81.27686,42.20818],[-82.39197,41.68112],[-82.68311,41.67701],[-83.07861,41.86547],[-83.15552,42.03909],[-83.12531,42.12064],[-83.13904,42.23462],[-83.07587,42.31185],[-82.98523,42.33418],[-82.81219,42.37478],[-82.63916,42.56117],[-82.59521,42.54903],[-82.52655,42.61375],[-82.41669,43.00063],[-82.13379,43.59631],[-82.51831,45.34442],[-83.59772,45.82114],[-83.43567,45.99696],[-83.57162,46.10847],[-83.65402,46.12275],[-83.76663,46.10466],[-83.82843,46.11989],[-83.89984,46.06084],[-83.95615,46.05989],[-83.974,46.1018],[-84.00833,46.11609],[-84.00696,46.14559],[-84.07974,46.18934],[-84.10995,46.24065],[-84.0976,46.25585],[-84.11545,46.26724],[-84.12094,46.31564],[-84.10309,46.32038],[-84.13467,46.36115],[-84.14841,46.42082],[-84.10995,46.50359],[-84.12781,46.531],[-84.14085,46.53241],[-84.17313,46.52722],[-84.19373,46.54092],[-84.226,46.53525],[-84.26582,46.49603],[-84.2926,46.49225],[-84.34135,46.50595],[-84.37225,46.50879],[-84.44023,46.49036],[-84.47662,46.45489],[-84.55353,46.45867],[-84.76776,46.62492],[-84.84741,46.88272],[-88.38501,48.31243],[-89.32983,47.96786],[-93.21899,48.64743],[-93.80127,48.5166],[-93.83423,48.63291],[-94.6637,48.75257],[-94.8175,49.32691],[-95.15259,49.38595],[-95.15533,49.00184],[-123.31879,49.00004],[-122.99469,48.7761],[-123.2666,48.69096],[-123.11279,48.37815],[-123.44238,48.22467],[-124.7168,48.49477],[-128.49609,48.74895],[-131.2207,53.61858],[-130.75928,54.73731],[-129.99023,55.27912],[-130.07813,56.10881],[-131.74805,56.63206],[-135.53833,59.80063],[-137.47192,58.90465],[-138.67493,59.78958],[-138.6969,59.90822],[-139.20227,60.09772],[-139.08142,60.35141],[-139.71863,60.33239],[-139.98779,60.18523],[-140.46021,60.30791],[-140.52063,60.22618],[-141.01501,60.30519],[-140.99854,69.64945]]]}},ottawa_gatineau:{type:"Feature",id:"ottawa_gatineau",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]]]}},vancouver_metro:{type:"Feature",id:"vancouver_metro",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]]]}},"Universidad-de-Costa-Rica":{type:"Feature",id:"Universidad-de-Costa-Rica",properties:{},geometry:{type:"Polygon",coordinates:[[[-84.05105,10.16183],[-84.00654,10.15751],[-83.96374,10.14472],[-83.92431,10.12396],[-83.88975,10.09601],[-83.8614,10.06196],[-83.84035,10.02313],[-83.8274,9.98099],[-83.82305,9.93717],[-83.82746,9.89336],[-83.84046,9.85124],[-83.86155,9.81243],[-83.88991,9.77841],[-83.92445,9.75049],[-83.96385,9.72975],[-84.0066,9.71698],[-84.05105,9.71267],[-84.0955,9.71698],[-84.13825,9.72975],[-84.17765,9.75049],[-84.21219,9.77841],[-84.24055,9.81243],[-84.26164,9.85124],[-84.27464,9.89336],[-84.27905,9.93717],[-84.2747,9.98099],[-84.26175,10.02313],[-84.2407,10.06196],[-84.21235,10.09601],[-84.17779,10.12396],[-84.13836,10.14472],[-84.09556,10.15751],[-84.05105,10.16183]]]}},cuba:{type:"Feature",id:"cuba",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.5,21.75],[-83.5,23.5],[-80,23.5],[-73.5,20.4],[-74.5,19.5],[-78,19.5],[-85.5,21.75]]]}},"Universidad-Nacional-Autnoma-de-Honduras":{type:"Feature",id:"Universidad-Nacional-Autnoma-de-Honduras",properties:{},geometry:{type:"Polygon",coordinates:[[[-87.16598,14.30969],[-87.12077,14.30537],[-87.07729,14.29258],[-87.03724,14.27181],[-87.00214,14.24385],[-86.97336,14.2098],[-86.95199,14.17096],[-86.93885,14.12882],[-86.93444,14.085],[-86.93893,14.04119],[-86.95215,13.99907],[-86.97357,13.96026],[-87.00237,13.92625],[-87.03745,13.89834],[-87.07745,13.87761],[-87.12085,13.86484],[-87.16598,13.86053],[-87.21111,13.86484],[-87.25451,13.87761],[-87.29451,13.89834],[-87.32959,13.92625],[-87.35839,13.96026],[-87.37982,13.99907],[-87.39303,14.04119],[-87.39752,14.085],[-87.39312,14.12882],[-87.37998,14.17096],[-87.3586,14.2098],[-87.32982,14.24385],[-87.29472,14.27181],[-87.25467,14.29258],[-87.2112,14.30537],[-87.16598,14.30969]]]}},"University-of-the-West-Indies-Mona-Campus":{type:"Feature",id:"University-of-the-West-Indies-Mona-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.74601,18.23094],[-76.69988,18.22662],[-76.65553,18.21383],[-76.61468,18.19305],[-76.57888,18.16509],[-76.54952,18.13104],[-76.52773,18.09219],[-76.51435,18.05004],[-76.50987,18.00622],[-76.51446,17.96241],[-76.52795,17.9203],[-76.5498,17.8815],[-76.57918,17.84749],[-76.61495,17.81959],[-76.65575,17.79886],[-76.7,17.7861],[-76.74601,17.78179],[-76.79202,17.7861],[-76.83627,17.79886],[-76.87707,17.81959],[-76.91284,17.84749],[-76.94222,17.8815],[-76.96407,17.9203],[-76.97756,17.96241],[-76.98215,18.00622],[-76.97767,18.05004],[-76.96429,18.09219],[-76.9425,18.13104],[-76.91314,18.16509],[-76.87734,18.19305],[-76.83649,18.21383],[-76.79214,18.22662],[-76.74601,18.23094]]]}},nicaragua:{type:"Feature",id:"nicaragua",properties:{},geometry:{type:"Polygon",coordinates:[[[-88,13],[-87.56104,13.13298],[-87.36877,12.99921],[-86.97876,13.02597],[-86.88538,13.28272],[-86.7041,13.29876],[-86.77002,13.76873],[-86.31409,13.77407],[-86.1438,14.046],[-86.01746,14.05133],[-85.75378,13.89141],[-85.16602,14.31761],[-84.96277,14.80144],[-84.4574,14.63674],[-83.39722,15.03499],[-82.5,14.9],[-82.8,12],[-83.676,10.95],[-83.66,10.8],[-83.92,10.7],[-84.688,11.076],[-84.91,10.945],[-85.615,11.215],[-85.7,11.06],[-86,11.06],[-88,13]]]}},"Universidad-Nacional-de-Ingenieria":{type:"Feature",id:"Universidad-Nacional-de-Ingenieria",properties:{},geometry:{type:"Polygon",coordinates:[[[-86.27051,12.35623],[-86.22565,12.35191],[-86.18253,12.33912],[-86.1428,12.31835],[-86.10798,12.2904],[-86.07942,12.25635],[-86.05821,12.21751],[-86.04517,12.17537],[-86.0408,12.13156],[-86.04525,12.08775],[-86.05835,12.04563],[-86.0796,12.00682],[-86.10817,11.9728],[-86.14298,11.94489],[-86.18267,11.92415],[-86.22573,11.91138],[-86.27051,11.90707],[-86.31528,11.91138],[-86.35834,11.92415],[-86.39804,11.94489],[-86.43284,11.9728],[-86.46141,12.00682],[-86.48266,12.04563],[-86.49576,12.08775],[-86.50021,12.13156],[-86.49584,12.17537],[-86.4828,12.21751],[-86.46159,12.25635],[-86.43303,12.2904],[-86.39822,12.31835],[-86.35848,12.33912],[-86.31536,12.35191],[-86.27051,12.35623]]]}},"University-of-Panama":{type:"Feature",id:"University-of-Panama",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.54102,9.23988],[-79.49663,9.23556],[-79.45395,9.22278],[-79.41462,9.20201],[-79.38016,9.17407],[-79.35188,9.14002],[-79.33089,9.10119],[-79.31797,9.05905],[-79.31363,9.01523],[-79.31802,8.97142],[-79.33099,8.9293],[-79.35201,8.89048],[-79.3803,8.85647],[-79.41475,8.82855],[-79.45405,8.80781],[-79.49668,8.79504],[-79.54102,8.79072],[-79.58535,8.79504],[-79.62798,8.80781],[-79.66728,8.82855],[-79.70173,8.85647],[-79.73002,8.89048],[-79.75104,8.9293],[-79.76401,8.97142],[-79.7684,9.01523],[-79.76406,9.05905],[-79.75114,9.10119],[-79.73015,9.14002],[-79.70187,9.17407],[-79.66741,9.20201],[-79.62808,9.22278],[-79.5854,9.23556],[-79.54102,9.23988]]]}},"Universidad-de-Puerto-Rico-Rio-Piedras":{type:"Feature",id:"Universidad-de-Puerto-Rico-Rio-Piedras",properties:{},geometry:{type:"Polygon",coordinates:[[[-66.04978,18.62742],[-66.00355,18.6231],[-65.9591,18.6103],[-65.91815,18.58953],[-65.88227,18.56157],[-65.85285,18.52751],[-65.83101,18.48866],[-65.81759,18.44651],[-65.8131,18.40269],[-65.81771,18.35889],[-65.83123,18.31677],[-65.85313,18.27797],[-65.88258,18.24397],[-65.91843,18.21606],[-65.95932,18.19533],[-66.00367,18.18257],[-66.04978,18.17826],[-66.0959,18.18257],[-66.14025,18.19533],[-66.18113,18.21606],[-66.21699,18.24397],[-66.24644,18.27797],[-66.26834,18.31677],[-66.28186,18.35889],[-66.28647,18.40269],[-66.28198,18.44651],[-66.26856,18.48866],[-66.24672,18.52751],[-66.2173,18.56157],[-66.18142,18.58953],[-66.14047,18.6103],[-66.09602,18.6231],[-66.04978,18.62742]]]}},"Ball-State-University":{type:"Feature",id:"Ball-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.40688,40.43064],[-85.34933,40.42631],[-85.294,40.41349],[-85.24306,40.39268],[-85.19846,40.36468],[-85.16193,40.33057],[-85.13486,40.29169],[-85.11829,40.24952],[-85.11283,40.20569],[-85.11866,40.16189],[-85.13555,40.1198],[-85.16283,40.08104],[-85.19944,40.04708],[-85.24396,40.01922],[-85.29469,39.99852],[-85.3497,39.98578],[-85.40688,39.98148],[-85.46406,39.98578],[-85.51907,39.99852],[-85.5698,40.01922],[-85.61432,40.04708],[-85.65093,40.08104],[-85.67821,40.1198],[-85.6951,40.16189],[-85.70094,40.20569],[-85.69547,40.24952],[-85.6789,40.29169],[-85.65183,40.33057],[-85.6153,40.36468],[-85.5707,40.39268],[-85.51976,40.41349],[-85.46444,40.42631],[-85.40688,40.43064]]]}},boston_metro:{type:"Feature",id:"boston_metro",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]]]}},"California-University-of-Pennsylvania":{type:"Feature",id:"California-University-of-Pennsylvania",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.89258,40.26902],[-79.83516,40.26469],[-79.77997,40.25187],[-79.72915,40.23105],[-79.68466,40.20305],[-79.64821,40.16895],[-79.62121,40.13006],[-79.60467,40.08789],[-79.59922,40.04407],[-79.60504,40.00027],[-79.62189,39.95818],[-79.64911,39.91941],[-79.68562,39.88545],[-79.73004,39.85759],[-79.78066,39.8369],[-79.83553,39.82416],[-79.89258,39.81986],[-79.94963,39.82416],[-80.0045,39.8369],[-80.05511,39.85759],[-80.09953,39.88545],[-80.13605,39.91941],[-80.16326,39.95818],[-80.18011,40.00027],[-80.18593,40.04407],[-80.18048,40.08789],[-80.16395,40.13006],[-80.13694,40.16895],[-80.1005,40.20305],[-80.05601,40.23105],[-80.00518,40.25187],[-79.95,40.26469],[-79.89258,40.26902]]]}},central_pa:{type:"Feature",id:"central_pa",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]]]}},"Central-Washington-University":{type:"Feature",id:"Central-Washington-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-120.49805,47.20483],[-120.43356,47.2005],[-120.37159,47.18767],[-120.31453,47.16684],[-120.26459,47.13882],[-120.22371,47.10469],[-120.19344,47.06579],[-120.17494,47.02361],[-120.16888,46.97978],[-120.17546,46.93599],[-120.19442,46.89391],[-120.22499,46.85516],[-120.26598,46.82122],[-120.3158,46.79338],[-120.37256,46.7727],[-120.43409,46.75997],[-120.49805,46.75567],[-120.562,46.75997],[-120.62353,46.7727],[-120.68029,46.79338],[-120.73012,46.82122],[-120.77111,46.85516],[-120.80167,46.89391],[-120.82063,46.93599],[-120.82722,46.97978],[-120.82116,47.02361],[-120.80265,47.06579],[-120.77238,47.10469],[-120.7315,47.13882],[-120.68157,47.16684],[-120.62451,47.18767],[-120.56253,47.2005],[-120.49805,47.20483]]]}},chattanooga:{type:"Feature",id:"chattanooga",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]]]}},"Clemson-University":{type:"Feature",id:"Clemson-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-82.79297,34.89394],[-82.73955,34.88961],[-82.68821,34.8768],[-82.64092,34.85599],[-82.59951,34.82801],[-82.56558,34.79392],[-82.54043,34.75504],[-82.52501,34.71288],[-82.51991,34.66905],[-82.5253,34.62525],[-82.54095,34.58316],[-82.56627,34.54438],[-82.60025,34.51041],[-82.6416,34.48253],[-82.68873,34.46183],[-82.73984,34.44908],[-82.79297,34.44478],[-82.8461,34.44908],[-82.8972,34.46183],[-82.94433,34.48253],[-82.98568,34.51041],[-83.01967,34.54438],[-83.04498,34.58316],[-83.06064,34.62525],[-83.06603,34.66905],[-83.06092,34.71288],[-83.04551,34.75504],[-83.02035,34.79392],[-82.98642,34.82801],[-82.94502,34.85599],[-82.89773,34.8768],[-82.84638,34.88961],[-82.79297,34.89394]]]}},cleveland:{type:"Feature",id:"cleveland",properties:{},geometry:{type:"Polygon",coordinates:[[[-82.5,41.5],[-80.95,42],[-80.95,41],[-82.5,41],[-82.5,41.5]]]}},"College-of-William-and-Mary":{type:"Feature",id:"College-of-William-and-Mary",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.72852,37.52485],[-76.67328,37.52053],[-76.62018,37.50771],[-76.57128,37.4869],[-76.52846,37.45891],[-76.49338,37.42481],[-76.46739,37.38593],[-76.45146,37.34377],[-76.44619,37.29994],[-76.45178,37.25614],[-76.46798,37.21405],[-76.49416,37.17527],[-76.5293,37.14131],[-76.57205,37.11344],[-76.62077,37.09274],[-76.6736,37.08],[-76.72852,37.0757],[-76.78343,37.08],[-76.83626,37.09274],[-76.88498,37.11344],[-76.92773,37.14131],[-76.96287,37.17527],[-76.98905,37.21405],[-77.00525,37.25614],[-77.01084,37.29994],[-77.00557,37.34377],[-76.98965,37.38593],[-76.96365,37.42481],[-76.92857,37.45891],[-76.88576,37.4869],[-76.83685,37.50771],[-76.78376,37.52053],[-76.72852,37.52485]]]}},colorado:{type:"Feature",id:"colorado",properties:{},geometry:{type:"Polygon",coordinates:[[[-109.05,37],[-109.05,41],[-102.05,41],[-102.05,37],[-109.05,37]]]}},"Cornell-University":{type:"Feature",id:"Cornell-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.4735,42.67798],[-76.41391,42.67365],[-76.35663,42.66082],[-76.30389,42.64001],[-76.25772,42.612],[-76.21991,42.57789],[-76.1919,42.539],[-76.17476,42.49683],[-76.16912,42.453],[-76.17518,42.4092],[-76.19268,42.36711],[-76.22092,42.32835],[-76.25882,42.2944],[-76.3049,42.26655],[-76.3574,42.24586],[-76.41433,42.23312],[-76.4735,42.22882],[-76.53267,42.23312],[-76.5896,42.24586],[-76.6421,42.26655],[-76.68818,42.2944],[-76.72608,42.32835],[-76.75432,42.36711],[-76.77182,42.4092],[-76.77788,42.453],[-76.77224,42.49683],[-76.7551,42.539],[-76.72709,42.57789],[-76.68928,42.612],[-76.64311,42.64001],[-76.59037,42.66082],[-76.53309,42.67365],[-76.4735,42.67798]]]}},dc_metro:{type:"Feature",id:"dc_metro",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]]]}},dfw_metro:{type:"Feature",id:"dfw_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.75,32.25],[-97.75,33.4],[-96,33.4],[-96,32.25],[-97.75,32.25]]]}},"George-Mason-University":{type:"Feature",id:"George-Mason-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.34375,39.04717],[-77.28734,39.04284],[-77.23312,39.03002],[-77.18318,39.00921],[-77.13947,38.98121],[-77.10365,38.94711],[-77.07711,38.90823],[-77.06086,38.86606],[-77.05549,38.82224],[-77.06121,38.77844],[-77.07776,38.73635],[-77.10449,38.69758],[-77.14037,38.66361],[-77.18402,38.63575],[-77.23376,38.61506],[-77.28769,38.60231],[-77.34375,38.59801],[-77.39981,38.60231],[-77.45374,38.61506],[-77.50348,38.63575],[-77.54713,38.66361],[-77.58301,38.69758],[-77.60974,38.73635],[-77.62629,38.77844],[-77.63201,38.82224],[-77.62664,38.86606],[-77.61039,38.90823],[-77.58385,38.94711],[-77.54803,38.98121],[-77.50432,39.00921],[-77.45438,39.03002],[-77.40016,39.04284],[-77.34375,39.04717]]]}},grand_junction_co:{type:"Feature",id:"grand_junction_co",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]]]}},hrva:{type:"Feature",id:"hrva",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]]]}},"Indiana-University-of-Pennsylvania":{type:"Feature",id:"Indiana-University-of-Pennsylvania",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.16139,40.83872],[-79.10348,40.83439],[-79.04782,40.82157],[-78.99657,40.80076],[-78.9517,40.77275],[-78.91495,40.73865],[-78.88772,40.69976],[-78.87104,40.65759],[-78.86555,40.61377],[-78.87142,40.56997],[-78.88842,40.52788],[-78.91586,40.48911],[-78.95269,40.45515],[-78.99749,40.4273],[-79.04853,40.4066],[-79.10386,40.39387],[-79.16139,40.38956],[-79.21892,40.39387],[-79.27426,40.4066],[-79.3253,40.4273],[-79.37009,40.45515],[-79.40692,40.48911],[-79.43437,40.52788],[-79.45136,40.56997],[-79.45724,40.61377],[-79.45174,40.65759],[-79.43507,40.69976],[-79.40784,40.73865],[-79.37108,40.77275],[-79.32622,40.80076],[-79.27496,40.82157],[-79.2193,40.83439],[-79.16139,40.83872]]]}},"Jacksonville-State-University":{type:"Feature",id:"Jacksonville-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.76795,34.04756],[-85.71507,34.04323],[-85.66424,34.03042],[-85.61743,34.00962],[-85.57644,33.98163],[-85.54285,33.94754],[-85.51794,33.90867],[-85.50268,33.86651],[-85.49762,33.82268],[-85.50295,33.77888],[-85.51845,33.73679],[-85.5435,33.69801],[-85.57715,33.66403],[-85.61809,33.63616],[-85.66475,33.61545],[-85.71534,33.6027],[-85.76795,33.5984],[-85.82055,33.6027],[-85.87115,33.61545],[-85.91781,33.63616],[-85.95874,33.66403],[-85.99239,33.69801],[-86.01745,33.73679],[-86.03295,33.77888],[-86.03828,33.82268],[-86.03322,33.86651],[-86.01795,33.90867],[-85.99305,33.94754],[-85.95945,33.98163],[-85.91846,34.00962],[-85.87165,34.03042],[-85.82082,34.04323],[-85.76795,34.04756]]]}},"Kansas-State-University":{type:"Feature",id:"Kansas-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-96.5918,39.38872],[-96.53511,39.38439],[-96.48062,39.37157],[-96.43045,39.35076],[-96.38652,39.32276],[-96.35053,39.28866],[-96.32387,39.24978],[-96.30753,39.20761],[-96.30215,39.16378],[-96.30789,39.11998],[-96.32452,39.07789],[-96.35139,39.03912],[-96.38744,39.00516],[-96.4313,38.9773],[-96.48128,38.95661],[-96.53546,38.94386],[-96.5918,38.93956],[-96.64813,38.94386],[-96.70232,38.95661],[-96.75229,38.9773],[-96.79615,39.00516],[-96.83221,39.03912],[-96.85907,39.07789],[-96.87571,39.11998],[-96.88145,39.16378],[-96.87606,39.20761],[-96.85973,39.24978],[-96.83306,39.28866],[-96.79708,39.32276],[-96.75315,39.35076],[-96.70297,39.37157],[-96.64848,39.38439],[-96.5918,39.38872]]]}},la_metro:{type:"Feature",id:"la_metro",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]]]}},massachusetts:{type:"Feature",id:"massachusetts",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]]]}},"McGill-University":{type:"Feature",id:"McGill-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.5787,45.73088],[-73.51593,45.72655],[-73.45561,45.71372],[-73.40007,45.69289],[-73.35147,45.66488],[-73.31166,45.63076],[-73.28219,45.59186],[-73.26416,45.54968],[-73.25825,45.50585],[-73.26465,45.46206],[-73.28309,45.41998],[-73.31284,45.38122],[-73.35274,45.34728],[-73.40125,45.31943],[-73.45652,45.29875],[-73.51642,45.28602],[-73.5787,45.28172],[-73.64097,45.28602],[-73.70088,45.29875],[-73.75614,45.31943],[-73.80465,45.34728],[-73.84455,45.38122],[-73.8743,45.41998],[-73.89274,45.46206],[-73.89914,45.50585],[-73.89323,45.54968],[-73.8752,45.59186],[-73.84573,45.63076],[-73.80593,45.66488],[-73.75732,45.69289],[-73.70178,45.71372],[-73.64146,45.72655],[-73.5787,45.73088]]]}},"Miami-University":{type:"Feature",id:"Miami-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-84.73174,39.73566],[-84.67477,39.73133],[-84.62001,39.71851],[-84.56958,39.6977],[-84.52543,39.6697],[-84.48927,39.6356],[-84.46247,39.59671],[-84.44606,39.55454],[-84.44065,39.51072],[-84.44642,39.46692],[-84.46314,39.42483],[-84.49014,39.38606],[-84.52638,39.3521],[-84.57045,39.32424],[-84.62067,39.30354],[-84.67513,39.2908],[-84.73174,39.2865],[-84.78835,39.2908],[-84.84281,39.30354],[-84.89303,39.32424],[-84.9371,39.3521],[-84.97334,39.38606],[-85.00034,39.42483],[-85.01706,39.46692],[-85.02283,39.51072],[-85.01742,39.55454],[-85.00101,39.59671],[-84.97421,39.6356],[-84.93805,39.6697],[-84.8939,39.6977],[-84.84347,39.71851],[-84.78871,39.73133],[-84.73174,39.73566]]]}},minneapolis_st_paul_metro:{type:"Feature",id:"minneapolis_st_paul_metro",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]]]}},"Monroe-Community-College":{type:"Feature",id:"Monroe-Community-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.61025,43.32617],[-77.55003,43.32184],[-77.49214,43.30901],[-77.43884,43.28819],[-77.39219,43.26018],[-77.35398,43.22607],[-77.32568,43.18718],[-77.30836,43.14501],[-77.30267,43.10118],[-77.30879,43.05738],[-77.32648,43.0153],[-77.35502,42.97654],[-77.39332,42.94258],[-77.43988,42.91473],[-77.49294,42.89405],[-77.55046,42.88131],[-77.61025,42.87701],[-77.67004,42.88131],[-77.72756,42.89405],[-77.78061,42.91473],[-77.82718,42.94258],[-77.86547,42.97654],[-77.89402,43.0153],[-77.9117,43.05738],[-77.91783,43.10118],[-77.91214,43.14501],[-77.89482,43.18718],[-77.86652,43.22607],[-77.82831,43.26018],[-77.78166,43.28819],[-77.72836,43.30901],[-77.67047,43.32184],[-77.61025,43.32617]]]}},"Montgomery-College":{type:"Feature",id:"Montgomery-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.15782,39.32194],[-77.10119,39.31761],[-77.04675,39.30479],[-76.99662,39.28398],[-76.95274,39.25598],[-76.91678,39.22188],[-76.89014,39.183],[-76.87383,39.14083],[-76.86844,39.097],[-76.87418,39.0532],[-76.8908,39.01111],[-76.91764,38.97234],[-76.95366,38.93838],[-76.99747,38.91052],[-77.0474,38.88982],[-77.10154,38.87708],[-77.15782,38.87278],[-77.2141,38.87708],[-77.26823,38.88982],[-77.31816,38.91052],[-77.36198,38.93838],[-77.398,38.97234],[-77.42484,39.01111],[-77.44146,39.0532],[-77.4472,39.097],[-77.44181,39.14083],[-77.42549,39.183],[-77.39885,39.22188],[-77.3629,39.25598],[-77.31902,39.28398],[-77.26889,39.30479],[-77.21445,39.31761],[-77.15782,39.32194]]]}},mt_vernon_wa:{type:"Feature",id:"mt_vernon_wa",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.3,49],[-122,49],[-122,48],[-123.2,48.4],[-123.3,49]]]}},"New-York-University":{type:"Feature",id:"New-York-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.00391,40.93853],[-73.94591,40.9342],[-73.89017,40.92138],[-73.83883,40.90057],[-73.7939,40.87257],[-73.75709,40.83846],[-73.72982,40.79957],[-73.71312,40.7574],[-73.70762,40.71358],[-73.7135,40.66978],[-73.73053,40.62769],[-73.75801,40.58893],[-73.7949,40.55497],[-73.83976,40.52711],[-73.89087,40.50642],[-73.94629,40.49368],[-74.00391,40.48938],[-74.06152,40.49368],[-74.11694,40.50642],[-74.16805,40.52711],[-74.21291,40.55497],[-74.2498,40.58893],[-74.27729,40.62769],[-74.29431,40.66978],[-74.30019,40.71358],[-74.29469,40.7574],[-74.27799,40.79957],[-74.25072,40.83846],[-74.21391,40.87257],[-74.16898,40.90057],[-74.11765,40.92138],[-74.0619,40.9342],[-74.00391,40.93853]]]}},nyc_metro:{type:"Feature",id:"nyc_metro",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]]]}},"Ohio-Wesleyan-University":{type:"Feature",id:"Ohio-Wesleyan-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-83.06823,40.52082],[-83.0106,40.51649],[-82.9552,40.50367],[-82.90419,40.48285],[-82.85953,40.45485],[-82.82295,40.42075],[-82.79585,40.38186],[-82.77925,40.33969],[-82.77378,40.29586],[-82.77963,40.25207],[-82.79654,40.20998],[-82.82385,40.17121],[-82.86051,40.13725],[-82.90509,40.10939],[-82.95589,40.0887],[-83.01097,40.07596],[-83.06823,40.07166],[-83.12549,40.07596],[-83.18056,40.0887],[-83.23136,40.10939],[-83.27595,40.13725],[-83.3126,40.17121],[-83.33992,40.20998],[-83.35683,40.25207],[-83.36268,40.29586],[-83.3572,40.33969],[-83.34061,40.38186],[-83.31351,40.42075],[-83.27692,40.45485],[-83.23227,40.48285],[-83.18126,40.50367],[-83.12586,40.51649],[-83.06823,40.52082]]]}},"Oklahoma-State-University":{type:"Feature",id:"Oklahoma-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.07253,36.34551],[-97.01814,36.34119],[-96.96586,36.32837],[-96.9177,36.30756],[-96.87554,36.27957],[-96.841,36.24548],[-96.81539,36.2066],[-96.7997,36.16444],[-96.79451,36.12061],[-96.80001,36.07681],[-96.81596,36.03472],[-96.84173,35.99594],[-96.87634,35.96197],[-96.91844,35.9341],[-96.96642,35.9134],[-97.01845,35.90066],[-97.07253,35.89636],[-97.12662,35.90066],[-97.17865,35.9134],[-97.22663,35.9341],[-97.26873,35.96197],[-97.30333,35.99594],[-97.32911,36.03472],[-97.34506,36.07681],[-97.35055,36.12061],[-97.34537,36.16444],[-97.32967,36.2066],[-97.30407,36.24548],[-97.26952,36.27957],[-97.22736,36.30756],[-97.17921,36.32837],[-97.12693,36.34119],[-97.07253,36.34551]]]}},philly_metro:{type:"Feature",id:"philly_metro",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]]]}},phoenix:{type:"Feature",id:"phoenix",properties:{},geometry:{type:"Polygon",coordinates:[[[-113,32.7],[-113,34],[-111.1,34],[-111.1,32.7],[-113,32.7]]]}},portland_me:{type:"Feature",id:"portland_me",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]]]}},portland_or:{type:"Feature",id:"portland_or",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]]]}},salt_lake_city:{type:"Feature",id:"salt_lake_city",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]]]}},seattle:{type:"Feature",id:"seattle",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]]]}},sf_bay_area:{type:"Feature",id:"sf_bay_area",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]]]}},south_sf_bay_area:{type:"Feature",id:"south_sf_bay_area",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]]]}},st_louis:{type:"Feature",id:"st_louis",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]]]}},"State-University-of-New-York-Geneseo":{type:"Feature",id:"State-University-of-New-York-Geneseo",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.7832,43.0361],[-77.72327,43.03177],[-77.66566,43.01895],[-77.61261,42.99813],[-77.56618,42.97012],[-77.52815,42.93601],[-77.49998,42.89712],[-77.48274,42.85494],[-77.47707,42.81111],[-77.48316,42.76732],[-77.50076,42.72523],[-77.52917,42.68647],[-77.56729,42.65252],[-77.61364,42.62467],[-77.66644,42.60398],[-77.72369,42.59124],[-77.7832,42.58694],[-77.84272,42.59124],[-77.89996,42.60398],[-77.95277,42.62467],[-77.99912,42.65252],[-78.03723,42.68647],[-78.06564,42.72523],[-78.08324,42.76732],[-78.08934,42.81111],[-78.08367,42.85494],[-78.06643,42.89712],[-78.03826,42.93601],[-78.00023,42.97012],[-77.9538,42.99813],[-77.90075,43.01895],[-77.84314,43.03177],[-77.7832,43.0361]]]}},"SUNY-at-Fredonia":{type:"Feature",id:"SUNY-at-Fredonia",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.36523,42.64804],[-79.30567,42.6437],[-79.24842,42.63088],[-79.19571,42.61006],[-79.14956,42.58206],[-79.11177,42.54795],[-79.08377,42.50906],[-79.06664,42.46688],[-79.061,42.42305],[-79.06706,42.37926],[-79.08454,42.33717],[-79.11278,42.29841],[-79.15065,42.26445],[-79.19671,42.2366],[-79.24919,42.21591],[-79.30609,42.20318],[-79.36523,42.19888],[-79.42438,42.20318],[-79.48128,42.21591],[-79.53376,42.2366],[-79.57982,42.26445],[-79.61769,42.29841],[-79.64592,42.33717],[-79.66341,42.37926],[-79.66947,42.42305],[-79.66383,42.46688],[-79.64669,42.50906],[-79.6187,42.54795],[-79.58091,42.58206],[-79.53476,42.61006],[-79.48205,42.63088],[-79.4248,42.6437],[-79.36523,42.64804]]]}},tampa_bay:{type:"Feature",id:"tampa_bay",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,28.2],[-82.2,28.2],[-82.2,27.55],[-83,27.55],[-83,28.2]]]}},"Texas-Tech-University":{type:"Feature",id:"Texas-Tech-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-101.86523,33.80259],[-101.81251,33.79827],[-101.76183,33.78546],[-101.71515,33.76465],[-101.67428,33.73667],[-101.64078,33.70258],[-101.61595,33.66371],[-101.60072,33.62155],[-101.59568,33.57772],[-101.60099,33.53392],[-101.61644,33.49182],[-101.64143,33.45304],[-101.67498,33.41907],[-101.7158,33.39119],[-101.76233,33.37049],[-101.81278,33.35774],[-101.86523,33.35344],[-101.91769,33.35774],[-101.96814,33.37049],[-102.01467,33.39119],[-102.05549,33.41907],[-102.08904,33.45304],[-102.11403,33.49182],[-102.12948,33.53392],[-102.13479,33.57772],[-102.12975,33.62155],[-102.11452,33.66371],[-102.08969,33.70258],[-102.05619,33.73667],[-102.01532,33.76465],[-101.96864,33.78546],[-101.91796,33.79827],[-101.86523,33.80259]]]}},"The-Citadel":{type:"Feature",id:"The-Citadel",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.96064,33.02165],[-79.90838,33.01732],[-79.85816,33.00451],[-79.81189,32.98371],[-79.77138,32.95573],[-79.73818,32.92164],[-79.71357,32.88277],[-79.69847,32.84061],[-79.69347,32.79679],[-79.69873,32.75298],[-79.71404,32.71088],[-79.73881,32.6721],[-79.77206,32.63813],[-79.81252,32.61025],[-79.85863,32.58954],[-79.90864,32.57679],[-79.96064,32.57249],[-80.01263,32.57679],[-80.06264,32.58954],[-80.10876,32.61025],[-80.14921,32.63813],[-80.18247,32.6721],[-80.20723,32.71088],[-80.22254,32.75298],[-80.2278,32.79679],[-80.2228,32.84061],[-80.2077,32.88277],[-80.18309,32.92164],[-80.14989,32.95573],[-80.10938,32.98371],[-80.06312,33.00451],[-80.01289,33.01732],[-79.96064,33.02165]]]}},"The-George-Washington-University":{type:"Feature",id:"The-George-Washington-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.04812,39.12442],[-76.99165,39.12009],[-76.93737,39.10727],[-76.88738,39.08646],[-76.84362,39.05846],[-76.80776,39.02436],[-76.7812,38.98548],[-76.76492,38.94331],[-76.75955,38.89948],[-76.76527,38.85569],[-76.78184,38.81359],[-76.80861,38.77483],[-76.84453,38.74086],[-76.88822,38.713],[-76.93801,38.6923],[-76.992,38.67956],[-77.04812,38.67526],[-77.10425,38.67956],[-77.15823,38.6923],[-77.20803,38.713],[-77.25172,38.74086],[-77.28764,38.77483],[-77.31441,38.81359],[-77.33097,38.85569],[-77.33669,38.89948],[-77.33132,38.94331],[-77.31505,38.98548],[-77.28848,39.02436],[-77.25263,39.05846],[-77.20887,39.08646],[-77.15888,39.10727],[-77.1046,39.12009],[-77.04812,39.12442]]]}},"The-Johns-Hopkins-University-SAIS":{type:"Feature",id:"The-Johns-Hopkins-University-SAIS",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.04027,39.13272],[-76.98379,39.12839],[-76.9295,39.11557],[-76.87951,39.09476],[-76.83574,39.06677],[-76.79988,39.03267],[-76.77331,38.99378],[-76.75704,38.95161],[-76.75167,38.90779],[-76.75739,38.86399],[-76.77396,38.8219],[-76.80073,38.78313],[-76.83665,38.74916],[-76.88035,38.7213],[-76.93015,38.70061],[-76.98414,38.68787],[-77.04027,38.68356],[-77.0964,38.68787],[-77.15039,38.70061],[-77.20019,38.7213],[-77.24389,38.74916],[-77.27982,38.78313],[-77.30658,38.8219],[-77.32316,38.86399],[-77.32888,38.90779],[-77.32351,38.95161],[-77.30723,38.99378],[-77.28066,39.03267],[-77.2448,39.06677],[-77.20104,39.09476],[-77.15104,39.11557],[-77.09675,39.12839],[-77.04027,39.13272]]]}},"The-Pennsylvania-State-University":{type:"Feature",id:"The-Pennsylvania-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.85976,41.02277],[-77.80169,41.01844],[-77.74587,41.00562],[-77.69448,40.9848],[-77.64948,40.9568],[-77.61263,40.92269],[-77.58532,40.88381],[-77.5686,40.84164],[-77.5631,40.79781],[-77.56899,40.75401],[-77.58603,40.71192],[-77.61355,40.67316],[-77.65049,40.6392],[-77.6954,40.61134],[-77.74658,40.59065],[-77.80207,40.57791],[-77.85976,40.57361],[-77.91744,40.57791],[-77.97293,40.59065],[-78.02411,40.61134],[-78.06903,40.6392],[-78.10596,40.67316],[-78.13348,40.71192],[-78.15053,40.75401],[-78.15642,40.79781],[-78.15091,40.84164],[-78.13419,40.88381],[-78.10689,40.92269],[-78.07003,40.9568],[-78.02504,40.9848],[-77.97364,41.00562],[-77.91783,41.01844],[-77.85976,41.02277]]]}},"University-of-California-Davis":{type:"Feature",id:"University-of-California-Davis",properties:{},geometry:{type:"Polygon",coordinates:[[[-121.72852,38.77274],[-121.67232,38.76842],[-121.61831,38.7556],[-121.56857,38.73479],[-121.52502,38.70679],[-121.48934,38.67269],[-121.4629,38.63381],[-121.44671,38.59164],[-121.44136,38.54781],[-121.44705,38.50402],[-121.46354,38.46192],[-121.49017,38.42315],[-121.52591,38.38919],[-121.56939,38.36133],[-121.61894,38.34063],[-121.67267,38.32789],[-121.72852,38.32359],[-121.78437,38.32789],[-121.83809,38.34063],[-121.88764,38.36133],[-121.93112,38.38919],[-121.96686,38.42315],[-121.99349,38.46192],[-122.00998,38.50402],[-122.01567,38.54781],[-122.01032,38.59164],[-121.99413,38.63381],[-121.96769,38.67269],[-121.93201,38.70679],[-121.88847,38.73479],[-121.83872,38.7556],[-121.78471,38.76842],[-121.72852,38.77274]]]}},"University-of-Central-Florida":{type:"Feature",id:"University-of-Central-Florida",properties:{},geometry:{type:"Polygon",coordinates:[[[-81.38672,28.68361],[-81.33678,28.67929],[-81.28877,28.66648],[-81.24455,28.64569],[-81.20582,28.61771],[-81.17407,28.58364],[-81.15052,28.54477],[-81.13608,28.50262],[-81.13127,28.45879],[-81.13628,28.41499],[-81.15091,28.37289],[-81.17457,28.3341],[-81.20636,28.30011],[-81.24505,28.27223],[-81.28915,28.25151],[-81.33699,28.23876],[-81.38672,28.23445],[-81.43645,28.23876],[-81.48428,28.25151],[-81.52839,28.27223],[-81.56708,28.30011],[-81.59887,28.3341],[-81.62253,28.37289],[-81.63715,28.41499],[-81.64217,28.45879],[-81.63736,28.50262],[-81.62291,28.54477],[-81.59937,28.58364],[-81.56762,28.61771],[-81.52889,28.64569],[-81.48467,28.66648],[-81.43666,28.67929],[-81.38672,28.68361]]]}},"University-of-Chicago":{type:"Feature",id:"University-of-Chicago",properties:{},geometry:{type:"Polygon",coordinates:[[[-87.59878,42.0135],[-87.53981,42.00917],[-87.48314,41.99634],[-87.43095,41.97553],[-87.38527,41.94752],[-87.34785,41.91341],[-87.32013,41.87452],[-87.30316,41.83235],[-87.29758,41.78852],[-87.30357,41.74473],[-87.32088,41.70264],[-87.34882,41.66388],[-87.38632,41.62992],[-87.43192,41.60207],[-87.48388,41.58138],[-87.54022,41.56864],[-87.59878,41.56434],[-87.65734,41.56864],[-87.71367,41.58138],[-87.76563,41.60207],[-87.81124,41.62992],[-87.84873,41.66388],[-87.87668,41.70264],[-87.89399,41.74473],[-87.89998,41.78852],[-87.8944,41.83235],[-87.87743,41.87452],[-87.84971,41.91341],[-87.81229,41.94752],[-87.76661,41.97553],[-87.71442,41.99634],[-87.65774,42.00917],[-87.59878,42.0135]]]}},"University-of-Maryland-College-Park":{type:"Feature",id:"University-of-Maryland-College-Park",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.94332,39.21148],[-76.88677,39.20715],[-76.83242,39.19433],[-76.78237,39.17352],[-76.73856,39.14552],[-76.70266,39.11142],[-76.67606,39.07254],[-76.65977,39.03037],[-76.65439,38.98654],[-76.66012,38.94275],[-76.67671,38.90065],[-76.70351,38.86189],[-76.73947,38.82792],[-76.78322,38.80006],[-76.83307,38.77937],[-76.88712,38.76662],[-76.94332,38.76232],[-76.99951,38.76662],[-77.05356,38.77937],[-77.10341,38.80006],[-77.14716,38.82792],[-77.18313,38.86189],[-77.20992,38.90065],[-77.22651,38.94275],[-77.23224,38.98654],[-77.22686,39.03037],[-77.21057,39.07254],[-77.18397,39.11142],[-77.14808,39.14552],[-77.10426,39.17352],[-77.05421,39.19433],[-76.99986,39.20715],[-76.94332,39.21148]]]}},"University-of-North-Texas":{type:"Feature",id:"University-of-North-Texas",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.15255,33.43207],[-97.10005,33.42774],[-97.04958,33.41493],[-97.0031,33.39413],[-96.9624,33.36615],[-96.92905,33.33206],[-96.90432,33.29319],[-96.88916,33.25103],[-96.88413,33.2072],[-96.88942,33.1634],[-96.90481,33.1213],[-96.92969,33.08252],[-96.96309,33.04855],[-97.00374,33.02067],[-97.05007,32.99997],[-97.10031,32.98722],[-97.15255,32.98291],[-97.20478,32.98722],[-97.25502,32.99997],[-97.30135,33.02067],[-97.342,33.04855],[-97.3754,33.08252],[-97.40028,33.1213],[-97.41567,33.1634],[-97.42096,33.2072],[-97.41593,33.25103],[-97.40077,33.29319],[-97.37604,33.33206],[-97.34269,33.36615],[-97.30199,33.39413],[-97.25551,33.41493],[-97.20504,33.42774],[-97.15255,33.43207]]]}},"University-of-Northern-Colorado":{type:"Feature",id:"University-of-Northern-Colorado",properties:{},geometry:{type:"Polygon",coordinates:[[[-104.69563,40.62872],[-104.63791,40.62439],[-104.58242,40.61157],[-104.53133,40.59075],[-104.4866,40.56275],[-104.44996,40.52865],[-104.42281,40.48976],[-104.40619,40.44759],[-104.40071,40.40377],[-104.40657,40.35997],[-104.42351,40.31788],[-104.45087,40.27911],[-104.48758,40.24515],[-104.53224,40.21729],[-104.58312,40.1966],[-104.63828,40.18386],[-104.69563,40.17956],[-104.75298,40.18386],[-104.80815,40.1966],[-104.85903,40.21729],[-104.90368,40.24515],[-104.94039,40.27911],[-104.96775,40.31788],[-104.98469,40.35997],[-104.99055,40.40377],[-104.98507,40.44759],[-104.96845,40.48976],[-104.9413,40.52865],[-104.90466,40.56275],[-104.85994,40.59075],[-104.80884,40.61157],[-104.75336,40.62439],[-104.69563,40.62872]]]}},"University-of-Oregon":{type:"Feature",id:"University-of-Oregon",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.04688,44.249],[-122.98571,44.24467],[-122.92693,44.23184],[-122.87281,44.21102],[-122.82543,44.18301],[-122.78663,44.1489],[-122.7579,44.11],[-122.74032,44.06783],[-122.73455,44.024],[-122.74077,43.9802],[-122.75874,43.93812],[-122.78773,43.89936],[-122.82661,43.86541],[-122.8739,43.83756],[-122.92777,43.81688],[-122.98617,43.80414],[-123.04688,43.79984],[-123.10758,43.80414],[-123.16598,43.81688],[-123.21985,43.83756],[-123.26714,43.86541],[-123.30602,43.89936],[-123.33501,43.93812],[-123.35298,43.9802],[-123.3592,44.024],[-123.35343,44.06783],[-123.33585,44.11],[-123.30712,44.1489],[-123.26832,44.18301],[-123.22094,44.21102],[-123.16682,44.23184],[-123.10804,44.24467],[-123.04688,44.249]]]}},"University-of-Redlands":{type:"Feature",id:"University-of-Redlands",properties:{},geometry:{type:"Polygon",coordinates:[[[-117.16339,34.28768],[-117.11037,34.28336],[-117.0594,34.27054],[-117.01245,34.24974],[-116.97134,34.22175],[-116.93766,34.18767],[-116.91268,34.14879],[-116.89737,34.10663],[-116.8923,34.06281],[-116.89765,34.019],[-116.91319,33.97691],[-116.93832,33.93813],[-116.97206,33.90415],[-117.01311,33.87628],[-117.0599,33.85558],[-117.11064,33.84283],[-117.16339,33.83852],[-117.21614,33.84283],[-117.26688,33.85558],[-117.31367,33.87628],[-117.35473,33.90415],[-117.38847,33.93813],[-117.4136,33.97691],[-117.42914,34.019],[-117.43448,34.06281],[-117.42941,34.10663],[-117.4141,34.14879],[-117.38913,34.18767],[-117.35544,34.22175],[-117.31434,34.24974],[-117.26739,34.27054],[-117.21642,34.28336],[-117.16339,34.28768]]]}},"University-of-South-Carolina":{type:"Feature",id:"University-of-South-Carolina",properties:{},geometry:{type:"Polygon",coordinates:[[[-81.03516,34.24082],[-80.98216,34.23649],[-80.93122,34.22368],[-80.8843,34.20288],[-80.84321,34.17489],[-80.80954,34.14081],[-80.78458,34.10193],[-80.76928,34.05977],[-80.76421,34.01594],[-80.76956,33.97214],[-80.78509,33.93005],[-80.81021,33.89127],[-80.84393,33.85729],[-80.88496,33.82942],[-80.93172,33.80871],[-80.98243,33.79597],[-81.03516,33.79166],[-81.08788,33.79597],[-81.13859,33.80871],[-81.18535,33.82942],[-81.22638,33.85729],[-81.26011,33.89127],[-81.28522,33.93005],[-81.30076,33.97214],[-81.3061,34.01594],[-81.30103,34.05977],[-81.28573,34.10193],[-81.26077,34.14081],[-81.2271,34.17489],[-81.18602,34.20288],[-81.1391,34.22368],[-81.08815,34.23649],[-81.03516,34.24082]]]}},"University-of-Southern-California":{type:"Feature",id:"University-of-Southern-California",properties:{},geometry:{type:"Polygon",coordinates:[[[-118.30078,34.24082],[-118.24779,34.23649],[-118.19684,34.22368],[-118.14992,34.20288],[-118.10884,34.17489],[-118.07517,34.14081],[-118.05021,34.10193],[-118.03491,34.05977],[-118.02984,34.01594],[-118.03518,33.97214],[-118.05072,33.93005],[-118.07583,33.89127],[-118.10955,33.85729],[-118.15058,33.82942],[-118.19735,33.80871],[-118.24806,33.79597],[-118.30078,33.79166],[-118.3535,33.79597],[-118.40421,33.80871],[-118.45098,33.82942],[-118.49201,33.85729],[-118.52573,33.89127],[-118.55085,33.93005],[-118.56638,33.97214],[-118.57172,34.01594],[-118.56665,34.05977],[-118.55135,34.10193],[-118.52639,34.14081],[-118.49273,34.17489],[-118.45164,34.20288],[-118.40472,34.22368],[-118.35378,34.23649],[-118.30078,34.24082]]]}},"University-of-Vermont":{type:"Feature",id:"University-of-Vermont",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.21289,44.68973],[-73.15127,44.6854],[-73.09204,44.67257],[-73.0375,44.65175],[-72.98977,44.62374],[-72.95068,44.58962],[-72.92174,44.55072],[-72.90403,44.50855],[-72.89821,44.46472],[-72.90449,44.42092],[-72.92259,44.37884],[-72.9518,44.34008],[-72.99098,44.30613],[-73.03862,44.27829],[-73.09289,44.2576],[-73.15173,44.24487],[-73.21289,44.24057],[-73.27405,44.24487],[-73.33289,44.2576],[-73.38716,44.27829],[-73.4348,44.30613],[-73.47398,44.34008],[-73.50319,44.37884],[-73.52129,44.42092],[-73.52757,44.46472],[-73.52175,44.50855],[-73.50404,44.55072],[-73.4751,44.58962],[-73.43601,44.62374],[-73.38828,44.65175],[-73.33374,44.67257],[-73.27451,44.6854],[-73.21289,44.68973]]]}},"University-of-Victoria":{type:"Feature",id:"University-of-Victoria",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.31186,48.68804],[-123.24549,48.68371],[-123.18171,48.67087],[-123.123,48.65004],[-123.07162,48.62201],[-123.02956,48.58789],[-122.99842,48.54898],[-122.9794,48.5068],[-122.97318,48.46297],[-122.97997,48.41917],[-122.99948,48.3771],[-123.03094,48.33835],[-123.07312,48.30441],[-123.12438,48.27658],[-123.18277,48.25591],[-123.24607,48.24318],[-123.31186,48.23888],[-123.37764,48.24318],[-123.44094,48.25591],[-123.49933,48.27658],[-123.55059,48.30441],[-123.59277,48.33835],[-123.62423,48.3771],[-123.64374,48.41917],[-123.65053,48.46297],[-123.64431,48.5068],[-123.62529,48.54898],[-123.59415,48.58789],[-123.55209,48.62201],[-123.50071,48.65004],[-123.442,48.67087],[-123.37822,48.68371],[-123.31186,48.68804]]]}},"University-of-Wyoming":{type:"Feature",id:"University-of-Wyoming",properties:{},geometry:{type:"Polygon",coordinates:[[[-105.56651,41.53953],[-105.50798,41.5352],[-105.45172,41.52238],[-105.39992,41.50157],[-105.35457,41.47356],[-105.31742,41.43946],[-105.2899,41.40057],[-105.27306,41.3584],[-105.26751,41.31457],[-105.27345,41.27077],[-105.29063,41.22868],[-105.31837,41.18992],[-105.3556,41.15596],[-105.40087,41.12811],[-105.45245,41.10742],[-105.50837,41.09468],[-105.56651,41.09038],[-105.62465,41.09468],[-105.68057,41.10742],[-105.73215,41.12811],[-105.77742,41.15596],[-105.81465,41.18992],[-105.84239,41.22868],[-105.85957,41.27077],[-105.86551,41.31457],[-105.85996,41.3584],[-105.84312,41.40057],[-105.8156,41.43946],[-105.77845,41.47356],[-105.7331,41.50157],[-105.6813,41.52238],[-105.62504,41.5352],[-105.56651,41.53953]]]}},usa_full:{type:"Feature",id:"usa_full",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-124.76179,48.41301],[-123.22752,48.18499],[-123.32289,49.00429],[-96.01312,49.00605],[-95.11054,49.412],[-93.99811,49.00671],[-89.43531,47.98378],[-88.34922,48.29633],[-87.50645,48.01427],[-83.2814,46.13885],[-82.17616,43.58854],[-82.66248,41.68895],[-79.00601,42.80053],[-79.15798,43.44626],[-78.76239,43.62496],[-76.90231,43.80246],[-75.07988,44.98029],[-72.02225,45.00598],[-71.41227,45.25488],[-70.46149,46.21766],[-69.25051,47.51223],[-67.75966,47.099],[-66.94528,44.71049],[-69.84893,43.26199],[-69.87974,40.99205],[-72.00202,40.99125],[-74.02112,39.57279],[-75.41474,35.05319],[-80.02453,32.01613],[-79.89011,26.85507],[-80.02,24.0071],[-84.01601,24.00527],[-84.01656,25.01258],[-81.99666,25.01349],[-81.9972,25.98268],[-84.01879,28.99618],[-86.02775,30.00475],[-88.01625,30.00389],[-88.01567,28.99443],[-90.90285,28.85645],[-93.74053,29.47421],[-95.55633,28.58761],[-96.80617,27.79782],[-96.95553,25.98216],[-97.43502,25.8266],[-98.01091,25.9928],[-99.23511,26.4476],[-100.00624,28.00822],[-101.25529,29.48105],[-102.1514,29.74757],[-102.71736,29.39206],[-103.25189,28.89087],[-104.58819,29.69979],[-105.02053,30.5361],[-106.20525,31.4467],[-106.28689,31.56133],[-106.42932,31.75206],[-106.48421,31.74645],[-106.53072,31.78209],[-108.18711,31.77551],[-108.19927,31.326],[-111.00893,31.33601],[-114.86123,32.47999],[-117.67593,32.46302],[-119.97759,33.00641],[-122.53697,36.85661],[-124.99343,40.05576],[-124.60595,45.90245],[-124.76179,48.41301]]],[[[-160.57876,22.50629],[-159.00937,22.50702],[-157.50474,21.9985],[-156.29276,21.22259],[-154.68902,19.88057],[-154.62178,18.7587],[-155.99619,18.77902],[-157.50832,20.9958],[-158.74706,21.24398],[-160.57822,21.49846],[-160.57876,22.50629]]],[[[-167.1572,68.722],[-164.9717,68.9947],[-163.0218,69.9707],[-160.4136,70.7398],[-156.1769,71.5633],[-140.9684,69.9535],[-140.9874,61.0119],[-139.1716,60.4127],[-138.0072,59.9918],[-135.123,59.7566],[-131.9759,56.9995],[-130.0071,57.0001],[-130.0044,54.0043],[-133.9948,54.0032],[-138.515,57.9986],[-138.516,58.9953],[-151.5013,58.992],[-151.5003,57.9988],[-151.9963,55.9992],[-158.0191,55.0028],[-159.0076,55.0025],[-162.4025,53.9567],[-171.4689,51.8215],[-177.9993,51.2554],[-178.0001,52.2446],[-173.8197,59.7401],[-172.5143,63.8767],[-169.0075,64.9988],[-169.0087,66.0015],[-168.0022,66.0018],[-164.8554,67.0255],[-167.1572,68.722]]],[[[-68.2,17.8],[-67.9,18.67],[-65.33,18.57],[-64.64,18.36],[-64.32,17.38],[-68.2,17.8]]],[[[146.2,15.4],[144.8,12.9],[144.2,13.2],[145.7,15.6],[146.2,15.4]]],[[[180,52.2],[180,51],[172,52.5],[172,53.5],[180,52.2]]]]}},"UW-Madison":{type:"Feature",id:"UW-Madison",properties:{},geometry:{type:"Polygon",coordinates:[[[-89.41268,43.30123],[-89.35248,43.2969],[-89.29462,43.28408],[-89.24134,43.26326],[-89.19471,43.23525],[-89.15652,43.20114],[-89.12823,43.16225],[-89.11092,43.12007],[-89.10523,43.07624],[-89.11135,43.03245],[-89.12903,42.99036],[-89.15756,42.9516],[-89.19584,42.91765],[-89.24239,42.8898],[-89.29542,42.86911],[-89.35291,42.85638],[-89.41268,42.85208],[-89.47245,42.85638],[-89.52994,42.86911],[-89.58298,42.8898],[-89.62952,42.91765],[-89.6678,42.9516],[-89.69634,42.99036],[-89.71401,43.03245],[-89.72014,43.07624],[-89.71444,43.12007],[-89.69713,43.16225],[-89.66884,43.20114],[-89.63065,43.23525],[-89.58402,43.26326],[-89.53074,43.28408],[-89.47288,43.2969],[-89.41268,43.30123]]]}},"Vassar-College":{type:"Feature",id:"Vassar-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.89515,41.91136],[-73.83628,41.90703],[-73.7797,41.8942],[-73.72759,41.87339],[-73.68198,41.84538],[-73.64462,41.81127],[-73.61695,41.77238],[-73.6,41.73021],[-73.59443,41.68639],[-73.60041,41.64259],[-73.61769,41.6005],[-73.64559,41.56174],[-73.68303,41.52778],[-73.72856,41.49993],[-73.78044,41.47924],[-73.83668,41.4665],[-73.89515,41.4622],[-73.95362,41.4665],[-74.00986,41.47924],[-74.06174,41.49993],[-74.10727,41.52778],[-74.14471,41.56174],[-74.17261,41.6005],[-74.1899,41.64259],[-74.19587,41.68639],[-74.1903,41.73021],[-74.17336,41.77238],[-74.14568,41.81127],[-74.10832,41.84538],[-74.06271,41.87339],[-74.01061,41.8942],[-73.95402,41.90703],[-73.89515,41.91136]]]}},"Villanova-University":{type:"Feature",id:"Villanova-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.34361,40.26191],[-75.28619,40.25758],[-75.23101,40.24476],[-75.18019,40.22394],[-75.13571,40.19594],[-75.09927,40.16184],[-75.07227,40.12296],[-75.05573,40.08079],[-75.05028,40.03696],[-75.0561,39.99316],[-75.07295,39.95107],[-75.10016,39.9123],[-75.13667,39.87834],[-75.18109,39.85048],[-75.23169,39.82979],[-75.28656,39.81705],[-75.34361,39.81275],[-75.40065,39.81705],[-75.45552,39.82979],[-75.50613,39.85048],[-75.55054,39.87834],[-75.58705,39.9123],[-75.61426,39.95107],[-75.63111,39.99316],[-75.63693,40.03696],[-75.63148,40.08079],[-75.61495,40.12296],[-75.58795,40.16184],[-75.5515,40.19594],[-75.50702,40.22394],[-75.4562,40.24476],[-75.40102,40.25758],[-75.34361,40.26191]]]}},"West-Virginia-University":{type:"Feature",id:"West-Virginia-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.98047,39.86412],[-79.92339,39.85979],[-79.86853,39.84697],[-79.81801,39.82616],[-79.77378,39.79816],[-79.73755,39.76405],[-79.7107,39.72517],[-79.69426,39.683],[-79.68884,39.63917],[-79.69462,39.59537],[-79.71137,39.55328],[-79.73842,39.51452],[-79.77473,39.48055],[-79.81888,39.4527],[-79.8692,39.432],[-79.92375,39.41926],[-79.98047,39.41496],[-80.03718,39.41926],[-80.09174,39.432],[-80.14206,39.4527],[-80.18621,39.48055],[-80.22252,39.51452],[-80.24957,39.55328],[-80.26632,39.59537],[-80.2721,39.63917],[-80.26668,39.683],[-80.25024,39.72517],[-80.22339,39.76405],[-80.18716,39.79816],[-80.14293,39.82616],[-80.09241,39.84697],[-80.03755,39.85979],[-79.98047,39.86412]]]}},"Western-Michigan-University":{type:"Feature",id:"Western-Michigan-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.61042,42.5082],[-85.55099,42.50387],[-85.49387,42.49105],[-85.44127,42.47023],[-85.39523,42.44222],[-85.35752,42.40811],[-85.32959,42.36922],[-85.31249,42.32705],[-85.30686,42.28322],[-85.3129,42.23942],[-85.33035,42.19734],[-85.35852,42.15858],[-85.39631,42.12462],[-85.44227,42.09677],[-85.49464,42.07608],[-85.55141,42.06334],[-85.61042,42.05904],[-85.66944,42.06334],[-85.72621,42.07608],[-85.77857,42.09677],[-85.82453,42.12462],[-85.86232,42.15858],[-85.89049,42.19734],[-85.90794,42.23942],[-85.91398,42.28322],[-85.90835,42.32705],[-85.89125,42.36922],[-85.86332,42.40811],[-85.82561,42.44222],[-85.77957,42.47023],[-85.72697,42.49105],[-85.66985,42.50387],[-85.61042,42.5082]]]}},wyoming:{type:"Feature",id:"wyoming",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.05,41],[-111.05,45],[-104.05,45],[-104.05,41],[-111.05,41]]]}},australia_full:{type:"Feature",id:"australia_full",properties:{},geometry:{type:"Polygon",coordinates:[[[146.07422,-44.43378],[131.66016,-44.65302],[124.54102,-41.44273],[116.45508,-39.36828],[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.26514,-9.92557],[134.89014,-9.92557],[139.46045,-10.14193],[141.55334,-9.99861],[141.7868,-9.77132],[142.229,-9.67115],[142.72614,-9.552],[143.30017,-9.39216],[144.24774,-9.24851],[144.44824,-9.59533],[149.5459,-12.68321],[154.90723,-18.02053],[156.42334,-21.55528],[158.02734,-24.68695],[160.0708,-26.03704],[167.34375,-26.6671],[170.354,-29.11378],[168.2666,-30.63791],[160.15869,-34.03445],[152.18262,-38.41056],[149.94141,-43.51669],[146.07422,-44.43378]]]}},western_australia:{type:"Feature",id:"western_australia",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]]]}},new_zealand_full:{type:"Feature",id:"new_zealand_full",properties:{},geometry:{type:"Polygon",coordinates:[[[170.55176,-33.54139],[173.62793,-32.28713],[181.3623,-36.80928],[181.4502,-43.10098],[181.95557,-47.45781],[180.59326,-53.31775],[171.5625,-56.70451],[162.72949,-53.33087],[160.7959,-46.70974],[170.55176,-33.54139]]]}},oceania_full:{type:"Feature",properties:{},id:"oceania_full",geometry:{type:"Polygon",coordinates:[[[94.92188,-18.47961],[119.35547,-13.23995],[128.4082,-10.27168],[135.08789,-8.84165],[140.67993,-9.57908],[141.0157,-9.13193],[140.99716,-2.58091],[144.31641,10.09867],[156.97266,16.88866],[177.97852,15.96133],[193.44727,-2.81137],[197.75391,-14.26438],[193.18359,-40.71396],[161.89453,-55.37911],[102.65625,-45.58329],[94.92188,-18.47961]]]}},argentina:{type:"Feature",id:"argentina",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.14602,-49.18818],[-72.91615,-48.93261],[-72.53201,-48.80072],[-72.58755,-48.48542],[-72.22624,-48.32339],[-72.49784,-47.96155],[-72.33315,-47.44938],[-71.86801,-47.23376],[-71.94851,-46.80983],[-71.64665,-46.68783],[-71.79939,-46.19141],[-71.6147,-45.97522],[-71.79762,-45.62288],[-71.46813,-45.4921],[-71.32472,-45.306],[-71.56043,-44.97863],[-72.04094,-44.90019],[-72.07396,-44.78023],[-71.46969,-44.73753],[-71.23704,-44.79082],[-71.13226,-44.4711],[-71.36469,-44.38958],[-71.80731,-44.42036],[-71.84736,-44.11002],[-71.64902,-43.94552],[-71.75129,-43.78527],[-71.60784,-43.62836],[-71.93082,-43.45685],[-71.76157,-43.1645],[-72.14281,-42.8979],[-72.1812,-42.69735],[-72.023,-42.41766],[-72.17288,-42.14043],[-71.72931,-42.12447],[-71.91021,-41.34113],[-71.8196,-41.06038],[-71.96387,-40.71955],[-71.8414,-40.4521],[-71.65704,-40.36426],[-71.82818,-40.20778],[-71.59266,-39.90123],[-71.67811,-39.56486],[-71.39497,-39.34179],[-71.42542,-38.92164],[-70.92524,-38.76298],[-70.84044,-38.54138],[-70.97623,-38.44222],[-70.98292,-38.10477],[-71.21191,-37.68901],[-71.11983,-37.4585],[-71.21555,-37.27261],[-71.09237,-37.11444],[-71.11982,-36.69792],[-71.03513,-36.47333],[-70.71285,-36.42687],[-70.70501,-36.27229],[-70.42451,-36.15581],[-70.38755,-35.60868],[-70.43201,-35.31842],[-70.58358,-35.27831],[-70.36203,-35.13645],[-70.21683,-34.61145],[-70.01089,-34.41389],[-70.03094,-34.28805],[-69.79507,-34.24304],[-69.90417,-33.77143],[-69.7705,-33.3611],[-70.00282,-33.32294],[-70.08089,-33.02919],[-70.00121,-32.8846],[-70.17038,-32.62555],[-70.14899,-32.46585],[-70.31918,-32.27335],[-70.35277,-32.0257],[-70.2106,-31.95769],[-70.46072,-31.84116],[-70.56691,-31.60016],[-70.49734,-31.12216],[-70.40805,-31.16633],[-70.23998,-30.61575],[-70.11719,-30.43102],[-69.89853,-30.35557],[-69.87492,-29.7043],[-70.01808,-29.38321],[-69.78724,-29.13008],[-69.68114,-28.47172],[-69.45679,-28.18357],[-69.17254,-27.97088],[-68.94231,-27.52325],[-68.8412,-27.15464],[-68.29854,-27.0389],[-68.2638,-26.91623],[-68.58734,-26.49294],[-68.55754,-26.2871],[-68.38108,-26.17822],[-68.57599,-25.42894],[-68.4999,-25.16149],[-68.34279,-25.1124],[-68.56789,-24.79739],[-68.26201,-24.40457],[-67.32231,-24.0344],[-66.99052,-23.00044],[-67.18066,-22.8138],[-67.02827,-22.54089],[-66.78247,-22.43778],[-66.73899,-22.23893],[-66.28793,-22.08605],[-66.24277,-21.79408],[-66.07589,-21.83493],[-65.74764,-22.10912],[-64.99322,-22.08239],[-64.53579,-22.29137],[-64.29933,-22.86509],[-64.24332,-22.56039],[-63.93139,-22],[-62.80617,-22],[-62.7913,-22.16193],[-62.3009,-22.48659],[-62.20671,-22.70418],[-61.73612,-23.23432],[-61.08824,-23.61393],[-60.9899,-23.81808],[-60.37353,-24.024],[-60.03941,-24.01156],[-59.47554,-24.33261],[-59.35397,-24.47821],[-58.67243,-24.83192],[-58.24167,-24.92801],[-57.76089,-25.17193],[-57.555,-25.4484],[-57.74064,-25.65045],[-57.89112,-25.9662],[-58.08473,-26.11185],[-58.22103,-26.41403],[-58.18996,-26.64518],[-58.31991,-26.85821],[-58.64913,-27.12662],[-58.59905,-27.29984],[-57.87482,-27.27527],[-57.48754,-27.44418],[-56.96564,-27.50202],[-56.84926,-27.6063],[-56.60117,-27.42102],[-56.3749,-27.58903],[-56.29432,-27.42003],[-56.06276,-27.306],[-55.73692,-27.44516],[-55.6057,-27.16241],[-55.42284,-26.99528],[-54.78695,-26.63111],[-54.61874,-26.20893],[-54.67933,-25.99524],[-54.65698,-25.67619],[-54.5842,-25.58952],[-54.4812,-25.62543],[-54.108,-25.495],[-53.86217,-25.65902],[-53.83619,-25.97166],[-53.6411,-26.21559],[-53.73094,-26.5097],[-53.67249,-26.91252],[-53.84355,-27.16453],[-53.959,-27.15804],[-54.21736,-27.38603],[-54.673,-27.57],[-54.814,-27.533],[-54.936,-27.772],[-55.38728,-27.98524],[-55.76677,-28.23982],[-55.69902,-28.42637],[-55.88091,-28.4715],[-56.29651,-28.80272],[-56.42475,-29.07897],[-56.59315,-29.12516],[-56.70164,-29.35913],[-57.328,-29.972],[-57.64923,-30.20184],[-57.63687,-30.33197],[-57.85924,-30.47701],[-57.8096,-30.91332],[-58.08141,-31.45457],[-57.98082,-31.58691],[-58.20653,-31.86773],[-58.10645,-32.24002],[-58.20464,-32.46055],[-58.0841,-32.99782],[-58.36693,-33.12177],[-58.49375,-33.57857],[-58.29507,-34.17809],[-57.9345,-34.4519],[-55.9,-35.6],[-57,-39],[-61,-41],[-63.5,-55],[-66.67094,-55.11906],[-67.27285,-54.90511],[-67.95071,-54.87373],[-68.60967,-54.91369],[-68.60676,-52.65902],[-68.41869,-52.3325],[-69.19014,-52.15044],[-69.48632,-52.15165],[-69.9955,-52.00074],[-71.92259,-51.99991],[-72.29907,-51.69791],[-72.28621,-50.65987],[-72.72636,-50.61667],[-73.06995,-50.78909],[-73.32848,-50.5716],[-73.52199,-50.15397],[-73.44481,-49.79226],[-73.53933,-49.49825],[-73.47299,-49.20464],[-73.14602,-49.18818]]]}},bolivia:{type:"Feature",id:"bolivia",properties:{},geometry:{type:"Polygon",coordinates:[[[-60.17487,-16.26675],[-58.32092,-16.31948],[-58.47336,-16.74472],[-58.39371,-17.18081],[-57.79152,-17.55501],[-57.71187,-17.73103],[-57.55463,-18.22348],[-57.72079,-18.89914],[-57.70775,-19.0381],[-58.11768,-19.75313],[-57.85675,-19.96754],[-58.15338,-20.15201],[-58.17535,-19.83066],[-59.07074,-19.28846],[-59.97025,-19.29494],[-61.78848,-19.65358],[-62.57401,-21.99972],[-63.93082,-22.00736],[-64.24942,-22.60957],[-64.31808,-22.8806],[-64.56528,-22.36595],[-64.62021,-22.21856],[-64.99649,-22.08628],[-65.77446,-22.10027],[-65.92552,-21.93222],[-66.04774,-21.91884],[-66.04225,-21.86022],[-66.2273,-21.78437],[-66.3121,-22.1219],[-66.74057,-22.23635],[-66.7955,-22.44213],[-67.18002,-22.81353],[-67.56351,-22.90085],[-67.81174,-22.87934],[-68.17566,-21.3252],[-68.405,-20.9499],[-68.54095,-20.92681],[-68.55606,-20.7285],[-68.43796,-20.63857],[-68.74557,-20.46369],[-68.72772,-20.08173],[-68.56293,-20.05077],[-68.53134,-19.85779],[-68.69064,-19.74667],[-68.41873,-19.41544],[-68.9296,-18.97448],[-69.12186,-18.14128],[-69.46793,-17.50852],[-69.46793,-17.37489],[-69.63547,-17.27787],[-69.01199,-16.66053],[-69.03877,-16.58487],[-68.93509,-16.2061],[-69.16718,-16.22259],[-69.40201,-15.62634],[-69.13422,-15.23516],[-69.35806,-14.96933],[-68.97903,-14.21979],[-68.87466,-12.88745],[-68.65768,-12.49088],[-69.57264,-10.94456],[-68.74806,-11.00835],[-68.75167,-11.01762],[-68.75201,-11.03716],[-68.76592,-11.04963],[-68.70815,-11.14253],[-68.54576,-11.11036],[-68.24295,-10.95872],[-68.08502,-10.69165],[-67.86736,-10.64036],[-67.71629,-10.71459],[-67.6775,-10.60341],[-67.65947,-10.61792],[-67.58446,-10.50402],[-67.43614,-10.44966],[-67.40593,-10.38314],[-67.31461,-10.37774],[-67.32216,-10.32438],[-67.1953,-10.32277],[-67.18869,-10.33983],[-67.17093,-10.33814],[-66.57921,-9.90392],[-65.86441,-9.75981],[-65.56503,-9.82477],[-65.44968,-9.67318],[-65.29449,-9.85589],[-65.39474,-10.54722],[-65.35629,-10.78474],[-65.2684,-10.88658],[-65.29861,-11.32656],[-65.14481,-11.70939],[-64.36752,-12.4587],[-63.67538,-12.46675],[-61.64841,-13.53453],[-61.06339,-13.52919],[-60.4303,-13.88608],[-60.23804,-15.09864],[-60.57312,-15.09599],[-60.24353,-15.47221],[-60.17487,-16.26675]]]}},bahia:{id:"bahia",type:"Feature",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]]]}},brazil:{type:"Feature",id:"brazil",properties:{},geometry:{type:"Polygon",coordinates:[[[-51.56433,4.29711],[-28.4491,1.04914],[-37.67761,-21.04862],[-52.94861,-34.05721],[-53.56384,-33.71063],[-53.58581,-33.23409],[-53.16833,-32.81036],[-54.11316,-32.08723],[-55.73914,-30.85036],[-56.11267,-31.18931],[-56.11267,-30.90694],[-57.0575,-30.14988],[-57.23328,-30.32073],[-57.73865,-30.26381],[-55.98083,-28.5411],[-54.94812,-27.68839],[-53.80554,-27.18136],[-53.7616,-26.73089],[-53.87146,-26.00249],[-54.20105,-25.88394],[-54.6405,-25.88394],[-54.28894,-24.13171],[-55.43701,-24.18685],[-55.87647,-22.3704],[-58.07373,-22.08564],[-58.24402,-20.06109],[-57.71668,-17.98396],[-58.43628,-17.18278],[-58.50769,-16.38866],[-60.1831,-16.29905],[-60.26001,-15.14637],[-60.49072,-14.09396],[-60.94116,-13.63531],[-61.85303,-13.5926],[-63.58887,-12.56529],[-64.22058,-12.55992],[-65.20386,-11.8996],[-65.4126,-9.74154],[-66.82983,-10.1203],[-68.17566,-10.92501],[-70.6366,-11.18379],[-70.6366,-9.62783],[-71.42761,-9.97426],[-72.74597,-9.88769],[-73.97644,-7.10634],[-72.70752,-4.67498],[-70.15869,-4.23686],[-69.67529,-1.03266],[-70.19714,1.75205],[-67.56042,1.83989],[-66.94519,0.69761],[-63.78113,1.83989],[-64.84131,4.36832],[-63.25378,3.59566],[-60.24353,5.20584],[-60.03479,4.98698],[-59.57886,3.81493],[-59.89746,3.26118],[-60.05676,2.76199],[-59.9469,2.2626],[-59.77661,2.23515],[-59.77661,1.75754],[-58.64502,1.55987],[-55.87647,2.61384],[-53.10791,2.35041],[-51.56433,4.29711]]]}},df_br:{id:"df_br",type:"Feature",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]]]}},rs_br:{id:"rs_br",type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-50.56791,-28.32331],[-49.64837,-28.40599],[-49.62152,-28.67722],[-49.82288,-28.81257],[-49.86986,-29.14725],[-49.40674,-29.43409],[-50.66187,-31.5221],[-51.51429,-32.07544],[-52.0244,-32.51232],[-52.32644,-33.22264],[-53.199,-34.04411],[-53.65541,-33.63156],[-53.50103,-32.61414],[-55.57503,-31.01726],[-56.0113,-31.18392],[-56.20595,-30.78112],[-56.93084,-30.18535],[-57.2463,-30.36505],[-57.57519,-30.33029],[-57.71614,-30.18535],[-57.40068,-29.91811],[-57.23959,-29.67347],[-56.02473,-28.4178],[-55.70255,-28.08671],[-54.40043,-27.2008],[-53.38022,-26.97372],[-51.97071,-27.23661],[-51.03103,-27.74271],[-50.56791,-28.32331]]]}},chile:{type:"Feature",id:"chile",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-110,-28],[-110,-26],[-109,-26],[-109,-28],[-110,-28]]],[[[-69.46999,-17.50394],[-69.47205,-17.61065],[-69.34708,-17.7343],[-69.30794,-17.83956],[-69.30931,-17.9121],[-69.29352,-17.96698],[-69.06143,-18.06231],[-69.11087,-18.1328],[-68.92548,-18.97253],[-68.40225,-19.41091],[-68.68309,-19.72793],[-68.52997,-19.85262],[-68.56842,-20.05658],[-68.76549,-20.08237],[-68.67279,-20.34591],[-68.73322,-20.38454],[-68.72772,-20.46948],[-68.47504,-20.64949],[-68.53546,-20.8524],[-68.405,-20.93964],[-68.19489,-21.27018],[-67.81586,-22.86099],[-67.55768,-22.89642],[-67.17728,-22.81416],[-66.98639,-23.00012],[-67.32216,-24.03768],[-68.24432,-24.39338],[-68.46405,-24.62829],[-68.5437,-24.79047],[-68.32397,-25.09928],[-68.48328,-25.15399],[-68.37067,-26.17639],[-68.5437,-26.27987],[-68.57666,-26.49147],[-68.25256,-26.96492],[-68.56567,-27.17525],[-68.78609,-27.10803],[-69.94308,-29.24087],[-69.93347,-30.10118],[-69.81262,-30.14869],[-69.88678,-30.35747],[-70.07904,-30.38828],[-70.53102,-31.3724],[-70.46185,-31.84548],[-70.22736,-31.93934],[-70.3125,-32.12562],[-70.08453,-33.03716],[-69.99561,-33.3268],[-69.86721,-33.28663],[-69.78207,-33.33282],[-69.8703,-33.57458],[-69.87854,-34.15614],[-70.3791,-35.17241],[-70.53875,-35.20551],[-70.58441,-35.27646],[-70.43884,-35.32549],[-70.37876,-36.04743],[-70.95932,-36.50246],[-71.04858,-36.49087],[-71.189,-37.74167],[-70.90816,-38.67251],[-71.39465,-38.92843],[-71.77643,-40.268],[-71.66794,-40.30571],[-71.70639,-40.425],[-71.80252,-40.42081],[-71.92612,-40.72332],[-71.73051,-42.11516],[-72.17194,-42.14686],[-72.04182,-42.40546],[-72.04765,-42.54322],[-72.14344,-42.90363],[-71.72596,-43.19066],[-71.8856,-43.45765],[-71.58417,-43.64303],[-71.81213,-44.30714],[-71.07056,-44.47985],[-71.24908,-44.80425],[-72.03495,-44.76989],[-72.03323,-44.88409],[-71.56494,-44.98326],[-71.41148,-45.19486],[-71.33354,-45.28286],[-71.3895,-45.35287],[-71.54383,-45.40436],[-71.47104,-45.49829],[-71.75291,-45.55168],[-71.64459,-46.00936],[-71.82037,-46.1256],[-71.64974,-46.68289],[-71.9426,-46.81204],[-71.87325,-47.12505],[-72.0504,-47.34557],[-72.46788,-47.7451],[-72.24472,-48.34986],[-72.56195,-48.50569],[-72.53174,-48.77746],[-72.68005,-48.89271],[-72.98733,-48.99351],[-73.51742,-49.89065],[-73.32687,-50.52827],[-72.34531,-50.65403],[-72.32412,-51.60426],[-72.03255,-51.8118],[-71.93324,-51.91854],[-72.04212,-51.96756],[-71.95221,-51.97896],[-71.92097,-52.00391],[-70.00412,-52.00423],[-69.49016,-52.15561],[-69.19421,-52.15445],[-68.84205,-52.28181],[-68.58833,-52.31016],[-68.57786,-52.32931],[-68.42268,-52.33665],[-68.42212,-52.39063],[-68.60412,-52.65417],[-68.60412,-54.90395],[-67.30412,-54.90395],[-65.80412,-55.20392],[-68,-58],[-78,-53],[-72.5,-18.3],[-70.19165,-18.33106],[-69.96918,-18.26065],[-69.86618,-18.17325],[-69.82018,-18.1191],[-69.75494,-17.98135],[-69.80919,-17.8023],[-69.82704,-17.75196],[-69.83047,-17.71337],[-69.80164,-17.65253],[-69.67049,-17.66692],[-69.46999,-17.50394]]]]}},bogota:{type:"Feature",id:"bogota",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]]]}},colombia:{type:"Feature",id:"colombia",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.8,11.8],[-71.3,12.7],[-70.9,11.9],[-71.98242,11.65762],[-72.2406,11.14607],[-72.45483,11.10295],[-72.8833,10.43379],[-72.94922,9.83898],[-73.31177,9.20514],[-72.99866,9.29189],[-72.94373,9.09125],[-72.76245,9.12379],[-72.65259,8.61633],[-72.39716,8.36098],[-72.34497,8.00484],[-72.4054,8.04563],[-72.49054,7.945],[-72.4411,7.89875],[-72.45209,7.53676],[-72.43835,7.40605],[-72.18567,7.38426],[-72.14996,7.32161],[-72.18018,7.24532],[-72.03461,7.0273],[-71.12,7.02457],[-71.09528,6.98641],[-70.9964,6.98641],[-70.77942,7.09817],[-70.5542,7.07636],[-70.30701,6.93461],[-70.11475,6.98095],[-69.43016,6.10778],[-69.34914,6.13987],[-69.31,6.0873],[-69.23378,6.08047],[-69.17404,6.15011],[-69.03877,6.22384],[-68.66455,6.14055],[-67.80762,6.288],[-67.45056,6.21155],[-67.47803,6.10232],[-67.40662,6.00946],[-67.60437,5.7909],[-67.63184,5.4629],[-67.82959,5.31524],[-67.79114,4.28068],[-67.62085,3.74915],[-67.5,3.78204],[-67.29126,3.36537],[-67.86255,2.82234],[-67.58789,2.79491],[-67.1759,2.33395],[-66.85181,1.23037],[-67.08801,1.16172],[-67.16766,1.83989],[-67.34894,1.97715],[-67.36816,2.22417],[-67.44781,2.21868],[-67.56866,2.054],[-67.80487,1.98813],[-67.91199,1.81793],[-68.18939,2.01009],[-68.2663,1.85087],[-68.16193,1.73008],[-69.83459,1.71361],[-69.8291,1.08209],[-69.19739,1.06561],[-69.15344,0.62621],[-69.48303,0.73057],[-69.79065,0.58776],[-70.02686,0.57128],[-70.04059,-0.19226],[-69.60937,-0.50262],[-69.55719,-0.65367],[-69.61212,-0.7498],[-69.41986,-1.03541],[-69.40338,-1.37041],[-69.9321,-4.21974],[-69.94995,-4.23275],[-70.06531,-4.08071],[-70.1841,-3.93893],[-70.28641,-3.82246],[-70.35027,-3.80054],[-70.50613,-3.87796],[-70.71075,-3.793],[-70.04883,-2.75102],[-70.8783,-2.23241],[-71.41113,-2.37786],[-71.75171,-2.19124],[-72.36694,-2.48762],[-72.63336,-2.36688],[-72.67456,-2.4595],[-72.93274,-2.4492],[-73.1813,-2.22692],[-73.10028,-2.0842],[-73.14697,-1.79597],[-73.55347,-1.69439],[-73.47382,-1.55437],[-73.64136,-1.26607],[-73.85834,-1.22763],[-74.27582,-0.97774],[-74.42139,-0.51086],[-74.79492,-0.23621],[-75.20142,-0.06592],[-75.27832,-0.12909],[-75.80566,0.04669],[-76.09955,0.32959],[-76.32751,0.42572],[-76.40991,0.37903],[-76.41266,0.23621],[-76.96198,0.27191],[-77.11029,0.36529],[-77.53601,0.40649],[-77.48383,0.65093],[-77.69257,0.73606],[-77.66441,0.81296],[-77.7166,0.85141],[-77.74544,0.83562],[-77.77565,0.83974],[-77.80861,0.82738],[-77.8196,0.80678],[-77.96173,0.82257],[-78.19794,0.94478],[-78.19931,0.99284],[-78.28308,1.05325],[-78.2515,1.08346],[-78.31741,1.19193],[-78.43002,1.1425],[-78.55499,1.2496],[-78.61816,1.24685],[-80,2.5],[-77.7,7.7],[-77.55524,7.51498],[-77.32178,7.87971],[-77.17896,7.93956],[-77.5,8.5],[-75.8,11.8]]]}},"Universidad-de-Antioquia":{type:"Feature",id:"Universidad-de-Antioquia",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.58594,6.45251],[-75.54185,6.4482],[-75.49945,6.43541],[-75.46038,6.41465],[-75.42614,6.38671],[-75.39805,6.35267],[-75.37719,6.31384],[-75.36435,6.2717],[-75.36003,6.22789],[-75.36438,6.18407],[-75.37726,6.14195],[-75.39814,6.10313],[-75.42624,6.06911],[-75.46047,6.04119],[-75.49952,6.02044],[-75.54188,6.00767],[-75.58594,6.00336],[-75.62999,6.00767],[-75.67236,6.02044],[-75.7114,6.04119],[-75.74563,6.06911],[-75.77373,6.10313],[-75.79462,6.14195],[-75.80749,6.18407],[-75.81185,6.22789],[-75.80753,6.2717],[-75.79469,6.31384],[-75.77382,6.35267],[-75.74573,6.38671],[-75.71149,6.41465],[-75.67242,6.43541],[-75.63003,6.4482],[-75.58594,6.45251]]]}},"Universidad-de-La-Guajira":{type:"Feature",id:"Universidad-de-La-Guajira",properties:{},geometry:{type:"Polygon",coordinates:[[[-72.86133,11.74767],[-72.81658,11.74335],[-72.77355,11.73056],[-72.73391,11.70979],[-72.69917,11.68184],[-72.67067,11.64779],[-72.64951,11.60895],[-72.6365,11.56681],[-72.63213,11.523],[-72.63657,11.47919],[-72.64964,11.43707],[-72.67084,11.39826],[-72.69935,11.36424],[-72.73408,11.33633],[-72.77368,11.31559],[-72.81665,11.30282],[-72.86133,11.29851],[-72.90601,11.30282],[-72.94897,11.31559],[-72.98858,11.33633],[-73.0233,11.36424],[-73.05182,11.39826],[-73.07302,11.43707],[-73.08609,11.47919],[-73.09053,11.523],[-73.08616,11.56681],[-73.07314,11.60895],[-73.05198,11.64779],[-73.02349,11.68184],[-72.98875,11.70979],[-72.9491,11.73056],[-72.90608,11.74335],[-72.86133,11.74767]]]}},"Universidad-de-Los-Andes":{type:"Feature",id:"Universidad-de-Los-Andes",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.79005],[-74.04783,4.78574],[-74.00556,4.77295],[-73.9666,4.75219],[-73.93245,4.72426],[-73.90444,4.69022],[-73.88363,4.65139],[-73.87082,4.60925],[-73.8665,4.56544],[-73.87085,4.52163],[-73.88368,4.4795],[-73.9045,4.44068],[-73.93253,4.40665],[-73.96666,4.37873],[-74.00561,4.35798],[-74.04786,4.34521],[-74.0918,4.34089],[-74.13574,4.34521],[-74.17799,4.35798],[-74.21693,4.37873],[-74.25107,4.40665],[-74.27909,4.44068],[-74.29992,4.4795],[-74.31275,4.52163],[-74.31709,4.56544],[-74.31278,4.60925],[-74.29997,4.65139],[-74.27915,4.69022],[-74.25114,4.72426],[-74.217,4.75219],[-74.17804,4.77295],[-74.13576,4.78574],[-74.0918,4.79005]]]}},"Universidad-de-San-Buenaventura":{type:"Feature",id:"Universidad-de-San-Buenaventura",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.58594,6.45251],[-75.54185,6.4482],[-75.49945,6.43541],[-75.46038,6.41465],[-75.42614,6.38671],[-75.39805,6.35267],[-75.37719,6.31384],[-75.36435,6.2717],[-75.36003,6.22789],[-75.36438,6.18407],[-75.37726,6.14195],[-75.39814,6.10313],[-75.42624,6.06911],[-75.46047,6.04119],[-75.49952,6.02044],[-75.54188,6.00767],[-75.58594,6.00336],[-75.62999,6.00767],[-75.67236,6.02044],[-75.7114,6.04119],[-75.74563,6.06911],[-75.77373,6.10313],[-75.79462,6.14195],[-75.80749,6.18407],[-75.81185,6.22789],[-75.80753,6.2717],[-75.79469,6.31384],[-75.77382,6.35267],[-75.74573,6.38671],[-75.71149,6.41465],[-75.67242,6.43541],[-75.63003,6.4482],[-75.58594,6.45251]]]}},"Universidad-Distrital-Francisco-Jose-de-Caldas":{type:"Feature",id:"Universidad-Distrital-Francisco-Jose-de-Caldas",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.87766],[-74.04782,4.87334],[-74.00554,4.86056],[-73.96658,4.8398],[-73.93243,4.81186],[-73.90442,4.77782],[-73.8836,4.73899],[-73.87079,4.69686],[-73.86648,4.65304],[-73.87082,4.60923],[-73.88365,4.56711],[-73.90448,4.52829],[-73.93251,4.49426],[-73.96665,4.46634],[-74.0056,4.44559],[-74.04785,4.43281],[-74.0918,4.4285],[-74.13574,4.43281],[-74.178,4.44559],[-74.21695,4.46634],[-74.25109,4.49426],[-74.27911,4.52829],[-74.29994,4.56711],[-74.31278,4.60923],[-74.31712,4.65304],[-74.3128,4.69686],[-74.29999,4.73899],[-74.27918,4.77782],[-74.25116,4.81186],[-74.21701,4.8398],[-74.17805,4.86056],[-74.13577,4.87334],[-74.0918,4.87766]]]}},"Universidad-Nacional-de-Colombia":{type:"Feature",id:"Universidad-Nacional-de-Colombia",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.87766],[-74.04782,4.87334],[-74.00554,4.86056],[-73.96658,4.8398],[-73.93243,4.81186],[-73.90442,4.77782],[-73.8836,4.73899],[-73.87079,4.69686],[-73.86648,4.65304],[-73.87082,4.60923],[-73.88365,4.56711],[-73.90448,4.52829],[-73.93251,4.49426],[-73.96665,4.46634],[-74.0056,4.44559],[-74.04785,4.43281],[-74.0918,4.4285],[-74.13574,4.43281],[-74.178,4.44559],[-74.21695,4.46634],[-74.25109,4.49426],[-74.27911,4.52829],[-74.29994,4.56711],[-74.31278,4.60923],[-74.31712,4.65304],[-74.3128,4.69686],[-74.29999,4.73899],[-74.27918,4.77782],[-74.25116,4.81186],[-74.21701,4.8398],[-74.17805,4.86056],[-74.13577,4.87334],[-74.0918,4.87766]]]}},ecuador:{type:"Feature",id:"ecuador",properties:{},geometry:{type:"Polygon",coordinates:[[[-82,-3],[-80,2.2],[-77.86079,0.80404],[-77.72072,0.85484],[-77.66287,0.81794],[-77.66424,0.80884],[-77.67385,0.80215],[-77.67729,0.79099],[-77.66184,0.78979],[-77.68587,0.77365],[-77.6972,0.74241],[-77.67523,0.73778],[-77.5573,0.65058],[-77.47353,0.6626],[-77.52159,0.44837],[-76.47583,0.20874],[-76.32202,0.4422],[-76.0199,0.30487],[-75.81665,0.09064],[-75.26733,-0.1181],[-75.31265,-0.16617],[-75.50629,-0.21698],[-75.22888,-0.56441],[-75.20279,-0.97362],[-75.28931,-0.99147],[-75.36072,-0.95027],[-75.64087,-1.62576],[-76.63376,-2.59052],[-77.84637,-3],[-78.2872,-3.42158],[-79.01917,-5.01844],[-79.24301,-4.96581],[-79.62753,-4.42656],[-79.79233,-4.48954],[-80.12535,-4.29784],[-80.36018,-4.49775],[-80.44584,-4.45086],[-80.44739,-4.37692],[-80.33409,-4.21841],[-80.45013,-4.20968],[-80.44928,-4.13024],[-80.48035,-4.09445],[-80.47297,-4.05079],[-80.44739,-3.99719],[-80.39915,-3.98281],[-80.29701,-4.01843],[-80.12878,-3.89718],[-80.16106,-3.86704],[-80.19264,-3.60256],[-80.21633,-3.582],[-80.20706,-3.54705],[-80.21745,-3.5],[-80.22878,-3.50181],[-80.2335,-3.4899],[-80.2456,-3.48759],[-80.24545,-3.48481],[-80.24416,-3.48461],[-80.24386,-3.48247],[-80.24313,-3.48142],[-80.24393,-3.47881],[-80.24079,-3.47723],[-80.2438,-3.46463],[-80.22217,-3.44047],[-80.25238,-3.41],[-82,-3]]]}},paraguay:{type:"Feature",id:"paraguay",properties:{},geometry:{type:"Polygon",coordinates:[[[-54.25873,-24.35961],[-54.58403,-25.58921],[-54.65681,-25.67588],[-54.67916,-25.99493],[-54.61857,-26.20862],[-54.78678,-26.6308],[-55.42267,-26.99497],[-55.60553,-27.1621],[-55.73675,-27.44486],[-55.78857,-27.44309],[-55.89775,-27.34371],[-55.97809,-27.35591],[-56.06259,-27.30569],[-56.29415,-27.41973],[-56.37473,-27.58873],[-56.601,-27.42072],[-56.84909,-27.606],[-56.96547,-27.50172],[-57.48737,-27.44388],[-57.87465,-27.27496],[-58.59888,-27.29953],[-58.64896,-27.12631],[-58.31974,-26.8579],[-58.18979,-26.64487],[-58.22086,-26.41372],[-58.08456,-26.11154],[-57.89095,-25.96589],[-57.74047,-25.65014],[-57.55483,-25.44809],[-57.76072,-25.17162],[-58.2415,-24.9277],[-58.67226,-24.83161],[-59.3538,-24.4779],[-59.47537,-24.3323],[-60.03924,-24.01125],[-60.37336,-24.02369],[-60.98973,-23.81777],[-61.08807,-23.61362],[-61.73595,-23.234],[-62.20654,-22.70386],[-62.30073,-22.48627],[-62.64387,-22.24906],[-62.26072,-21.05983],[-62.26622,-20.56305],[-61.92152,-20.08915],[-61.73647,-19.63289],[-59.97488,-19.29332],[-59.06988,-19.28619],[-58.20814,-19.80515],[-57.83186,-20.9842],[-57.92507,-21.63334],[-57.88113,-21.68734],[-57.90602,-21.71294],[-57.97194,-22.07832],[-56.81013,-22.27099],[-56.56363,-22.20044],[-56.49462,-22.08659],[-56.39677,-22.07641],[-56.26631,-22.24811],[-56.01774,-22.29259],[-55.8526,-22.28227],[-55.78935,-22.38413],[-55.74034,-22.38913],[-55.75132,-22.47989],[-55.7472,-22.50653],[-55.72347,-22.5514],[-55.69845,-22.56298],[-55.69365,-22.57788],[-55.62361,-22.62986],[-55.38191,-24.00601],[-54.65973,-23.82806],[-54.31366,-24.01762],[-54.25873,-24.35961]]]}},peru:{type:"Feature",id:"peru",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,-3],[-80.25238,-3.41],[-80.22217,-3.44047],[-80.2438,-3.46463],[-80.24079,-3.47723],[-80.24393,-3.47881],[-80.24313,-3.48142],[-80.24386,-3.48247],[-80.24416,-3.48461],[-80.24545,-3.48481],[-80.2456,-3.48759],[-80.2335,-3.4899],[-80.22878,-3.50181],[-80.21745,-3.5001],[-80.20706,-3.54705],[-80.21633,-3.582],[-80.19264,-3.60256],[-80.16106,-3.86704],[-80.12878,-3.89718],[-80.29701,-4.01843],[-80.39915,-3.98281],[-80.44739,-3.99719],[-80.47297,-4.05079],[-80.48035,-4.09445],[-80.44928,-4.13024],[-80.45013,-4.20968],[-80.33409,-4.21841],[-80.44739,-4.37692],[-80.44584,-4.45086],[-80.36018,-4.49775],[-80.12535,-4.29784],[-79.79233,-4.48954],[-79.62753,-4.42656],[-79.24301,-4.96581],[-79.01917,-5.01844],[-78.2872,-3.42158],[-77.84637,-3],[-76.63376,-2.59052],[-75.64087,-1.62576],[-75.36072,-0.95027],[-75.56534,-0.13806],[-75.15884,-0.06665],[-74.40628,-0.55553],[-72.92862,-2.39505],[-70.9552,-2.25162],[-70.02686,-2.70987],[-70.70595,-3.78478],[-70.49789,-3.88142],[-70.32349,-3.8088],[-69.95819,-4.23211],[-69.94446,-4.29784],[-69.99802,-4.37316],[-70.10376,-4.29164],[-70.19028,-4.35946],[-71.82999,-4.5662],[-72.86133,-5.25507],[-73.94348,-7.4932],[-72.19116,-9.95803],[-70.61188,-9.57638],[-70.62149,-10.96681],[-69.57161,-10.94557],[-68.65494,-12.49629],[-69.01886,-13.62196],[-68.83896,-14.22445],[-69.38141,-14.86251],[-69.14795,-15.24444],[-69.39926,-15.6151],[-69.19189,-16.17449],[-69.10177,-16.22555],[-68.96152,-16.19456],[-68.78952,-16.34254],[-68.98865,-16.42357],[-69.04015,-16.57368],[-69.01886,-16.65198],[-69.61075,-17.26542],[-69.46896,-17.37423],[-69.46827,-17.49919],[-69.66654,-17.66071],[-69.81262,-17.67281],[-69.75,-18],[-70,-18.27],[-75,-19],[-83,-3]]]}},uruguay:{type:"Feature",id:"uruguay",properties:{},geometry:{type:"Polygon",coordinates:[[[-58.37,-33.12],[-58.15,-33.07],[-58.09,-33],[-58.2,-32.48],[-58.18,-32.37],[-58.11,-32.33],[-58.1,-32.25],[-58.18,-32.16],[-58.15,-32],[-58.2,-31.86],[-58.07,-31.81],[-57.98,-31.58],[-58.04,-31.5],[-57.91,-31.23],[-57.88,-30.97],[-57.8,-30.9],[-57.89,-30.5],[-57.63,-30.34],[-57.6,-30.2],[-57.2,-30.3],[-57.1,-30.1],[-56.8,-30.1],[-56,-30.8],[-56,-31.1],[-55.6,-30.85],[-53.8,-32],[-53.5,-32.5],[-53.1,-32.7],[-53.5,-33.1],[-53.5,-33.7],[-53,-34],[-55,-36],[-58,-34.6],[-58.4,-34],[-58.5,-33.6],[-58.37,-33.12]]]}},venezuela:{type:"Feature",id:"venezuela",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-73.42,9.2],[-73.42,9.25],[-73.36,9.3],[-73.36,9.34],[-73.33,9.37],[-73.31,9.43],[-73.27,9.47],[-73.26,9.52],[-73.18,9.61],[-73.14,9.63],[-73.12,9.71],[-73.07,9.77],[-73.05,9.82],[-73.07,9.94],[-73.03,10.03],[-73.03,10.07],[-72.99,10.13],[-72.97,10.23],[-72.98,10.36],[-72.96,10.48],[-72.91,10.52],[-72.9,10.58],[-72.8,10.69],[-72.78,10.78],[-72.74,10.83],[-72.71,10.92],[-72.67,10.95],[-72.64,10.95],[-72.61,10.98],[-72.57,11.06],[-72.56,11.13],[-72.53,11.16],[-72.46,11.2],[-72.4,11.2],[-72.37,11.22],[-72.29,11.21],[-72.04,11.67],[-72,11.71],[-71.8,11.75],[-71.45,11.86],[-71.44,11.88],[-71.36,11.92],[-71,12.01],[-71,12.12],[-71.12,12.26],[-71.15,12.38],[-71.2,12.46],[-71.22,12.54],[-71.18,12.65],[-71.12,12.72],[-71.01,12.78],[-70.89,12.79],[-70.38,12.62],[-70.35,12.59],[-70.35,12.42],[-70.12,12.43],[-69.72,12.33],[-69.04,11.94],[-68.92,11.82],[-68.81,11.81],[-68.59,11.74],[-68.06,11.74],[-68.05,12.24],[-67.8,12.38],[-67.63,12.39],[-66.59,12.29],[-66.07,12.19],[-64.56,12.22],[-62.93,11.72],[-61.67,10.99],[-61.66,10.88],[-61.73,10.71],[-61.74,10.55],[-61.78,10.52],[-61.82,10.52],[-61.99,10.09],[-61.98,10.08],[-61.89,10.06],[-61.62,10.06],[-61.48,10.04],[-61.18,9.94],[-61.08,9.87],[-60.94,9.85],[-60.85,9.81],[-60.76,9.72],[-60.7,9.7],[-59.5,8.74],[-59.47,8.68],[-59.49,8.64],[-59.52,8.62],[-59.87,8.5],[-59.74,8.33],[-59.73,8.26],[-59.76,8.2],[-59.81,8.16],[-59.9,8.15],[-59.93,8.09],[-59.93,8.05],[-59.98,7.98],[-60.05,7.95],[-60.08,7.96],[-60.1,7.93],[-60.17,7.9],[-60.24,7.82],[-60.26,7.82],[-60.33,7.76],[-60.47,7.76],[-60.5,7.73],[-60.52,7.61],[-60.54,7.58],[-60.57,7.57],[-60.57,7.55],[-60.61,7.51],[-60.57,7.47],[-60.53,7.39],[-60.52,7.29],[-60.55,7.26],[-60.54,7.24],[-60.49,7.27],[-60.33,7.25],[-60.25,7.19],[-60.22,7.14],[-60.22,7.05],[-60.25,6.99],[-60.3,6.95],[-60.31,6.9],[-60.36,6.86],[-60.43,6.86],[-60.46,6.82],[-60.5,6.8],[-60.62,6.77],[-60.63,6.74],[-60.69,6.69],[-60.73,6.68],[-60.82,6.72],[-60.92,6.65],[-61.05,6.65],[-61.08,6.63],[-61.11,6.64],[-61.11,6.61],[-61.13,6.59],[-61.07,6.44],[-61.09,6.34],[-61.05,6.31],[-61.04,6.28],[-61.06,6.23],[-61.05,6.2],[-61.07,6.14],[-61.12,6.11],[-61.17,6.05],[-61.22,6.04],[-61.26,6],[-61.29,5.93],[-60.7,5.27],[-60.62,5.23],[-60.57,5.13],[-60.57,5.08],[-60.51,4.96],[-60.53,4.89],[-60.68,4.72],[-60.86,4.63],[-60.87,4.55],[-60.97,4.45],[-61.08,4.45],[-61.1,4.42],[-61.13,4.41],[-61.17,4.41],[-61.21,4.44],[-61.3,4.36],[-61.44,4.36],[-61.45,4.35],[-61.44,4.3],[-61.46,4.25],[-61.54,4.18],[-61.71,4.18],[-61.74,4.17],[-61.75,4.14],[-61.81,4.09],[-61.87,4.08],[-61.91,4.05],[-61.95,4.05],[-62,4.09],[-62.05,4.06],[-62.08,4.02],[-62.12,4.01],[-62.17,4.01],[-62.22,4.04],[-62.31,4.07],[-62.36,4.07],[-62.41,4.1],[-62.46,4.06],[-62.47,4.01],[-62.51,3.96],[-62.6,3.95],[-62.63,3.97],[-62.67,3.97],[-62.7,3.91],[-62.66,3.83],[-62.66,3.69],[-62.68,3.64],[-62.73,3.6],[-62.76,3.6],[-62.83,3.64],[-62.94,3.54],[-63.03,3.55],[-63.08,3.61],[-63.12,3.63],[-63.15,3.68],[-63.15,3.74],[-63.22,3.74],[-63.26,3.76],[-63.3,3.83],[-63.3,3.89],[-63.35,3.89],[-63.37,3.83],[-63.4,3.8],[-63.45,3.79],[-63.47,3.77],[-63.59,3.8],[-63.65,3.85],[-63.72,3.83],[-63.82,3.87],[-63.88,3.86],[-63.94,3.8],[-63.99,3.8],[-64.11,3.91],[-64.18,4.05],[-64.38,4.07],[-64.48,4.04],[-64.6,4.04],[-64.57,4],[-64.52,3.97],[-64.5,3.92],[-64.44,3.86],[-64.34,3.83],[-64.23,3.76],[-64.21,3.71],[-64.14,3.65],[-64.1,3.58],[-64.11,3.48],[-64.16,3.42],[-64.16,3.33],[-64.13,3.26],[-64.14,3.14],[-64.01,2.96],[-64,2.9],[-63.96,2.86],[-63.91,2.75],[-63.92,2.61],[-63.97,2.54],[-63.81,2.56],[-63.74,2.52],[-63.56,2.52],[-63.52,2.5],[-63.47,2.5],[-63.44,2.52],[-63.38,2.51],[-63.31,2.45],[-63.29,2.39],[-63.31,2.19],[-63.33,2.13],[-63.37,2.08],[-63.49,2.04],[-63.53,2.04],[-63.55,2.06],[-63.64,1.95],[-63.69,1.95],[-63.81,1.9],[-63.96,1.91],[-63.99,1.88],[-63.98,1.79],[-64,1.76],[-63.99,1.68],[-64.01,1.61],[-64.07,1.53],[-64.13,1.51],[-64.17,1.45],[-64.25,1.41],[-64.27,1.33],[-64.3,1.3],[-64.32,1.29],[-64.38,1.3],[-64.45,1.34],[-64.47,1.38],[-64.54,1.28],[-64.64,1.23],[-64.69,1.17],[-64.78,1.16],[-64.81,1.19],[-64.84,1.16],[-64.91,1.15],[-64.92,1.11],[-64.99,1.04],[-65.09,1.05],[-65.08,0.98],[-65.1,0.96],[-65.11,0.91],[-65.17,0.84],[-65.23,0.83],[-65.25,0.85],[-65.29,0.85],[-65.29,0.83],[-65.33,0.8],[-65.33,0.72],[-65.42,0.62],[-65.45,0.62],[-65.51,0.58],[-65.57,0.58],[-65.66,0.65],[-65.68,0.7],[-65.64,0.8],[-65.58,0.87],[-65.58,0.89],[-65.62,0.92],[-65.72,0.92],[-65.74,0.89],[-65.79,0.89],[-65.83,0.87],[-65.9,0.81],[-65.93,0.75],[-66,0.74],[-66.06,0.69],[-66.17,0.68],[-66.21,0.7],[-66.34,0.68],[-66.9,1.18],[-66.95,1.25],[-66.95,1.32],[-66.93,1.35],[-66.96,1.36],[-66.98,1.4],[-66.98,1.49],[-67.03,1.56],[-67.03,1.62],[-67.1,1.76],[-67.12,1.87],[-67.19,1.95],[-67.19,2.02],[-67.17,2.06],[-67.23,2.1],[-67.29,2.23],[-67.29,2.31],[-67.27,2.35],[-67.35,2.39],[-67.4,2.47],[-67.53,2.59],[-67.57,2.58],[-67.61,2.6],[-67.64,2.64],[-67.65,2.73],[-67.7,2.73],[-67.78,2.76],[-67.82,2.72],[-67.88,2.72],[-67.93,2.76],[-67.92,2.91],[-67.39,3.38],[-67.39,3.4],[-67.43,3.41],[-67.46,3.44],[-67.48,3.52],[-67.51,3.55],[-67.52,3.64],[-67.54,3.68],[-67.63,3.68],[-67.7,3.75],[-67.71,3.84],[-67.76,3.91],[-67.79,4.08],[-67.83,4.12],[-67.87,4.22],[-67.88,4.32],[-67.85,4.39],[-67.93,4.52],[-67.91,4.58],[-67.92,4.64],[-67.89,4.71],[-67.9,4.75],[-67.89,4.84],[-67.91,4.87],[-67.89,5.07],[-67.92,5.11],[-67.92,5.17],[-67.9,5.2],[-67.9,5.23],[-67.92,5.25],[-67.92,5.32],[-67.84,5.42],[-67.77,5.45],[-67.76,5.47],[-67.69,5.51],[-67.68,5.54],[-67.71,5.63],[-67.71,5.69],[-67.67,5.85],[-67.57,5.97],[-67.53,5.98],[-67.51,6.01],[-67.56,6.1],[-67.56,6.18],[-67.64,6.22],[-67.72,6.23],[-67.78,6.22],[-67.82,6.24],[-67.88,6.18],[-67.99,6.13],[-68.07,6.13],[-68.1,6.16],[-68.14,6.16],[-68.16,6.14],[-68.21,6.14],[-68.29,6.09],[-68.34,6.09],[-68.37,6.11],[-68.48,6.11],[-68.51,6.08],[-68.6,6.08],[-68.62,6.06],[-68.82,6.08],[-68.84,6.1],[-69.03,6.12],[-69.06,6.14],[-69.11,6.09],[-69.15,6.08],[-69.17,6.04],[-69.2,6.02],[-69.29,6.01],[-69.37,6.05],[-69.45,6.04],[-69.49,6.06],[-70.15,6.91],[-70.19,6.91],[-70.28,6.86],[-70.32,6.86],[-70.38,6.88],[-70.41,6.91],[-70.53,6.94],[-70.59,7],[-70.62,6.99],[-70.69,7.02],[-70.79,7.01],[-71.02,6.9],[-71.1,6.91],[-71.17,6.95],[-71.25,6.94],[-71.29,6.96],[-71.41,6.96],[-71.49,6.94],[-71.52,6.96],[-71.72,6.96],[-71.77,6.99],[-71.84,6.95],[-71.98,6.94],[-72.07,6.97],[-72.11,7],[-72.24,7.23],[-72.24,7.31],[-72.36,7.31],[-72.37,7.33],[-72.45,7.33],[-72.49,7.35],[-72.51,7.38],[-72.51,7.43],[-72.54,7.45],[-72.55,7.5],[-72.53,7.58],[-72.55,7.62],[-72.55,7.68],[-72.54,7.81],[-72.52,7.87],[-72.56,7.92],[-72.56,7.96],[-72.54,8],[-72.49,8.03],[-72.48,8.07],[-72.44,8.1],[-72.46,8.31],[-72.71,8.57],[-72.83,9.04],[-72.84,9.05],[-72.92,9.01],[-72.97,9.02],[-73.05,9.11],[-73.06,9.13],[-73.05,9.17],[-73.1,9.16],[-73.15,9.11],[-73.22,9.09],[-73.36,9.1],[-73.41,9.14],[-73.42,9.2]]],[[[-63.33,15.69],[-63.33,15.62],[-63.35,15.56],[-63.44,15.45],[-63.55,15.4],[-63.65,15.39],[-63.78,15.43],[-63.87,15.51],[-63.92,15.61],[-63.93,15.73],[-63.89,15.84],[-63.82,15.92],[-63.7,15.98],[-63.6,15.99],[-63.49,15.96],[-63.39,15.88],[-63.33,15.76],[-63.33,15.69]]]]}},latam:{type:"Feature",id:"latam",properties:{},geometry:{type:"Polygon",coordinates:[[[-123,14],[-117.45574,32.58935],[-117.23326,32.52453],[-116.43813,32.58992],[-115.96571,32.62752],[-115.48953,32.66395],[-114.71211,32.7179],[-114.7455,32.65614],[-114.79837,32.6067],[-114.81091,32.49615],[-111.06611,31.33282],[-109.5397,31.33311],[-108.86816,31.33165],[-108.2131,31.33135],[-108.21447,31.78655],[-106.52962,31.78363],[-106.51966,31.77225],[-106.50867,31.76116],[-106.4867,31.74715],[-106.4716,31.75123],[-106.46851,31.75912],[-106.45409,31.76554],[-106.43898,31.75678],[-106.41426,31.75007],[-106.37959,31.7305],[-106.37409,31.71269],[-106.35075,31.69575],[-106.33289,31.65835],[-106.30543,31.6224],[-106.28002,31.56186],[-106.24741,31.54314],[-106.21101,31.47347],[-106.17805,31.45766],[-106.14956,31.43335],[-106.00502,31.38881],[-105.76607,31.16816],[-105.38292,30.84683],[-104.9121,30.63644],[-104.67293,29.91804],[-104.39415,29.56151],[-103.20921,28.98742],[-102.4182,29.81056],[-101.4514,29.77242],[-100.96779,29.34866],[-100.9005,29.31454],[-100.69725,29.14257],[-100.62309,28.91322],[-100.51598,28.749],[-100.51186,28.70474],[-100.50293,28.66227],[-100.40337,28.58271],[-100.01472,28.06956],[-99.53957,27.59837],[-99.53339,27.57859],[-99.51279,27.5655],[-99.52103,27.55607],[-99.52824,27.49731],[-99.5018,27.50066],[-99.48601,27.49426],[-99.47777,27.48299],[-99.48498,27.4635],[-99.49596,27.44857],[-99.48669,27.39067],[-99.53476,27.31321],[-99.44344,27.25951],[-99.45717,27.03222],[-99.07127,26.42692],[-98.9978,26.39248],[-98.46771,26.21028],[-98.25966,26.09194],[-98.08388,26.05061],[-97.95067,26.06172],[-97.79205,26.05185],[-97.57919,25.95002],[-97.51328,25.89073],[-97.46315,25.87899],[-97.41783,25.83821],[-97.34367,25.92594],[-97,26],[-81,24],[-73.5,20.5],[-64,20],[-29,0],[-29,-20],[-63,-51],[-62,-57],[-72,-57],[-113,-30],[-123,14]]]}}};
24711
24712         var resources = {"bw-facebook":{id:"bw-facebook",type:"facebook",featureId:"botswana",countryCodes:["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"}]},"bw-twitter":{id:"bw-twitter",type:"twitter",featureId:"botswana",countryCodes:["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"}]},"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{type:"youthmappers",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",id:"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",featureId:"Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",contacts:[{name:"Organizer",email:"gpcome@gmail.com"}],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.",countryCodes:["ci"],url:"mailto:gpcome@gmail.com"},"ym-The-Gambia-YMCA-University-of-the-Gambia":{type:"youthmappers",name:"Connected YouthMappers",description:"YouthMappers chapter at The Gambia YMCA / University of the Gambia",id:"ym-The-Gambia-YMCA-University-of-the-Gambia",featureId:"The-Gambia-YMCA-University-of-the-Gambia",contacts:[{name:"Organizer",email:"connectedyouthmappers@gmail.com"}],extendedDescription:"Connected YouthMappers is comprised of dedicated young Gambians who aspire to change and aid national development.",countryCodes:["gm"],url:"mailto:connectedyouthmappers@gmail.com"},"cape-coast-youthmappers":{id:"cape-coast-youthmappers",featureId:"cape_coast_gh",type:"twitter",name:"University of Cape Coast YouthMappers",countryCodes:["gh"],languageCodes:["en"],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"}]},"osm-gh-facebook":{id:"osm-gh-facebook",featureId:"ghana",type:"facebook",name:"OpenStreetMap Ghana on Facebook",countryCodes:["gh"],languageCodes:["en"],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:"kwadzo459@gmail.com"}]},"osm-gh-twitter":{id:"osm-gh-twitter",featureId:"ghana",type:"twitter",name:"OpenStreetMap Ghana on Twitter",countryCodes:["gh"],languageCodes:["en"],description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmghana",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}]},"talk-gh":{id:"talk-gh",featureId:"ghana",type:"mailinglist",name:"Talk-gh Mailing List",countryCodes:["gh"],languageCodes:["en"],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"}]},"ym-Kwame-Nkrumah-University-of-Science-and-Technology":{type:"youthmappers",name:"Kwame Nkrumah University of Science and Technology YouthMappers",description:"YouthMappers chapter at Kwame Nkrumah University of Science and Technology",id:"ym-Kwame-Nkrumah-University-of-Science-and-Technology",featureId:"Kwame-Nkrumah-University-of-Science-and-Technology",contacts:[{name:"Organizer",email:"knustyouthmappers@outlook.com"}],countryCodes:["gh"],url:"https://www.facebook.com/KNUSTMappers/"},"ym-University-of-Cape-Coast":{type:"youthmappers",name:"UCC Geographical Society",description:"YouthMappers chapter at University of Cape Coast",id:"ym-University-of-Cape-Coast",featureId:"University-of-Cape-Coast",contacts:[{name:"Organizer",email:"geosoc_ucc@yahoo.com"}],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.”",countryCodes:["gh"],url:"https://www.facebook.com/Geographical-Society-Ucc-105157196204838/info/?tab=page_info"},"ym-University-of-Energy-and-Natural-Resources":{type:"youthmappers",name:"Eco-Club",description:"YouthMappers chapter at University of Energy and Natural Resources",id:"ym-University-of-Energy-and-Natural-Resources",featureId:"University-of-Energy-and-Natural-Resources",contacts:[{name:"Organizer",email:"james.agyei-ohemeng@uenr.edu.gh"}],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.",countryCodes:["gh"],url:"mailto:james.agyei-ohemeng@uenr.edu.gh"},"ym-University-of-Ghana":{type:"youthmappers",name:"University of Ghana YouthMappers",description:"YouthMappers chapter at University of Ghana",id:"ym-University-of-Ghana",featureId:"University-of-Ghana",contacts:[{name:"Organizer",email:"mawulikaf@gmail.com"}],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.",countryCodes:["gh"],url:"https://twitter.com/UGYouthMappers"},"ym-University-of-Mines-and-Technology":{type:"youthmappers",name:"UMaT YouthMappers",description:"YouthMappers chapter at University of Mines and Technology",id:"ym-University-of-Mines-and-Technology",featureId:"University-of-Mines-and-Technology",contacts:[{name:"Organizer",email:"kwadzo459@gmail.com"}],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.",countryCodes:["gh"],url:"http://umatyouthmappers.wordpress.com/"},"ym-General-Lansana-Conte-University":{type:"youthmappers",name:"YouthMappers General Lansana Conte University",description:"YouthMappers chapter at General Lansana Conte University",id:"ym-General-Lansana-Conte-University",featureId:"General-Lansana-Conte-University",contacts:[{name:"Organizer",email:"condefa3@gmail.com"}],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.",countryCodes:["gn"],url:"www.uglc.org"},"ym-Institute-of-Science-and-Veterinary-Medicine":{type:"youthmappers",name:"YouthMappers ISSMV Dalaba",description:"YouthMappers chapter at Institute of Science and Veterinary Medicine",id:"ym-Institute-of-Science-and-Veterinary-Medicine",featureId:"Institute-of-Science-and-Veterinary-Medicine",contacts:[{name:"Organizer",email:"bvloua45@gmail.com"}],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.",countryCodes:["gn"],url:"mailto:bvloua45@gmail.com"},"ym-Universit-de-NZrkor":{type:"youthmappers",name:"Youthmappers à N'Zérékoré",description:"YouthMappers chapter at Université de N'Zérékoré",id:"ym-Universit-de-NZrkor",featureId:"Universit-de-NZrkor",contacts:[{name:"Organizer",email:"donpaul1974@gmail.com"}],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.",countryCodes:["gn"],url:"mailto:donpaul1974@gmail.com"},"ym-Dedan-Kimathi-University-of-Technology":{type:"youthmappers",name:"GDEV",description:"YouthMappers chapter at Dedan Kimathi University of Technology",id:"ym-Dedan-Kimathi-University-of-Technology",featureId:"Dedan-Kimathi-University-of-Technology",contacts:[{name:"Organizer",email:"gdevkenya@gmail.com"}],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",countryCodes:["ke"],url:"https://plus.google.com/u/0/communities/102367719061492681269/stream/e376a295-1246-4e19-9f66-fa6077719f32"},"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology":{type:"youthmappers",name:"Association of Geomatics Engineering Students",description:"YouthMappers chapter at Jomo Kenyatta University of Agriculture and Technology",id:"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology",featureId:"Jomo-Kenyatta-University-of-Agriculture-and-Technology",contacts:[{name:"Organizer",email:"laurahmugeha36@gmail.com"}],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.",countryCodes:["ke"],url:"mailto:laurahmugeha36@gmail.com"},"ym-Karatina-University":{type:"youthmappers",name:"Nature Club Karatina University",description:"YouthMappers chapter at Karatina University",id:"ym-Karatina-University",featureId:"Karatina-University",contacts:[{name:"Organizer",email:"karunatureclub@gmail.com"}],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.",countryCodes:["ke"],url:"https://twitter.com/karunature"},"ym-Kenyatta-University":{type:"youthmappers",name:"Kenyatta University GIS Club",description:"YouthMappers chapter at Kenyatta University",id:"ym-Kenyatta-University",featureId:"Kenyatta-University",contacts:[{name:"Organizer",email:"jamesmagige24@gmail.com"}],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.",countryCodes:["ke"],url:"mailto:jamesmagige24@gmail.com"},"ym-Moi-University":{type:"youthmappers",name:"Geography Students Association",description:"YouthMappers chapter at Moi University",id:"ym-Moi-University",featureId:"Moi-University",contacts:[{name:"Organizer",email:"geosamu44@gmail.com"}],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.",countryCodes:["ke"],url:"mailto:geosamu44@gmail.com?subject=YouthMappers%20at%20Moi%20University"},"ym-Technical-University-of-Kenya":{type:"youthmappers",name:"Geospatial Science Student Association",description:"YouthMappers chapter at Technical University of Kenya",id:"ym-Technical-University-of-Kenya",featureId:"Technical-University-of-Kenya",contacts:[{name:"Organizer",email:"youthmappers.tuk@gmail.com"}],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",countryCodes:["ke"],url:"mailto:youthmappers.tuk@gmail.com"},"ym-University-of-Nairobi":{type:"youthmappers",name:"Geospatial Engineering Students Association",description:"YouthMappers chapter at University of Nairobi",id:"ym-University-of-Nairobi",featureId:"University-of-Nairobi",contacts:[{name:"Organizer",email:"contact@mapkibera.org"}],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.",countryCodes:["ke"],url:"www.geospatial.uonbi.ac.ke"},"ym-African-Methodist-Episcopal-University":{type:"youthmappers",name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University",id:"ym-African-Methodist-Episcopal-University",featureId:"African-Methodist-Episcopal-University",contacts:[{name:"Organizer",email:"youthmapper.ameu@gmail.com"}],countryCodes:["lr"],url:"mailto:youthmapper.ameu@gmail.com"},"ym-Cuttington-University":{type:"youthmappers",name:"Cuttington University YouthMappers",description:"YouthMappers chapter at Cuttington University",id:"ym-Cuttington-University",featureId:"Cuttington-University",contacts:[{name:"Organizer",email:"youthmappers.cu@gmail.com"}],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.",countryCodes:["lr"],url:"mailto:youthmappers.cu@gmail.com"},"ym-Grand-Gedeh-County-Community-College":{type:"youthmappers",name:"YouthMappers at Grand Gedeh County Community College",description:"YouthMappers chapter at Grand Gedeh County Community College",id:"ym-Grand-Gedeh-County-Community-College",featureId:"Grand-Gedeh-County-Community-College",contacts:[{name:"Organizer",email:"yimodaxzibitallison@gmail.com"}],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.",countryCodes:["lr"],url:"mailto:yimodaxzibitallison@gmail.com"},"ym-Nimba-County-Community-College":{type:"youthmappers",name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College",id:"ym-Nimba-County-Community-College",featureId:"Nimba-County-Community-College",contacts:[{name:"Organizer",email:"ncccyouthmappers@yahoo.com"}],countryCodes:["lr"],url:"mailto:ncccyouthmappers@yahoo.com"},"ym-Stella-Maris-Polytechnic":{type:"youthmappers",name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic",id:"ym-Stella-Maris-Polytechnic",featureId:"Stella-Maris-Polytechnic",contacts:[{name:"Organizer",email:"youthmappers.smp@gmail.com"}],countryCodes:["lr"],url:"mailto:youthmappers.smp@gmail.com"},"ym-University-of-Liberia-YouthMappers":{type:"youthmappers",name:"University of Liberia YouthMappers",description:"YouthMappers chapter at University of Liberia YouthMappers",id:"ym-University-of-Liberia-YouthMappers",featureId:"University-of-Liberia-YouthMappers",contacts:[{name:"Organizer",email:"ulym2017@gmail.com"}],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.",countryCodes:["lr"],url:"mailto:ulym2017@gmail.com"},"osm-mg-facebook":{id:"osm-mg-facebook",featureId:"madagascar",type:"facebook",name:"OpenStreetMap Madagascar Facebook Group",countryCodes:["mg"],languageCodes:["mg","fr"],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"}]},"talk-mg":{id:"talk-mg",featureId:"madagascar",type:"mailinglist",countryCodes:["mg"],languageCodes:["mg","fr"],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"}]},"ym-University-of-Malawi":{type:"youthmappers",name:"Chanco Malawi YouthMappers",description:"YouthMappers chapter at University of Malawi",id:"ym-University-of-Malawi",featureId:"University-of-Malawi",contacts:[{name:"Organizer",email:"zolamanyungwa@gmail.com"}],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.",countryCodes:["mw"],url:"mailto:zolamanyungwa@gmail.com"},"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{type:"youthmappers",name:"Etudiant au Laboratoire HoPE",description:"YouthMappers chapter at Université des Sciences Sociale et de Gestion de Bamako",id:"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",featureId:"Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",contacts:[{name:"Organizer",email:"youthmappersfhg@gmail.com"}],countryCodes:["ml"],url:"mailto:youthmappersfhg@gmail.com"},"ym-Universidade-Eduardo-Mondlane":{type:"youthmappers",name:"Comunidade YouthMappers Moçambique",description:"YouthMappers chapter at Universidade Eduardo Mondlane",id:"ym-Universidade-Eduardo-Mondlane",featureId:"Universidade-Eduardo-Mondlane",contacts:[{name:"Organizer",email:"moz.youthmappers1@hotmail.com"}],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.",countryCodes:["mz"],url:"www.facebook.com/Moz-YouthMappers"},"ym-Namibia-University-of-Science-and-Technology":{type:"youthmappers",name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology",id:"ym-Namibia-University-of-Science-and-Technology",featureId:"Namibia-University-of-Science-and-Technology",contacts:[{name:"Organizer",email:"patriciasem87@gmail.com"}],countryCodes:["na"],url:"mailto:patriciasem87@gmail.com"},"ym-Abia-State-University":{type:"youthmappers",name:"AbsuMappersTeam",description:"YouthMappers chapter at Abia State University",id:"ym-Abia-State-University",featureId:"Abia-State-University",contacts:[{name:"Organizer",email:"absumappersteam@gmail.com"}],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",countryCodes:["ng"],url:"https://www.facebook.com/Absumappersteam-1709186109157466"},"ym-Ahmadu-Bello-University":{type:"youthmappers",name:"ABU Geomappers",description:"YouthMappers chapter at Ahmadu Bello University",id:"ym-Ahmadu-Bello-University",featureId:"Ahmadu-Bello-University",contacts:[{name:"Organizer",email:"abugeomappers@gmail.com"}],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.",countryCodes:["ng"],url:"https://web.facebook.com/abugeomappers/"},"ym-Federal-School-of-Surveys":{type:"youthmappers",name:"OyoMappersTeam (OMT) Oyo",description:"YouthMappers chapter at Federal School of Surveys",id:"ym-Federal-School-of-Surveys",featureId:"Federal-School-of-Surveys",contacts:[{name:"Organizer",email:"oyomappersteam@gmail.com"}],countryCodes:["ng"],url:"https://web.facebook.com/Oyomappersteam-omt-oyo-1432864713415765/"},"ym-Federal-University-of-Technology-Akure":{type:"youthmappers",name:"YouthMappers Futa Space Club",description:"YouthMappers chapter at Federal University of Technology, Akure",id:"ym-Federal-University-of-Technology-Akure",featureId:"Federal-University-of-Technology-Akure",contacts:[{name:"Organizer",email:"denironyx@gmail.com"}],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.",countryCodes:["ng"],url:"http://spaceclubfuta.com.ng/"},"ym-Ignatius-Ajuru-University-of-Education":{type:"youthmappers",name:"IgnatiusMappersTeam (IMT)",description:"YouthMappers chapter at Ignatius Ajuru University of Education",id:"ym-Ignatius-Ajuru-University-of-Education",featureId:"Ignatius-Ajuru-University-of-Education",contacts:[{name:"Organizer",email:"ignatiusmappersteam@gmail.com"}],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.",countryCodes:["ng"],url:"https://fb.me/ignatiusmappersteam"},"ym-University-of-Nigeria-Nsukka":{type:"youthmappers",name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",id:"ym-University-of-Nigeria-Nsukka",featureId:"University-of-Nigeria-Nsukka",contacts:[{name:"Organizer",email:"lionmappersteam@gmail.com"}],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.",countryCodes:["ng"],url:"http://fb.me/LionMappersTeamNsukka;and send messages to our Page at m.me/LionMappersTeamNsukka"},"ym-University-of-Port-Harcourt":{type:"youthmappers",name:"UniqueMappersTeam (UMT) Port Harcourt",description:"YouthMappers chapter at University of Port Harcourt",id:"ym-University-of-Port-Harcourt",featureId:"University-of-Port-Harcourt",contacts:[{name:"Organizer",email:"victor.sunday@uniport.edu.ng"}],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.",countryCodes:["ng"],url:"https://web.facebook.com/uniquemappersteamportharcourt/"},"ym-University-of-Nigeria-Enugu-Campus":{type:"youthmappers",name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",id:"ym-University-of-Nigeria-Enugu-Campus",featureId:"University-of-Nigeria-Enugu-Campus",contacts:[{name:"Organizer",email:"lmtenugucampus@gmail.com"}],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.",countryCodes:["ng"],url:"https://web.facebook.com/Lionmappersteam-enugu-Campus-361221567667528/"},"osm-africa-telegram":{id:"osm-africa-telegram",featureId:"africa_full",type:"telegram",name:"OpenStreetMap Africa Telegram",description:"OpenStreetMap Telegram for Africa",url:"https://t.me/OSMAfrica",contacts:[{name:"OSM Africa",email:"info@openstreetmap.africa"}]},"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri":{type:"youthmappers",name:"YouthMappers at INES Ruhengeri",description:"YouthMappers chapter at Insititue d' Enseignement Superieur de Ruhengeri",id:"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri",featureId:"Insititue-d-Enseignement-Superieur-de-Ruhengeri",contacts:[{name:"Organizer",email:"dufitesaie91@yahoo.com"}],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.",countryCodes:["rw"],url:"www.ines.ac.rw"},"ym-University-of-Rwanda-Huye-Campus":{type:"youthmappers",name:"Rwanda YouthMappers",description:"YouthMappers chapter at University of Rwanda - Huye Campus",id:"ym-University-of-Rwanda-Huye-Campus",featureId:"University-of-Rwanda-Huye-Campus",contacts:[{name:"Organizer",email:"erneruz@gmail.com"}],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.",countryCodes:["rw"],url:"https://www.facebook.com/Rwanda-YouthMappers"},"ym-Institut-Suprieur-de-Management-Kolda":{type:"youthmappers",name:"Les Femmes Leaders de ISM/Kolda",description:"YouthMappers chapter at Institut Supérieur de Management Kolda",id:"ym-Institut-Suprieur-de-Management-Kolda",featureId:"Institut-Suprieur-de-Management-Kolda",contacts:[{name:"Organizer",email:"koldaym@gmail.com"}],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.",countryCodes:["sn"],url:"mailto:koldaym@gmail.com"},"ym-Universit-Gaston-Berger":{type:"youthmappers",name:"YouthMappers at UGB",description:"YouthMappers chapter at Université Gaston Berger",id:"ym-Universit-Gaston-Berger",featureId:"Universit-Gaston-Berger",contacts:[{name:"Organizer",email:"youthmappers.ugb@gmail.com"}],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.",countryCodes:["sn"],url:"https://web.facebook.com/youthmappersugb/"},"ym-Fourah-Bay-College":{type:"youthmappers",name:"Student's Geographical Association",description:"YouthMappers chapter at Fourah Bay College",id:"ym-Fourah-Bay-College",featureId:"Fourah-Bay-College",contacts:[{name:"Organizer",email:"sgayouthmappers@gmail.com"}],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.",countryCodes:["sl"],url:"mailto:sgayouthmappers@gmail.com?subject=YouthMappers%20at%20Fourah%20Bay%20College"},"ym-Njala-University-Freetown-Campus":{type:"youthmappers",name:"Njala Freetown YouthMappers",description:"YouthMappers chapter at Njala University, Freetown Campus",id:"ym-Njala-University-Freetown-Campus",featureId:"Njala-University-Freetown-Campus",contacts:[{name:"Organizer",email:"njalafreetownmappers@gmail.com"}],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.",countryCodes:["sl"],url:"mailto:Njalafreetownmappers@gmail.com"},"ym-Njala-University-Njala-Campus":{type:"youthmappers",name:"YouthMappers Njala University, Njala Campus",description:"YouthMappers chapter at Njala University, Njala Campus",id:"ym-Njala-University-Njala-Campus",featureId:"Njala-University-Njala-Campus",contacts:[{name:"Organizer",email:"youthmappersnu2017@gmail.com"}],countryCodes:["sl"],url:"mailto:youthmappersnu2017@gmail.com"},"ym-University-of-Pretoria":{type:"youthmappers",name:"Centre for Geoinformation Science",description:"YouthMappers chapter at University of Pretoria",id:"ym-University-of-Pretoria",featureId:"University-of-Pretoria",contacts:[{name:"Organizer",email:"cgis-info@kendy.up.ac.za"}],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.",countryCodes:["za"],url:"http://www.up.ac.za/cgis"},"ym-Ardhi-University":{type:"youthmappers",name:"ARU Mapper",description:"YouthMappers chapter at Ardhi University",id:"ym-Ardhi-University",featureId:"Ardhi-University",contacts:[{name:"Organizer",email:"bayonakennedy@gmail.com"}],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.",countryCodes:["tz"],url:"mailto:bayonakennedy@gmail.com"},"ym-Institute-of-Finance-Management":{type:"youthmappers",name:"IFM mappers",description:"YouthMappers chapter at Institute of Finance Management",id:"ym-Institute-of-Finance-Management",featureId:"Institute-of-Finance-Management",contacts:[{name:"Organizer",email:"supermalik95@gmail.com"}],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",countryCodes:["tz"],url:"mailto:supermalik95@gmail.com"},"ym-Institute-of-Rural-Development-Planning-Mwanza":{type:"youthmappers",name:"Youth Mappers Chapter at Institute of Rural Development Planning - Lake Zone Centre",description:"YouthMappers chapter at Institute of Rural Development Planning Mwanza",id:"ym-Institute-of-Rural-Development-Planning-Mwanza",featureId:"Institute-of-Rural-Development-Planning-Mwanza",contacts:[{name:"Organizer",email:"shabanimagawila@gmail.com"}],countryCodes:["tz"],url:"www.facebook.com/IYMLZC/"},"ym-Institute-of-Rural-Development-Planning":{type:"youthmappers",name:"Mipango YouthMappers Chapter",description:"YouthMappers chapter at Institute of Rural Development Planning",id:"ym-Institute-of-Rural-Development-Planning",featureId:"Institute-of-Rural-Development-Planning",contacts:[{name:"Organizer",email:"msmapperschapter@gmail.com"}],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.",countryCodes:["tz"],url:"mailto:msmapperschapter@gmail.com"},"ym-Open-University-of-Tanzania":{type:"youthmappers",name:"Youth Mappers at Open University of Tanzania",description:"YouthMappers chapter at Open University of Tanzania",id:"ym-Open-University-of-Tanzania",featureId:"Open-University-of-Tanzania",contacts:[{name:"Organizer",email:"youthmapout@gmail.com"}],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.",countryCodes:["tz"],url:"mailto:youthmapout@gmail.com"},"ym-Sokoine-University-of-Agriculture":{type:"youthmappers",name:"SMCoSE YouthMappers",description:"YouthMappers chapter at Sokoine University of Agriculture",id:"ym-Sokoine-University-of-Agriculture",featureId:"Sokoine-University-of-Agriculture",contacts:[{name:"Organizer",email:"smcoseyouthmappers@gmail.com"}],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.",countryCodes:["tz"],url:"mailto:SMCoSEyouthmappers@gmail.com"},"ym-University-of-Dar-es-Salaam":{type:"youthmappers",name:"YouthMappers at University of Dar es Salaam",description:"YouthMappers chapter at University of Dar es Salaam",id:"ym-University-of-Dar-es-Salaam",featureId:"University-of-Dar-es-Salaam",contacts:[{name:"Organizer",email:"godluckur@gmail.com"}],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 .",countryCodes:["tz"],url:"https://www.facebook.com/UDSMYouthMappers/"},"ym-Busitema-University":{type:"youthmappers",name:"Good Mappers",description:"YouthMappers chapter at Busitema University",id:"ym-Busitema-University",featureId:"Busitema-University",contacts:[{name:"Organizer",email:"mulindwasteven82@gmail.com"}],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.",countryCodes:["ug"],url:"https://m.facebook.com/HOTBusitemaUniv/"},"ym-Gulu-University":{type:"youthmappers",name:"CSGU Mappers",description:"YouthMappers chapter at Gulu University",id:"ym-Gulu-University",featureId:"Gulu-University",contacts:[{name:"Organizer",email:"git445@gmail.com"}],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.",countryCodes:["ug"],url:"mailto:git445@gmail.com?subject=YouthMappers%20at%20Gulu%20University"},"ym-Kumi-University":{type:"youthmappers",name:"Ever Last YouthMappers",description:"YouthMappers chapter at Kumi University",id:"ym-Kumi-University",featureId:"Kumi-University",contacts:[{name:"Organizer",email:"kumiuniversityeverlastyouthmap@gmail.com"}],extendedDescription:"This energetic group of students organizes within the faculty of Science and Information Technology.",countryCodes:["ug"],url:"mailto:kumiuniversityeverlastyouthmap@gmail.com?subject=YouthMappers%20at%20Kumi%20University"},"ym-Makerere-University":{type:"youthmappers",name:"Geo YouthMappers",description:"YouthMappers chapter at Makerere University",id:"ym-Makerere-University",featureId:"Makerere-University",contacts:[{name:"Organizer",email:"geo-youthmappers@googlegroups.com"}],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.",countryCodes:["ug"],url:"https://www.facebook.com/groups/1742657446017065/"},"ym-Mbarara-University-of-Science-and-Technology":{type:"youthmappers",name:"MUST Street Mappers",description:"YouthMappers chapter at Mbarara University of Science and Technology",id:"ym-Mbarara-University-of-Science-and-Technology",featureId:"Mbarara-University-of-Science-and-Technology",contacts:[{name:"Organizer",email:"muststreetmappers@gmail.com"}],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.",countryCodes:["ug"],url:"https://web.facebook.com/muststreetmappers/"},"ym-St.-Augustine-International-University":{type:"youthmappers",name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University",id:"ym-St.-Augustine-International-University",featureId:"St.-Augustine-International-University",contacts:[{name:"Organizer",email:"youthmapperssaiu@gmail.com"}],countryCodes:["ng"],url:"mailto:youthmapperssaiu@gmail.com"},"ym-Uganda-Christian-University-Mbale-Campus":{type:"youthmappers",name:"Mappers for Life",description:"YouthMappers chapter at Uganda Christian University Mbale Campus",id:"ym-Uganda-Christian-University-Mbale-Campus",featureId:"Uganda-Christian-University-Mbale-Campus",contacts:[{name:"Organizer",email:"munhilll@gmail.com"}],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.",countryCodes:["ug"],url:"mailto:munhilll@gmail.com?subject=YouthMappers%20and%20the%20Uganda%20Christian%20University%20Mappers%20for%20Life"},"ym-Uganda-Pentecostal-University":{type:"youthmappers",name:"HiTech Youth Mappers",description:"YouthMappers chapter at Uganda Pentecostal University",id:"ym-Uganda-Pentecostal-University",featureId:"Uganda-Pentecostal-University",contacts:[{name:"Organizer",email:"hitechyouthmappers@gmail.com"}],extendedDescription:"A new Youthmappers Chapter in Western Uganda. Ready to map and provide open data with OpenStreetMap for development purposes.",countryCodes:["ug"],url:"mailto:hitechyouthmappers@gmail.com"},"ym-St.-Mawaggali-Trades-Training-Institute":{type:"youthmappers",name:"MawaggaliMappers",description:"YouthMappers chapter at St. Mawaggali Trades Training Institute",id:"ym-St.-Mawaggali-Trades-Training-Institute",featureId:"St.-Mawaggali-Trades-Training-Institute",contacts:[{name:"Organizer",email:"mawaggalimappers@gmail.com"}],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.",countryCodes:["zm"],url:"mailto:mawaggalimappers@gmail.com"},"ym-The-University-of-Zambia":{type:"youthmappers",name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia",id:"ym-The-University-of-Zambia",featureId:"The-University-of-Zambia",contacts:[{name:"Organizer",email:"chombachishala13@gmail.com"}],countryCodes:["zm"],url:"https://www.facebook.com/search/posts/?q=youth%20mappers%20unza"},"ym-University-of-Zimbabwe":{type:"youthmappers",name:"UZMappers",description:"YouthMappers chapter at University of Zimbabwe",id:"ym-University-of-Zimbabwe",featureId:"University-of-Zimbabwe",contacts:[{name:"Organizer",email:"uzmappersteam@gmail.com"}],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.",countryCodes:["zw"],url:"https://www.facebook.com/Uzmappersteam-Zimbabwe-246038666256392/"},"osm-afghanistan-facebook":{id:"osm-afghanistan-facebook",featureId:"afghanistan",type:"facebook",name:"OpenStreetMap Afghanistan",description:"Improve OpenStreetMap in Afghanistan",url:"https://www.facebook.com/groups/321292812113316/",countryCodes:["af"],languageCodes:["en","ps","fa"],contacts:[{name:"Walker Kosmidou-Bradley",email:"walker.t.bradley@gmail.com"}]},"OSM-BGD-facebook":{id:"OSM-BGD-facebook",featureId:"BGD",type:"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!",url:"https://www.facebook.com/groups/osmbd/",contacts:[{name:"Ahasanul Hoque",email:"hoque.ahasan@gmail.com"}]},"ym-Asian-University-for-Women":{type:"youthmappers",name:"YouthMappers at AUW",description:"YouthMappers chapter at Asian University for Women",id:"ym-Asian-University-for-Women",featureId:"Asian-University-for-Women",contacts:[{name:"Organizer",email:"harunur.rashid@auw.edu.bd"}],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.",countryCodes:["bd"],url:"http://www.auw.edu.bd/"},"ym-Dhaka-College":{type:"youthmappers",name:"YouthMappers Daka College",description:"YouthMappers chapter at Dhaka College",id:"ym-Dhaka-College",featureId:"Dhaka-College",contacts:[{name:"Organizer",email:"youthmappersdc@gmail.com"}],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.",countryCodes:["bd"],url:"https://www.facebook.com/groups/321220498214124/"},"ym-Dhaka-University":{type:"youthmappers",name:"Openstreetmap YouthMappers",description:"YouthMappers chapter at Dhaka University",id:"ym-Dhaka-University",featureId:"Dhaka-University",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}],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.",countryCodes:["bd"],url:"https://www.facebook.com/groups/osmDU/1773150346233538/?notif_t=group_activity&notif_id=1472953820177890"},"ym-Eastern-University":{type:"youthmappers",name:"YouthMappers at Eastern University",description:"YouthMappers chapter at Eastern University",id:"ym-Eastern-University",featureId:"Eastern-University",contacts:[{name:"Organizer",email:"infolimon@gmail.com"}],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.",countryCodes:["bd"],url:"mailto:infolimon@gmail.com"},"ym-Jahangirnagar-University":{type:"youthmappers",name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University",id:"ym-Jahangirnagar-University",featureId:"Jahangirnagar-University",contacts:[{name:"Organizer",email:"s.t.islam@juniv.edu"}],countryCodes:["bd"],url:"mailto:s.t.islam@juniv.edu"},"ym-Khulna-University":{type:"youthmappers",name:"Openstreetmap",description:"YouthMappers chapter at Khulna University",id:"ym-Khulna-University",featureId:"Khulna-University",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}],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.",countryCodes:["bd"],url:"https://www.facebook.com/groups/osmku/"},"ym-Rajshahi-University-of-Engineering-Technology":{type:"youthmappers",name:"YouthMappers at RUET",description:"YouthMappers chapter at Rajshahi University of Engineering & Technology",id:"ym-Rajshahi-University-of-Engineering-Technology",featureId:"Rajshahi-University-of-Engineering-Technology",contacts:[{name:"Organizer",email:"ruetmappers@gmail.com"}],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.",countryCodes:["bd"],url:"mailto:ruetmappers@gmail.com"},"ym-Sherubtse-College":{type:"youthmappers",name:"Geographical Society",description:"YouthMappers chapter at Sherubtse College",id:"ym-Sherubtse-College",featureId:"Sherubtse-College",contacts:[{name:"Organizer",email:"gsscbhutan@gmail.com"}],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'!",countryCodes:["bt"],url:"mailto:gsscbhutan@gmail.com?subject=About%20the%20Royal%20University%20of%20Bhutan%20Geographical%20Society%20and%20Youth%20Mappers"},"OSM-India-facebook":{id:"OSM-India-facebook",featureId:"india_full",type:"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!",url:"https://www.facebook.com/groups/mappingindia/",contacts:[{name:"Jinal Foflia",email:"fofliajinal@gmail.com"},{name:"Arun Ganesh",email:"arun.planemad@gmail.com"}],events:[{id:"sotmasia2018",i18n:true,name:"State of the Map Asia 2018",description:"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India",where:"Indian Institute of Management, Bangalore, India",when:"2018-11-17",url:"http://stateofthemap.asia/"}]},"osm-india-forum":{id:"osm-india-forum",featureId:"india_full",type:"forum",countryCodes:["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"}]},"osm-india-github":{id:"osm-india-github",featureId:"india_full",type:"github",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-mailinglist":{id:"OSM-india-mailinglist",featureId:"india_full",type:"mailinglist",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"}]},"osm-india-telegram":{id:"osm-india-telegram",featureId:"india_full",type:"telegram",name:"OpenStreetMap India Telegram",description:"Join our family: {url}",url:"https://t.me/OSMIndia",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"OSM-india-twitter":{id:"OSM-india-twitter",featureId:"india_full",type:"twitter",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-india-website":{id:"osm-india-website",featureId:"india_full",type:"osm",name:"OpenStreetMap India",countryCodes:["in"],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",featureId:"india_full",type:"wiki",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",featureId:"india_full",type:"youtube",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-India-Puducherry-Facebook":{id:"OSM-India-Puducherry-Facebook",featureId:"india_puducherry",type:"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.",url:"https://www.facebook.com/FSHMP",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}]},"OSM-Puducherry-Mailing-List":{id:"OSM-Puducherry-Mailing-List",featureId:"india_puducherry",type:"mailinglist",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"}]},"OSM-India-Puducherry-Matrix":{id:"OSM-India-Puducherry-Matrix",featureId:"india_puducherry",type:"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.",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"}]},"ym-Gujarat-University":{type:"youthmappers",name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University",id:"ym-Gujarat-University",featureId:"Gujarat-University",contacts:[{name:"Organizer",email:"coolmulls@gmail.com"}],countryCodes:["in"],url:"mailto:Coolmulls@gmail.com"},"OSM-IDN-facebook":{id:"OSM-IDN-facebook",featureId:"IDN",type:"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!",url:"https://www.facebook.com/groups/osm.id/",contacts:[{name:"Yantisa Akhadi",email:"yantisa.akhadi@hotosm.org"}]},"ym-Universitas-Negeri-Makassar":{type:"youthmappers",name:"Kontur Geografi",description:"YouthMappers chapter at Universitas Negeri Makassar",id:"ym-Universitas-Negeri-Makassar",featureId:"Universitas-Negeri-Makassar",contacts:[{name:"Organizer",email:"konturgeografi@gmail.com"}],countryCodes:["in"],url:"https://tentangkontur.blogspot.co.id"},"ym-University-Muhammadiyah-Surakarta":{type:"youthmappers",name:"SpaceTime",description:"YouthMappers chapter at University Muhammadiyah Surakarta",id:"ym-University-Muhammadiyah-Surakarta",featureId:"University-Muhammadiyah-Surakarta",contacts:[{name:"Organizer",email:"spacetime1717@gmail.com"}],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.",countryCodes:["in"],url:"mailto:spacetime1717@gmail.com"},"osm-iran-aparat":{id:"osm-iran-aparat",featureId:"iran",type:"aparat",countryCodes:["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",featureId:"iran",type:"forum",countryCodes:["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"}]},"osm-iran-telegram":{id:"osm-iran-telegram",featureId:"iran",type:"telegram",countryCodes:["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-japan-facebook":{id:"OSM-japan-facebook",featureId:"japan",type:"facebook",name:"OpenStreetMap Japan Community",countryCodes:["jp"],languageCodes:["ja"],description:"Mappers and OpenStreetMap users in Japan",url:"https://www.facebook.com/groups/osmjapan/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-japan-mailinglist":{id:"OSM-japan-mailinglist",featureId:"japan",type:"mailinglist",name:"OpenStreetMap Japan Mailinglist",countryCodes:["jp"],languageCodes:["ja"],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"}]},"OSM-japan-twitter":{id:"OSM-japan-twitter",featureId:"japan",type:"twitter",name:"OpenStreetMap Japan Twitter",countryCodes:["jp"],languageCodes:["ja"],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",featureId:"japan",type:"group",name:"OpenStreetMap Japan",countryCodes:["jp"],languageCodes:["ja"],description:"Mappers and OpenStreetMap users in Japan",url:"https://openstreetmap.jp/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-MY-facebook":{id:"OSM-MY-facebook",featureId:"malaysia",type:"facebook",countryCodes:["my"],languageCodes:["ms","en"],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"}]},"OSM-MY-forum":{id:"OSM-MY-forum",featureId:"malaysia",type:"forum",countryCodes:["my"],languageCodes:["ms","en"],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"}]},"OSM-MY-matrix":{id:"OSM-MY-matrix",featureId:"malaysia",type:"matrix",countryCodes:["my"],languageCodes:["ms","en"],name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}",signupUrl:"https://riot.im/app/#/register",url:"https://riot.im/app/#/room/#OpenstreetmapMalaysia:matrix.org",contacts:[{name:"Ahmad Amsyar",email:"OfficiallyAhmad@protonmail.ch"}]},"OSM-MNG-facebook":{id:"OSM-MNG-facebook",featureId:"MNG",type:"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!",url:"https://www.facebook.com/groups/OSM.Mongolia/",contacts:[{name:" ",email:"talk-mn@openstreetmap.org"}]},"OSM-MMR-facebook":{id:"OSM-MMR-facebook",featureId:"MMR",type:"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!",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"}]},"OSM-Nepal-facebook":{id:"OSM-Nepal-facebook",featureId:"NPL",type:"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!",url:"https://www.facebook.com/groups/mapkathmandu/",contacts:[{name:"Kshitiz Khanal",email:"khanal1990@gmail.com"}]},"ym-Institute-of-Crisis-Management-Studies":{type:"youthmappers",name:"Institute of Crisis Management Studies YouthMappers",description:"YouthMappers chapter at Institute of Crisis Management Studies",id:"ym-Institute-of-Crisis-Management-Studies",featureId:"Institute-of-Crisis-Management-Studies",contacts:[{name:"Organizer",email:"deepakadhikari@tuicms.edu.np"}],extendedDescription:"To develop Crisis Mappers to assist during disaster situations.",countryCodes:["np"],url:"mailto:deepakadhikari@tuicms.edu.np"},"ym-Kathmandu-University":{type:"youthmappers",name:"Geomatics Engineering Society,GES",description:"YouthMappers chapter at Kathmandu University",id:"ym-Kathmandu-University",featureId:"Kathmandu-University",contacts:[{name:"Organizer",email:"ges@ku.edu.np"}],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.",countryCodes:["np"],url:"ku.edu.np/ges"},"ym-Tribhuvan-University":{type:"youthmappers",name:"Geomatics Engineering Students Association",description:"YouthMappers chapter at Tribhuvan University",id:"ym-Tribhuvan-University",featureId:"Tribhuvan-University",contacts:[{name:"Organizer",email:"gesan.nepal@gmail.com"}],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.",countryCodes:["np"],url:"http://gesanwrc.wordpress.com/"},"OSM-Asia-mailinglist":{id:"OSM-Asia-mailinglist",featureId:"asia_full",type:"mailinglist",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"}]},"osm-asia-telegram":{id:"osm-asia-telegram",featureId:"asia_full",type:"telegram",name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}",url:"https://t.me/OpenStreetMapAsia",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"}]},"OSM-PH-facebook":{id:"OSM-PH-facebook",featureId:"philippines",type:"facebook",countryCodes:["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"}]},"OSM-PH-mailinglist":{id:"OSM-PH-mailinglist",featureId:"philippines",type:"mailinglist",countryCodes:["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"}]},"OSM-PH-slack":{id:"OSM-PH-slack",featureId:"philippines",type:"slack",countryCodes:["ph"],name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}",signupUrl:"https://osmph-chat.herokuapp.com/",url:"https://osmph.slack.com",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}]},"OSM-PH-telegram":{id:"OSM-PH-telegram",featureId:"philippines",type:"telegram",countryCodes:["ph"],languageCodes:["tl","en"],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"}]},"ym-Far-Eastern-University-Institute-of-Technology":{type:"youthmappers",name:"Junior Philippines Computer Society",description:"YouthMappers chapter at Far Eastern University -Institute of Technology",id:"ym-Far-Eastern-University-Institute-of-Technology",featureId:"Far-Eastern-University-Institute-of-Technology",contacts:[{name:"Organizer",email:"jpcsfeutech@outlook.com"}],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",countryCodes:["ph"],url:"mailto:jpcsfeutech@outlook.com?subject=YouthMappers%20and%20Junior%20Philippines%20Computer%20Society"},"ym-University-of-the-Philippines-Resilience-Institute":{type:"youthmappers",name:"YouthMappers UP Resilience Institute",description:"YouthMappers chapter at University of the Philippines Resilience Institute",id:"ym-University-of-the-Philippines-Resilience-Institute",featureId:"University-of-the-Philippines-Resilience-Institute",contacts:[{name:"Organizer",email:"llnguyen@up.edu.ph"}],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.",countryCodes:["ph"],url:"https://www.facebook.com/UP-Resillience-Institute-Youth-Mappers-123477508533225"},"OSM-RU-forum":{id:"OSM-RU-forum",type:"forum",featureId:"russia",countryCodes:["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"}]},"OSM-RU-telegram":{id:"OSM-RU-telegram",type:"telegram",featureId:"russia",countryCodes:["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-south-korea-telegram":{id:"OSM-south-korea-telegram",featureId:"south_korea",type:"telegram",countryCodes:["kr"],languageCodes:["ko","en"],name:"OSM South Korea Telegram",description:"Unofficial Channnel for OpenStreetMap contributors, communities, and users in South 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-sri-lanka-facebook":{id:"OSM-sri-lanka-facebook",featureId:"sri_lanka",type:"facebook",countryCodes:["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"}]},"OSM-TW-facebook":{id:"OSM-TW-facebook",featureId:"taiwan",type:"facebook",name:"OpenStreetMap Taiwan Community",countryCodes:["tw"],languageCodes:["zh-tw"],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"}]},"OSM-TW-mailinglist":{id:"OSM-TW-mailinglist",featureId:"taiwan",type:"mailinglist",name:"OpenStreetMap Taiwan Mailinglist",countryCodes:["tw"],languageCodes:["zh-tw","en"],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"}]},"OSM-TH-CNX-meetup":{id:"OSM-TH-CNX-meetup",featureId:"thailand_cnx",type:"meetup",countryCodes:["th"],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"}]},"OSM-TH-facebook":{id:"OSM-TH-facebook",featureId:"thailand_full",type:"facebook",countryCodes:["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"}]},"OSM-TH-forum":{id:"OSM-TH-forum",featureId:"thailand_full",type:"forum",countryCodes:["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"}]},"al-forum":{id:"al-forum",featureId:"albania",type:"forum",countryCodes:["al"],languageCodes:["sq","en"],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"}]},"al-maptime-tirana":{id:"al-maptime-tirana",featureId:"al-tirana",type:"group",countryCodes:["al"],languageCodes:["sq","en"],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",featureId:"albania",type:"telegram",countryCodes:["al"],languageCodes:["sq","en"],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"}]},"at-forum":{id:"at-forum",featureId:"austria",type:"forum",name:"OpenStreetMap Austria Forum",countryCodes:["at"],languageCodes:["en","de"],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"}]},"at-mailinglist":{id:"at-mailinglist",featureId:"austria",type:"mailinglist",name:"Talk-at Mailing List",countryCodes:["at"],languageCodes:["de"],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"}]},"at-twitter":{id:"at-twitter",featureId:"austria",type:"twitter",name:"OpenStreetMap Austria Twitter",countryCodes:["at"],languageCodes:["de"],description:"OpenStreetMap Austria On Twitter: {url}",url:"https://twitter.com/osm_at",contacts:[{name:"AT Community",email:"info@openstreetmap.at"}]},"osmgraz-meetup":{id:"osmgraz-meetup",featureId:"graz",type:"meetup",countryCodes:["at"],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"}]},"osmgraz-twitter":{id:"osmgraz-twitter",featureId:"graz",type:"twitter",countryCodes:["at"],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"}]},"osm-at":{id:"osm-at",featureId:"austria",type:"group",countryCodes:["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"}]},byosm:{id:"byosm",type:"telegram",featureId:"belarus",languageCodes:["ru","be","en"],name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat",url:"https://t.me/byosm",contacts:[{name:"Darafei Praliaskouski",email:"me@komzpa.net"}]},"be-facebook":{id:"be-facebook",featureId:"belgium",type:"facebook",name:"OpenStreetMap BE Community",countryCodes:["be"],languageCodes:["en","nl","fr","de"],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",featureId:"belgium",countryCodes:["be"],languageCodes:["en","nl","fr","de"],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"}]},"be-irc":{id:"be-irc",featureId:"belgium",type:"irc",name:"OpenStreetMap Belgium IRC",countryCodes:["be"],languageCodes:["en","nl","fr","de"],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"}]},"be-mailinglist":{id:"be-mailinglist",featureId:"belgium",type:"mailinglist",name:"Talk-be Mailing List",countryCodes:["be"],languageCodes:["en","nl","fr","de"],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"}]},"be-matrix":{id:"be-matrix",featureId:"belgium",type:"matrix",countryCodes:["be"],languageCodes:["en","nl","fr","de"],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"}]},"be-meetup":{id:"be-meetup",featureId:"belgium",type:"meetup",countryCodes:["be"],languageCodes:["en","nl","fr","de"],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"}]},"be-twitter":{id:"be-twitter",featureId:"belgium",type:"twitter",name:"OpenStreetMap Belgium Twitter",countryCodes:["be"],languageCodes:["en","nl","fr","de"],description:"OSM Belgium on Twitter: @osm_be",url:"https://twitter.com/osm_be",contacts:[{name:"BE community",email:"community@osm.be"}]},"hr-facebook":{id:"hr-facebook",featureId:"croatia",type:"facebook",name:"OpenStreetMap Croatia Facebook group",countryCodes:["hr"],languageCodes:["hr"],description:"OpenStreetMap Croatia Facebook group",url:"https://www.facebook.com/groups/541098862671461",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}]},"hr-irc":{id:"hr-irc",featureId:"croatia",type:"irc",name:"OpenStreetMap Croatia on IRC",countryCodes:["hr"],languageCodes:["hr"],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"}]},"hr-mailinglist":{id:"hr-mailinglist",featureId:"croatia",type:"mailinglist",name:"Talk-hr Mailing List",countryCodes:["hr"],languageCodes:["hr"],description:"Talk-hr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-hr",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}]},"czech-community":{id:"czech-community",featureId:"czechia",type:"group",name:"Czech OSM community",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Map portal, website and contacts on OSM members in Czechia",url:"https://openstreetmap.cz/komunita",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"osmcz-facebook":{id:"osmcz-facebook",featureId:"czechia",type:"facebook",name:"OpenStreetMap CZ on Facebook",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Follow czech community on Facebook - including translated WeeklyOSM!",url:"https://www.facebook.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"osmcz-twitter":{id:"osmcz-twitter",featureId:"czechia",type:"twitter",name:"Czech twitter @osmcz",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Follow czech community on Twitter - including translated WeeklyOSM!",url:"https://twitter.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"talk-cz-mailinglist":{id:"talk-cz-mailinglist",featureId:"czechia",type:"mailinglist",name:"Czech mailing list (talk-cz)",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Talk-cz is the official mailing list for Czech community",url:"https://openstreetmap.cz/talkcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"dk-forum":{id:"dk-forum",type:"forum",featureId:"denmark",countryCodes:["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"}]},"dk-irc":{id:"dk-irc",featureId:"denmark",type:"irc",name:"OpenStreetMap Denmark IRC",countryCodes:["dk"],languageCodes:["da"],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"}]},"dk-mailinglist":{id:"dk-mailinglist",featureId:"denmark",type:"mailinglist",name:"Talk-dk Mailing List",countryCodes:["dk"],languageCodes:["da"],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"}]},"ym-Queen-Mary-University-of-London":{type:"youthmappers",name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",id:"ym-Queen-Mary-University-of-London",featureId:"Queen-Mary-University-of-London",contacts:[{name:"Organizer",email:"youthmappers@qmul.ac.uk"}],extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society.",countryCodes:["uk"],url:"https://www.facebook.com/groups/qmulgeographysociety/"},"fi-forum":{id:"fi-forum",featureId:"finland",type:"forum",countryCodes:["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"}]},"fi-irc":{id:"fi-irc",featureId:"finland",type:"irc",name:"OpenStreetMap Finland IRC",countryCodes:["fi"],languageCodes:["fi"],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"}]},"fi-mailinglist":{id:"fi-mailinglist",featureId:"finland",type:"mailinglist",name:"Talk-fi Mailing List",countryCodes:["fi"],languageCodes:["fi"],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"}]},"fr-facebook":{id:"fr-facebook",featureId:"france",type:"facebook",name:"OpenStreetMap France Facebook page",countryCodes:["fr"],languageCodes:["fr"],description:"OpenStreetMap France Facebook page",url:"https://www.facebook.com/osmfr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"fr-forum":{id:"fr-forum",type:"forum",featureId:"france",countryCodes:["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"}]},"fr-irc":{id:"fr-irc",featureId:"france",type:"irc",name:"OpenStreetMap France on IRC",countryCodes:["fr"],languageCodes:["fr"],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"}]},"fr-mailinglist":{id:"fr-mailinglist",featureId:"france",type:"mailinglist",name:"Talk-fr Mailing List",countryCodes:["fr"],languageCodes:["fr"],description:"Talk-fr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"fr-twitter":{id:"fr-twitter",featureId:"france",type:"twitter",name:"OpenStreetMap France on Twitter",countryCodes:["fr"],languageCodes:["fr"],description:"OpenStreetMap France on Twitter: {url}",url:"https://twitter.com/osm_fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"de-berlin-mailinglist":{id:"de-berlin-mailinglist",featureId:"de-berlin-brandenburg",type:"mailinglist",name:"Berlin Mailing List",countryCodes:["de"],languageCodes:["de"],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"}]},"de-berlin-meetup":{id:"de-berlin-meetup",featureId:"de-berlin-brandenburg",type:"meetup",name:"OpenStreetMap Berlin-Brandenburg Meetup",countryCodes:["de"],languageCodes:["de"],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"}]},"de-berlin-telegram":{id:"de-berlin-telegram",featureId:"de-berlin-brandenburg",type:"telegram",name:"@osmberlin on Telegram",countryCodes:["de"],languageCodes:["de"],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",featureId:"de-berlin-brandenburg",type:"twitter",name:"OpenStreetMap Berlin Twitter",countryCodes:["de"],languageCodes:["de"],description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmberlin",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-forum":{id:"de-forum",featureId:"germany",type:"forum",countryCodes:["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"}]},"de-irc":{id:"de-irc",featureId:"germany",type:"irc",name:"OpenStreetMap Germany IRC",countryCodes:["de"],languageCodes:["de"],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"}]},"de-mailinglist":{id:"de-mailinglist",featureId:"germany",type:"mailinglist",name:"Talk-de Mailing List",countryCodes:["de"],languageCodes:["de"],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"}]},"de-ostwestfalen-lippe-mailinglist":{id:"de-ostwestfalen-lippe-mailinglist",featureId:"de-ostwestfalen-lippe",type:"mailinglist",name:"OWL Mailing List",countryCodes:["de"],languageCodes:["de"],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"}]},"de-telegram":{id:"de-telegram",featureId:"germany",type:"telegram",name:"OpenStreetMap Germany Telegram",countryCodes:["de"],languageCodes:["de"],description:"Join the OpenStreetMap Germany Telegram supergroup at {url}",url:"https://t.me/OSM_de",contacts:[{name:"Max N",email:"abonnements@revolwear.com"}]},"osm-de":{id:"osm-de",featureId:"germany",type:"group",countryCodes:["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"}]},"ym-Heidelberg-University":{type:"youthmappers",name:"disastermappers heidelberg",description:"YouthMappers chapter at Heidelberg University",id:"ym-Heidelberg-University",featureId:"Heidelberg-University",contacts:[{name:"Organizer",email:"disastermappers@posteo.de"}],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.",countryCodes:["de"],url:"https://disastermappers.wordpress.com/"},"hu-facebook":{id:"hu-facebook",featureId:"hungary",type:"facebook",name:"OpenStreetMap HU on Facebook",countryCodes:["hu"],languageCodes:["hu"],description:"Mappers and OpenStreetMap Facebook in Hungary",url:"https://www.facebook.com/groups/osm.hu/",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}]},"hu-forum":{id:"hu-forum",featureId:"hungary",type:"forum",countryCodes:["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"}]},"hu-meetup":{id:"hu-meetup",featureId:"hungary",type:"meetup",countryCodes:["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"}]},"is-facebook":{id:"is-facebook",type:"facebook",featureId:"iceland",countryCodes:["is"],languageCodes:["is","en"],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"}]},"is-mailinglist":{id:"is-mailinglist",type:"mailinglist",featureId:"iceland",countryCodes:["is"],languageCodes:["is","en"],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"}]},"is-twitter":{id:"is-twitter",type:"twitter",featureId:"iceland",countryCodes:["is"],languageCodes:["is","en"],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-facebook":{id:"it-facebook",featureId:"italy",type:"facebook",name:"OpenStreetMap Italy Facebook",countryCodes:["it"],languageCodes:["it"],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"}]},"it-irc":{id:"it-irc",featureId:"italy",type:"irc",name:"OpenStreetMap Italy IRC",countryCodes:["it"],languageCodes:["it"],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"}]},"it-mailinglist":{id:"it-mailinglist",featureId:"italy",type:"mailinglist",name:"Talk-it Mailing List",countryCodes:["it"],languageCodes:["it"],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"}]},"it-telegram":{id:"it-telegram",type:"telegram",featureId:"italy",countryCodes:["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"}]},"it-twitter":{id:"it-twitter",featureId:"italy",type:"twitter",name:"OpenStreetMap Italy Twitter",countryCodes:["it"],languageCodes:["it"],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"}]},"OSM-Rome-meetup":{id:"OSM-Rome-meetup",featureId:"IT_Roma_Capitale",type:"group",name:"Incontro Mappatori Romani",countryCodes:["it"],languageCodes:["it"],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"}]},"South-Tyrol-Mailing-List":{id:"South-Tyrol-Mailing-List",featureId:"south_tyrol",type:"mailinglist",countryCodes:["it"],languageCodes:["de","it","lld","en"],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"}]},"talk-it-lazio":{id:"talk-it-lazio",featureId:"IT_Lazio",type:"mailinglist",countryCodes:["it"],languageCodes:["it"],name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area.",signupUrl:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",url:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",contacts:[{name:"Martin Koppenhoefer",email:"dieterdreist@gmail.com"}]},"Trentino-Mailing-List":{id:"Trentino-Mailing-List",featureId:"trentino",type:"mailinglist",countryCodes:["it"],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"}]},"ym-Politecnico-di-Milano":{type:"youthmappers",name:"PoliMappers",description:"YouthMappers chapter at Politecnico di Milano",id:"ym-Politecnico-di-Milano",featureId:"Politecnico-di-Milano",contacts:[{name:"Organizer",email:"polimappers@gmail.com"}],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.",countryCodes:["it"],url:"https://polimappers.github.io/"},"ym-Yarmouk-University":{type:"youthmappers",name:"YouthMappers at YU",description:"YouthMappers chapter at Yarmouk University",id:"ym-Yarmouk-University",featureId:"Yarmouk-University",contacts:[{name:"Organizer",email:"rnjawarneh@yu.edu.jo"}],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.",countryCodes:["jo"],url:"mailto:rnjawarneh@yu.edu.jo"},"kosovo-telegram":{id:"kosovo-telegram",type:"telegram",featureId:"kosovo",countryCodes:["xk"],languageCodes:["sq","sr","en"],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"}]},"lu-mailinglist":{id:"lu-mailinglist",featureId:"luxembourg_full",type:"mailinglist",name:"Talk-lu Mailing List",countryCodes:["lu"],languageCodes:["lb","en","de","fr"],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"}]},"ym-Universit-Mohammed-V-Rabat":{type:"youthmappers",name:"Brahmapoutre at Rabat",description:"YouthMappers chapter at Université Mohammed V Rabat",id:"ym-Universit-Mohammed-V-Rabat",featureId:"Universit-Mohammed-V-Rabat",contacts:[{name:"Organizer",email:"khmichasma@gmail.com"}],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",countryCodes:["ma"],url:"mailto:khmichasma@gmail.com"},"no-forum":{id:"no-forum",type:"forum",featureId:"norway",countryCodes:["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"}]},"no-irc":{id:"no-irc",featureId:"norway",type:"irc",name:"OpenStreetMap Norway on IRC",countryCodes:["no"],languageCodes:["no"],description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],url:"https://webchat.oftc.net/?channels=osm-no"},"no-mailinglist":{id:"no-mailinglist",featureId:"norway",type:"mailinglist",name:"OpenStreetMap Norway mailing list",countryCodes:["no"],languageCodes:["no"],description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],url:"https://lists.nuug.no/mailman/listinfo/kart"},"no-telegram":{id:"no-telegram",type:"telegram",featureId:"norway",countryCodes:["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-PL-facebook-group":{id:"OSM-PL-facebook-group",type:"facebook",featureId:"poland",countryCodes:["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"}]},"OSM-PL-forum":{id:"OSM-PL-forum",type:"forum",featureId:"poland",countryCodes:["pl"],languageCodes:["pl","en"],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"}]},"pt-mailinglist":{id:"pt-mailinglist",featureId:"portugal_full",type:"mailinglist",name:"Talk-pt Mailing List",countryCodes:["pt"],languageCodes:["pt"],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"}]},"pt-telegram":{id:"pt-telegram",featureId:"portugal_full",type:"telegram",name:"OpenStreetMap Portugal no Telegram",countryCodes:["pt"],languageCodes:["pt"],description:"Telegram Group of the Portuguese OpenStreetMap community {url}",url:"https://t.me/OSMPortugal",contacts:[{name:"Nuno Caldeira",email:"hello@iamnunocaldeira.com"}]},"si-forum":{id:"si-forum",type:"forum",featureId:"slovenia",countryCodes:["si"],languageCodes:["sl","en"],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"}]},"si-mailinglist":{id:"si-mailinglist",type:"mailinglist",featureId:"slovenia",countryCodes:["si"],languageCodes:["sl","en"],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"}]},"si-twitter":{id:"si-twitter",featureId:"slovenia",type:"twitter",name:"OpenStreetMap Slovenia Twitter",countryCodes:["si"],languageCodes:["sl","en"],description:"Follow OpenStreetMap Slovenia On Twitter: {url}",url:"https://twitter.com/OpenStreetMapSi",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}]},"OSM-ES-mailinglist":{id:"OSM-ES-mailinglist",type:"mailinglist",featureId:"spain",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"}]},"OSM-ES-telegram":{id:"OSM-ES-telegram",type:"telegram",featureId:"spain",languageCodes:["es"],name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat",url:"https://t.me/OSMes",contacts:[{name:"Jorge Sanz",email:"sanchi2@gmail.com"}]},"ym-Universidad-Autonoma-de-Madrid":{type:"youthmappers",name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid",id:"ym-Universidad-Autonoma-de-Madrid",featureId:"Universidad-Autonoma-de-Madrid",contacts:[{name:"Organizer",email:"youthmappersatuam@gmail.com"}],countryCodes:["es"],url:"mailto:youthmappersatuam@gmail.com"},"ym-Universidad-Politcnica-de-Madrid":{type:"youthmappers",name:"Mapeo Humanitario",description:"YouthMappers chapter at Universidad Politécnica de Madrid",id:"ym-Universidad-Politcnica-de-Madrid",featureId:"Universidad-Politcnica-de-Madrid",contacts:[{name:"Organizer",email:"lab.topografia@gmail.com"}],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)",countryCodes:["es"],url:"https://blogs.upm.es/mapeo-humanitario/"},"osm-se":{id:"osm-se",featureId:"sweden",type:"group",countryCodes:["se"],languageCodes:["sv"],name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden",url:"http://openstreetmap.se/",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-facebook":{id:"se-facebook",featureId:"sweden",type:"facebook",name:"OpenStreetMap Sweden Facebook",countryCodes:["se"],languageCodes:["sv"],description:"OpenStreetMap Sweden on Facebook",url:"https://www.facebook.com/groups/osmsweden/",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-forum":{id:"se-forum",type:"forum",featureId:"sweden",countryCodes:["se"],languageCodes:["sv"],name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=4",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-irc":{id:"se-irc",featureId:"sweden",type:"irc",name:"OpenStreetMap Sweden IRC",countryCodes:["se"],languageCodes:["sv"],description:"Join #osm.se on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm.se",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-mailinglist":{id:"se-mailinglist",featureId:"sweden",type:"mailinglist",name:"Talk-se Mailing List",countryCodes:["se"],languageCodes:["sv"],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"}]},"se-twitter":{id:"se-twitter",featureId:"sweden",type:"twitter",name:"OpenStreetMap Sweden on Twitter",countryCodes:["se"],languageCodes:["sv"],description:"Follow us on Twitter: {url}",url:"https://twitter.com/openstreetmapse",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"ym-Istanbul-Technical-University":{type:"youthmappers",name:"YouthMappers ITU",description:"YouthMappers chapter at Istanbul Technical University",id:"ym-Istanbul-Technical-University",featureId:"Istanbul-Technical-University",contacts:[{name:"Organizer",email:"youthmappersitu@gmail.com"}],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.",countryCodes:["tr"],url:"https://www.facebook.com/YouthMappers-ITU-226489641442744/?modal=admin_todo_tour"},"Nottingham-OSM-pub-meetup":{id:"Nottingham-OSM-pub-meetup",featureId:"east_midlands_uk",type:"group",name:"East Midlands (Nottingham) Monthly pub meet-up",countryCodes:["gb"],languageCodes:["en"],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"}]},"gb-mailinglist":{id:"gb-mailinglist",featureId:"united_kingdom",type:"mailinglist",name:"Talk-gb Mailing List",countryCodes:["gb"],languageCodes:["en","cy"],description:"Talk-gb is the main communication forum list for the British (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"}]},"mappa-mercia-group":{id:"mappa-mercia-group",featureId:"england-west-midlands",type:"group",countryCodes:["gb"],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"}]},"gb-irc":{id:"gb-irc",featureId:"united_kingdom",type:"irc",name:"OpenStreetMap United Kingdom IRC",countryCodes:["gb"],languageCodes:["en","cy"],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"}]},"ym-University-of-Exeter":{type:"youthmappers",name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at University of Exeter",id:"ym-University-of-Exeter",featureId:"University-of-Exeter",contacts:[{name:"Organizer",email:"uniofexemissingmaps@gmail.com"}],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.",countryCodes:["uk"],url:"https://www.facebook.com/EUMissingMaps/"},"ym-University-of-Warwick":{type:"youthmappers",name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at University of Warwick",id:"ym-University-of-Warwick",featureId:"University-of-Warwick",contacts:[{name:"Organizer",email:"p.ulbrich@warwick.ac.uk"}],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.",countryCodes:["uk"],url:"mailto:p.ulbrich@warwick.ac.uk"},"ym-Sacred-Heart-Junior-College":{type:"youthmappers",name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College",id:"ym-Sacred-Heart-Junior-College",featureId:"Sacred-Heart-Junior-College",contacts:[{name:"Organizer",email:"jtzib18@gmail.com"}],countryCodes:["bz"],url:"mailto:jtzib18@gmail.com"},"OSM-CA-Slack":{id:"OSM-CA-Slack",featureId:"canada_full",type:"slack",countryCodes:["ca"],languageCodes:["en","fr"],name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}.",signupUrl:"https://slackinviteosmcanada.herokuapp.com/",url:"https://osm-ca.slack.com/",contacts:[{name:"Denis Carriere",email:"carriere.denis@gmail.com"}]},"OSM-Vancouver-meetup":{id:"OSM-Vancouver-meetup",featureId:"vancouver_metro",type:"meetup",name:"OpenStreetMap Vancouver",countryCodes:["ca"],languageCodes:["en"],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"}],events:[{name:"April Metrotown Mappy Hour",description:"Mappy Hour is the time and place for discussion of OpenStreetMap, from surveying data to consuming data. Beginners welcome. Bring your questions.",when:"2018-04-27 18:30",where:"Firefighters' Public House, 6515 Bonsor Avenue, Burnaby, BC",url:"https://www.meetup.com/OpenStreetMap-Vancouver/events/qzsbsmyxgbkc/"}]},"ym-Universidad-de-Costa-Rica":{type:"youthmappers",name:"YouthMappers de Universidad de Costa Rica",description:"YouthMappers chapter at Universidad de Costa Rica",id:"ym-Universidad-de-Costa-Rica",featureId:"Universidad-de-Costa-Rica",contacts:[{name:"Organizer",email:"youthmappersucr@gmail.com"}],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.",countryCodes:["cr"],url:"https://www.facebook.com/ucr.asege/"},"OSM-CU-telegram":{id:"OSM-CU-telegram",type:"telegram",featureId:"cuba",countryCodes:["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"}]},"ym-Universidad-Nacional-Autnoma-de-Honduras":{type:"youthmappers",name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras",id:"ym-Universidad-Nacional-Autnoma-de-Honduras",featureId:"Universidad-Nacional-Autnoma-de-Honduras",contacts:[{name:"Organizer",email:"pumagishn@gmail.com"}],countryCodes:["hn"],url:"mailto:pumagishn@gmail.com"},"ym-University-of-the-West-Indies-Mona-Campus":{type:"youthmappers",name:"Libraries Outreach - ODL",description:"YouthMappers chapter at University of the West Indies, Mona Campus",id:"ym-University-of-the-West-Indies-Mona-Campus",featureId:"University-of-the-West-Indies-Mona-Campus",contacts:[{name:"Organizer",email:"benjamin.branch@uwimona.edu.jm"}],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.",countryCodes:["jm"],url:"mailto:benjamin.branch@uwimona.edu.jm"},"ni-facebook":{id:"ni-facebook",featureId:"nicaragua",type:"facebook",name:"OpenStreetMap NI Community",countryCodes:["ni"],languageCodes:["es"],description:"Mappers and OpenStreetMap on Facebook in Nicaragua",url:"https://www.facebook.com/mapanica/",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"ni-mailinglist":{id:"ni-mailinglist",featureId:"nicaragua",type:"mailinglist",name:"Talk-ni Mailing List",countryCodes:["ni"],languageCodes:["es"],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"}]},"ni-telegram":{id:"ni-telegram",type:"telegram",featureId:"nicaragua",countryCodes:["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",featureId:"nicaragua",type:"twitter",name:"OpenStreetMap Nicaragua Twitter",countryCodes:["ni"],languageCodes:["es"],description:"OSM Nicaragua on Twitter: @osm_ni",url:"https://twitter.com/osm_ni",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"osm-ni":{id:"osm-ni",featureId:"nicaragua",type:"group",countryCodes:["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"}]},"ym-Universidad-Nacional-de-Ingenieria":{type:"youthmappers",name:"Yeka Street MGA",description:"YouthMappers chapter at Universidad Nacional de Ingenieria",id:"ym-Universidad-Nacional-de-Ingenieria",featureId:"Universidad-Nacional-de-Ingenieria",contacts:[{name:"Organizer",email:"yeka.street.mga@gmail.com"}],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.",countryCodes:["ni"],url:"https://www.facebook.com/yekastreetmga/"},"ym-University-of-Panama":{type:"youthmappers",name:"YouthMappers UP",description:"YouthMappers chapter at University of Panama",id:"ym-University-of-Panama",featureId:"University-of-Panama",contacts:[{name:"Organizer",email:"youthmappers.up@gmail.com"}],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.",countryCodes:["pa"],url:"mailto:Youthmappers.up@gmail.com"},"ym-Universidad-de-Puerto-Rico-Rio-Piedras":{type:"youthmappers",name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras",id:"ym-Universidad-de-Puerto-Rico-Rio-Piedras",featureId:"Universidad-de-Puerto-Rico-Rio-Piedras",contacts:[{name:"Organizer",email:"carlosguilbe@gmail.com"}],countryCodes:["pa"],url:"mailto:carlosguilbe@gmail.com"},"Bay-Area-OpenStreetMappers":{id:"Bay-Area-OpenStreetMappers",featureId:"sf_bay_area",type:"meetup",name:"Bay Area OpenStreetMappers",countryCodes:["us"],languageCodes:["en"],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"}]},"Central-Pennsylvania-OSM":{id:"Central-Pennsylvania-OSM",featureId:"central_pa",type:"facebook",name:"Central Pennsylvania OSM",countryCodes:["us"],languageCodes:["en"],description:"Online mapping community based out of State College, PA",url:"https://www.facebook.com/CentralPennsylvaniaOSM",contacts:[{name:"Sterling Quinn",email:"sdq107@psu.edu"}]},"Code-for-San-Jose-Slack":{id:"Code-for-San-Jose-Slack",featureId:"south_sf_bay_area",type:"slack",countryCodes:["us"],languageCodes:["en"],name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel.",signupUrl:"https://slackin-c4sj.herokuapp.com/",url:"https://codeforsanjose.slack.com/",contacts:[{name:"OSM Bay Area mailing list",email:"talk-us-sfbay@openstreetmap.org"}]},"Dallas-Fort-Worth-OSM":{id:"Dallas-Fort-Worth-OSM",featureId:"dfw_metro",type:"group",name:"Dallas-Fort Worth OSM",countryCodes:["us"],languageCodes:["en"],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"}]},GeoPhilly:{id:"GeoPhilly",featureId:"philly_metro",type:"meetup",name:"GeoPhilly",countryCodes:["us"],languageCodes:["en"],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"}]},MapMinnesota:{id:"MapMinnesota",featureId:"minneapolis_st_paul_metro",type:"meetup",name:"MapMinnesota",countryCodes:["us"],languageCodes:["en"],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"}]},"Mapping-DC-meetup":{id:"Mapping-DC-meetup",featureId:"dc_metro",type:"meetup",name:"Mapping DC",countryCodes:["us"],languageCodes:["en"],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"}],events:[{name:"April Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-04-10 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxgbnb/"},{name:"June Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-06-12 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxjbqb/"},{name:"August Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-08-14 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxlbsb/"},{name:"October Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-10-09 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxnbmb/"}]},"Maptime-ME-meetup":{id:"Maptime-ME-meetup",featureId:"portland_me",type:"meetup",name:"MaptimeME",countryCodes:["us"],languageCodes:["en"],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"}]},"MaptimeHRVA-twitter":{id:"MaptimeHRVA-twitter",featureId:"hrva",type:"twitter",name:"MaptimeHRVA Twitter",countryCodes:["us"],languageCodes:["en"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/maptimehrva",contacts:[{name:"Jonah Adkins",email:"jonahadkins@gmail.com"}]},"us-ma-mailinglist":{id:"us-ma-mailinglist",featureId:"massachusetts",type:"mailinglist",name:"Talk-us-massachusetts Mailing List",countryCodes:["us"],languageCodes:["en"],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"}]},"OpenCleveland-meetup":{id:"OpenCleveland-meetup",featureId:"cleveland",type:"meetup",name:"Open Cleveland",countryCodes:["us"],languageCodes:["en"],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"}],events:[{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-04-18 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxgbxb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-04-25 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxgbhc/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-02 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbdb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-09 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbmb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-16 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbvb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-23 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbfc/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-30 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbnc/"}]},"OSM-Boston":{id:"OSM-Boston",featureId:"boston_metro",type:"meetup",name:"OpenStreetMap Boston",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-Central-Salish-Sea":{id:"OSM-Central-Salish-Sea",featureId:"mt_vernon_wa",type:"meetup",name:"OpenStreetMap Central Salish Sea",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-Chattanooga":{id:"OSM-Chattanooga",featureId:"chattanooga",type:"facebook",name:"OSM Chattanooga",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-Colorado":{id:"OSM-Colorado",featureId:"colorado",type:"meetup",name:"OpenStreetMap Colorado",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-NYC":{id:"OSM-NYC",featureId:"nyc_metro",type:"meetup",name:"OpenStreetMap NYC",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area",url:"https://www.meetup.com/osm-nyc/",contacts:[{name:"Jeff Ferzoco",email:"jferzoco@carto.com"}]},"OSM-Portland-forum":{id:"OSM-Portland-forum",featureId:"portland_or",type:"forum",name:"OpenStreetMap PDX Google Group",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-Portland":{id:"OSM-Portland",featureId:"portland_or",type:"meetup",name:"OpenStreetMap Portland",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-Seattle":{id:"OSM-Seattle",featureId:"seattle",type:"meetup",name:"OpenStreetMap Seattle",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-SoCal":{id:"OSM-SoCal",featureId:"la_metro",type:"meetup",name:"OpenStreetMap Southern California",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-South-Bay":{id:"OSM-South-Bay",featureId:"south_sf_bay_area",type:"meetup",name:"OSM South Bay",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-Tampa-Bay":{id:"OSM-Tampa-Bay",featureId:"tampa_bay",type:"meetup",name:"OpenStreetMap Tampa Bay",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-US-Slack":{id:"OSM-US-Slack",featureId:"usa_full",type:"slack",countryCodes:["us"],languageCodes:["en"],name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}",signupUrl:"https://slack.openstreetmap.us/",url:"https://osmus.slack.com",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Clifford Snow",email:"clifford@snowandsnow.us"}]},"OSM-US":{id:"OSM-US",featureId:"usa_full",type:"group",countryCodes:["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}",signupUrl:"https://www.openstreetmap.us/join",url:"https://www.openstreetmap.us/",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Bryan Housel",email:"bryan@openstreetmap.us"}],events:[{id:"sotmus2019-cfs",i18n:true,name:"Propose a Talk for SotM-US 2019",description:"We are calling on all members of the OpenStreetMap community to share your ideas and session proposals for State of the Map US 2019. Whether you are brand new to OSM or have been a core contributor since the beginning, we want to hear from you!",where:"Minneapolis, Minnesota",when:"2019-jun-01",url:"https://sessionize.com/sotmus2019"},{id:"sotmus2019",i18n:true,name:"State of the Map US 2019",description:"Join the OpenStreetMap community at State of the Map US in Minneapolis, Minnesota. Connect with other mappers, businesses, government agencies, and non profits, all collaborating around the free and editable map of the world.",where:"Minneapolis, Minnesota",when:"2019-sep-05",url:"https://2019.stateofthemap.us/"}]},"OSM-Utah":{id:"OSM-Utah",featureId:"salt_lake_city",type:"meetup",name:"OpenStreetMap Utah",countryCodes:["us"],languageCodes:["en"],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"}]},"OSM-Wyoming":{id:"OSM-Wyoming",featureId:"wyoming",type:"meetup",name:"OpenStreetMap Wyoming",countryCodes:["us"],languageCodes:["en"],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"}]},"PHXGeo-meetup":{id:"PHXGeo-meetup",featureId:"phoenix",type:"meetup",name:"PHXGeo Meetup",countryCodes:["us"],languageCodes:["en"],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"}]},"PHXGeo-twitter":{id:"PHXGeo-twitter",featureId:"phoenix",type:"twitter",name:"PHXGeo Twitter",countryCodes:["us"],languageCodes:["en"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/phxgeo",contacts:[{name:"Ryan Arp",email:"ryan@arpconsultinggroup.com"}]},"Western-Slope-facebook":{id:"Western-Slope-facebook",featureId:"grand_junction_co",type:"facebook",name:"Western Slope OSM Facebook",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users around Grand Junction, CO",url:"https://www.facebook.com/wsosm/",contacts:[{name:"Aaron Young",email:"aaron@kaartgroup.com"}]},"Western-Slope-meetup":{id:"Western-Slope-meetup",featureId:"grand_junction_co",type:"meetup",name:"Western Slope OSM Meetup",countryCodes:["us"],languageCodes:["en"],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"}]},"ym-Ball-State-University":{type:"youthmappers",name:"Gamma Theta Upsilon- Iota Omega Chapter",description:"YouthMappers chapter at Ball State University",id:"ym-Ball-State-University",featureId:"Ball-State-University",contacts:[{name:"Organizer",email:"gtu@bsu.edu"}],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.",countryCodes:["us"],url:"https://www.facebook.com/BallState.GammaThetaUpsilon/"},"ym-California-University-of-Pennsylvania":{type:"youthmappers",name:"CalU PA GIS Club",description:"YouthMappers chapter at California University of Pennsylvania",id:"ym-California-University-of-Pennsylvania",featureId:"California-University-of-Pennsylvania",contacts:[{name:"Organizer",email:"mueller@calu.edu"}],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.",countryCodes:["us"],url:"https://www.facebook.com/CalUGisClub/"},"ym-Central-Washington-University":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at Central Washington University",id:"ym-Central-Washington-University",featureId:"Central-Washington-University",contacts:[{name:"Organizer",email:"valkoc@cwu.edu"}],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.",countryCodes:["us"],url:"https://www.cwu.edu/geography/geography-club"},"ym-Clemson-University":{type:"youthmappers",name:"Clemson Mappers",description:"YouthMappers chapter at Clemson University",id:"ym-Clemson-University",featureId:"Clemson-University",contacts:[{name:"Organizer",email:"clemsonmappers@gmail.com"}],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.",countryCodes:["us"],url:"http://www.clemsongis.org/#!clemson-mappers/i9w6t"},"ym-College-of-William-and-Mary":{type:"youthmappers",name:"All over the map!",description:"YouthMappers chapter at College of William and Mary",id:"ym-College-of-William-and-Mary",featureId:"College-of-William-and-Mary",contacts:[{name:"Organizer",email:"lnseitz@email.wm.edu"}],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.",countryCodes:["us"],url:"mailto:lnseitz@email.wm.edu"},"ym-Cornell-University":{type:"youthmappers",name:"Mapping Society",description:"YouthMappers chapter at Cornell University",id:"ym-Cornell-University",featureId:"Cornell-University",contacts:[{name:"Organizer",email:"mappingsocietycornell@gmail.com"}],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.",countryCodes:["us"],url:"mailto:mappingsocietycornell@gmail.com?subject=Youth%20Mappers%20and%20Mapping%20Society%20at%20Cornell%20University"},"ym-George-Mason-University":{type:"youthmappers",name:"Mason Mappers",description:"YouthMappers chapter at George Mason University",id:"ym-George-Mason-University",featureId:"George-Mason-University",contacts:[{name:"Organizer",email:"masonmappers@gmail.com"}],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.",countryCodes:["us"],url:"Facebook.com/MasonMappers"},"ym-Indiana-University-of-Pennsylvania":{type:"youthmappers",name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania",id:"ym-Indiana-University-of-Pennsylvania",featureId:"Indiana-University-of-Pennsylvania",contacts:[{name:"Organizer",email:"rhoch@iup.edu"}],countryCodes:["us"],url:"mailto:rhoch@iup.edu"},"ym-Jacksonville-State-University":{type:"youthmappers",name:"JSU Disaster Mapping Team",description:"YouthMappers chapter at Jacksonville State University",id:"ym-Jacksonville-State-University",featureId:"Jacksonville-State-University",contacts:[{name:"Organizer",email:"ltatum@stu.jsu.edu"}],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",countryCodes:["us"],url:"mailto:ltatum@stu.jsu.edu"},"ym-Kansas-State-University":{type:"youthmappers",name:"Gamma Theta Upsilon: Beta Psi Chapter",description:"YouthMappers chapter at Kansas State University",id:"ym-Kansas-State-University",featureId:"Kansas-State-University",contacts:[{name:"Organizer",email:"tblarsen@ksu.edu"}],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.",countryCodes:["us"],url:"https://www.facebook.com/kstate.gtu?fref=ts"},"ym-McGill-University":{type:"youthmappers",name:"Open Mapping Group McGill: A Member of the McGill Undergraduate Geography Society",description:"YouthMappers chapter at McGill University",id:"ym-McGill-University",featureId:"McGill-University",contacts:[{name:"Organizer",email:"omg.mcgill@gmail.com"}],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.",countryCodes:["ca"],url:"mailto:omg.mcgill@gmail.com"},"ym-Miami-University":{type:"youthmappers",name:"Geography and Planning Society",description:"YouthMappers chapter at Miami University",id:"ym-Miami-University",featureId:"Miami-University",contacts:[{name:"Organizer",email:"gpsmiamioh@gmail.com"}],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.",countryCodes:["us"],url:"mailto:GPSMiamiOH@gmail.com"},"ym-Monroe-Community-College":{type:"youthmappers",name:"MCC Mapping Corps",description:"YouthMappers chapter at Monroe Community College",id:"ym-Monroe-Community-College",featureId:"Monroe-Community-College",contacts:[{name:"Organizer",email:"gist@monroecc.edu"}],countryCodes:["us"],url:"mailto:GIST@monroecc.edu"},"ym-Montgomery-College":{type:"youthmappers",name:"GeoMC",description:"YouthMappers chapter at Montgomery College",id:"ym-Montgomery-College",featureId:"Montgomery-College",contacts:[{name:"Organizer",email:"stephanie.calderon@montgomerycollege.edu"}],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.",countryCodes:["us"],url:"mailto:stephanie.calderon@montgomerycollege.edu"},"ym-New-York-University":{type:"youthmappers",name:"NYU mHealth Initiative Mapping Corps",description:"YouthMappers chapter at New York University",id:"ym-New-York-University",featureId:"New-York-University",contacts:[{name:"Organizer",email:"mhealth@nyu.edu"}],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.",countryCodes:["us"],url:"http://www.nyumhealth.org/"},"ym-Ohio-Wesleyan-University":{type:"youthmappers",name:"Environment and Wildlife Club",description:"YouthMappers chapter at Ohio Wesleyan University",id:"ym-Ohio-Wesleyan-University",featureId:"Ohio-Wesleyan-University",contacts:[{name:"Organizer",email:"envirowild@owu.edu"}],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.",countryCodes:["us"],url:"mailto:envirowild@owu.edu"},"ym-Oklahoma-State-University":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at Oklahoma State University",id:"ym-Oklahoma-State-University",featureId:"Oklahoma-State-University",contacts:[{name:"Organizer",email:"hhayden@okstate.edu"}],countryCodes:["us"],url:"mailto:hhayden@okstate.edu"},"ym-State-University-of-New-York-Geneseo":{type:"youthmappers",name:"SUNY Geneseo GIS Association",description:"YouthMappers chapter at State University of New York Geneseo",id:"ym-State-University-of-New-York-Geneseo",featureId:"State-University-of-New-York-Geneseo",contacts:[{name:"Organizer",email:"bb18@geneseo.edu"}],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.",countryCodes:["us"],url:"http://www.facebook.com/GeneseoGIS"},"ym-SUNY-at-Fredonia":{type:"youthmappers",name:"Geoventurers",description:"YouthMappers chapter at SUNY at Fredonia",id:"ym-SUNY-at-Fredonia",featureId:"SUNY-at-Fredonia",contacts:[{name:"Organizer",email:"amw30@geneseo.edu"}],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.",countryCodes:["us"],url:"mailto:amw30@geneseo.edu?subject=GeoVenturers%20and%20the%20YouthMappers%20network"},"ym-Texas-Tech-University":{type:"youthmappers",name:"YouthMappers at TTU",description:"YouthMappers chapter at Texas Tech University",id:"ym-Texas-Tech-University",featureId:"Texas-Tech-University",contacts:[{name:"Organizer",email:"emily.glaeser@ttu.edu"}],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.",countryCodes:["us"],url:"https://www.facebook.com/youthmapperstexastech/"},"ym-The-Citadel":{type:"youthmappers",name:"YouthMappers at The Citadel",description:"YouthMappers chapter at The Citadel",id:"ym-The-Citadel",featureId:"The-Citadel",contacts:[{name:"Organizer",email:"cstokes5@citadel.edu"}],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.",countryCodes:["us"],url:"Mailto:cstokes5@citadel.edu"},"ym-The-George-Washington-University":{type:"youthmappers",name:"Humanitarian Mapping Society",description:"YouthMappers chapter at The George Washington University",id:"ym-The-George-Washington-University",featureId:"The-George-Washington-University",contacts:[{name:"Organizer",email:"hms.gwu@gmail.com"}],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.",countryCodes:["us"],url:"https://www.facebook.com/GWHMS/"},"ym-The-Johns-Hopkins-University-SAIS":{type:"youthmappers",name:"SAIS YouthMappers",description:"YouthMappers chapter at The Johns Hopkins University, SAIS",id:"ym-The-Johns-Hopkins-University-SAIS",featureId:"The-Johns-Hopkins-University-SAIS",contacts:[{name:"Organizer",email:"saisyouthmappers@gmail.com"}],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.",countryCodes:["us"],url:"mailto:saisyouthmappers@gmail.com"},"ym-The-Pennsylvania-State-University":{type:"youthmappers",name:"Penn State GIS Coalition",description:"YouthMappers chapter at The Pennsylvania State University",id:"ym-The-Pennsylvania-State-University",featureId:"The-Pennsylvania-State-University",contacts:[{name:"Organizer",email:"advising@geog.psu.edu"}],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.",countryCodes:["us"],url:"mailto:advising@geog.psu.edu"},"ym-University-of-California-Davis":{type:"youthmappers",name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis",id:"ym-University-of-California-Davis",featureId:"University-of-California-Davis",contacts:[{name:"Organizer",email:"ucdmappingclub@ucdavis.edu"}],countryCodes:["us"],url:"mailto:ucdmappingclub@ucdavis.edu?subject=YouthMappers%20and%20UC%20Davis%20Mapping%20Club"},"ym-University-of-Central-Florida":{type:"youthmappers",name:"Geospatial Information Society",description:"YouthMappers chapter at University of Central Florida",id:"ym-University-of-Central-Florida",featureId:"University-of-Central-Florida",contacts:[{name:"Organizer",email:"rsouth@knights.ucf.edu"}],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.",countryCodes:["us"],url:"mailto:rsouth@knights.ucf.edu"},"ym-University-of-Chicago":{type:"youthmappers",name:"Tobler Society",description:"YouthMappers chapter at University of Chicago",id:"ym-University-of-Chicago",featureId:"University-of-Chicago",contacts:[{name:"Organizer",email:"toblersociety@uchicago.edu"}],countryCodes:["us"],url:"mailto:toblersociety@uchicago.edu"},"ym-University-of-Maryland-College-Park":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at University of Maryland - College Park",id:"ym-University-of-Maryland-College-Park",featureId:"University-of-Maryland-College-Park",contacts:[{name:"Organizer",email:"geogclubumd@gmail.com"}],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.",countryCodes:["us"],url:"https://www.facebook.com/UMDGeographyClub/?fref=ts"},"ym-University-of-North-Texas":{type:"youthmappers",name:"UNT Geography Club",description:"YouthMappers chapter at University of North Texas",id:"ym-University-of-North-Texas",featureId:"University-of-North-Texas",contacts:[{name:"Organizer",email:"reeseramsey@my.unt.edu"}],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.",countryCodes:["us"],url:"Mailto:reeseramsey@my.unt.edu"},"ym-University-of-Northern-Colorado":{type:"youthmappers",name:"UNCO Geography and GIS Club",description:"YouthMappers chapter at University of Northern Colorado",id:"ym-University-of-Northern-Colorado",featureId:"University-of-Northern-Colorado",contacts:[{name:"Organizer",email:"uncogeoggisclub@gmail.com"}],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",countryCodes:["us"],url:"www.facebook.com/groups/476365076071166/"},"ym-University-of-Oregon":{type:"youthmappers",name:"Map by Northwest",description:"YouthMappers chapter at University of Oregon",id:"ym-University-of-Oregon",featureId:"University-of-Oregon",contacts:[{name:"Organizer",email:"cbone@uoregon.edu"}],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.",countryCodes:["us"],url:"http://blogs.uoregon.edu/mxnw/"},"ym-University-of-Redlands":{type:"youthmappers",name:"URSpatial Geo-Thinkers",description:"YouthMappers chapter at University of Redlands",id:"ym-University-of-Redlands",featureId:"University-of-Redlands",contacts:[{name:"Organizer",email:"nathan_strout@redlands.edu"}],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.",countryCodes:["us"],url:"mailto:nathan_strout@redlands.edu"},"ym-University-of-South-Carolina":{type:"youthmappers",name:"Geography Graduate Student Association",description:"YouthMappers chapter at University of South Carolina",id:"ym-University-of-South-Carolina",featureId:"University-of-South-Carolina",contacts:[{name:"Organizer",email:"carolina_ggsa@gmail.com"}],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.",countryCodes:["us"],url:"https://carolinaggsa.wordpress.com/"},"ym-University-of-Southern-California":{type:"youthmappers",name:"SC Mappers",description:"YouthMappers chapter at University of Southern California",id:"ym-University-of-Southern-California",featureId:"University-of-Southern-California",contacts:[{name:"Organizer",email:"scmappers@gmail.com"}],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!",countryCodes:["us"],url:"mailto:scmappers@gmail.com?subject=YouthMappers%20at%20USC"},"ym-University-of-Vermont":{type:"youthmappers",name:"University of Vermont Humanitarian Mapping Club",description:"YouthMappers chapter at University of Vermont",id:"ym-University-of-Vermont",featureId:"University-of-Vermont",contacts:[{name:"Organizer",email:"uvm.hmc@gmail.com"}],countryCodes:["us"],url:"https://www.facebook.com/UVMHMC"},"ym-University-of-Victoria":{type:"youthmappers",name:"Society of Geography Students",description:"YouthMappers chapter at University of Victoria",id:"ym-University-of-Victoria",featureId:"University-of-Victoria",contacts:[{name:"Organizer",email:"sogsmappers@gmail.com"}],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/"},"ym-University-of-Wyoming":{type:"youthmappers",name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming",id:"ym-University-of-Wyoming",featureId:"University-of-Wyoming",contacts:[{name:"Organizer",email:"gtu-geography@uwyo.edu"}],countryCodes:["us"],url:"http://www.uwyo.edu/geography/geographyclub/"},"ym-UW-Madison":{type:"youthmappers",name:"BadgerMaps",description:"YouthMappers chapter at UW-Madison",id:"ym-UW-Madison",featureId:"UW-Madison",contacts:[{name:"Organizer",email:"uwbadgermaps@gmail.com"}],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.",countryCodes:["us"],url:"https://www.facebook.com/UW-BadgerMaps-197746270811951/"},"ym-Vassar-College":{type:"youthmappers",name:"Hudson Valley Mappers",description:"YouthMappers chapter at Vassar College",id:"ym-Vassar-College",featureId:"Vassar-College",contacts:[{name:"Organizer",email:"geo@vassar.edu"}],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.",countryCodes:["us"],url:"http://pages.vassar.edu/gis/vassar-youthmappers/"},"ym-Villanova-University":{type:"youthmappers",name:"The Villanova Globeplotters",description:"YouthMappers chapter at Villanova University",id:"ym-Villanova-University",featureId:"Villanova-University",contacts:[{name:"Organizer",email:"villanova.globeplotters@gmail.com"}],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.",countryCodes:["us"],url:"mailto:villanova.globeplotters@gmail.com"},"ym-West-Virginia-University":{type:"youthmappers",name:"Maptime Morgantown",description:"YouthMappers chapter at West Virginia University",id:"ym-West-Virginia-University",featureId:"West-Virginia-University",contacts:[{name:"Organizer",email:"maptimemorgantown@gmail.com"}],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.",countryCodes:["us"],url:"mailto:MaptimeMorgantown@gmail.com?subject=Maptime%20Morgantown%20from%20YouthMappers%20website"},"ym-Western-Michigan-University":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at Western Michigan University",id:"ym-Western-Michigan-University",featureId:"Western-Michigan-University",contacts:[{name:"Organizer",email:"wmu.geog.club@gmail.com"}],countryCodes:["us"],url:"http://www.facebook.com/groups/WMUGeographyClub/"},geogeeks_perth_meetup:{id:"geogeeks_perth_meetup",featureId:"western_australia",type:"group",countryCodes:["au"],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"}]},"talk-au":{id:"talk-au",featureId:"australia_full",type:"mailinglist",countryCodes:["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"}]},"Maptime-Oceania-Slack":{id:"Maptime-Oceania-Slack",featureId:"oceania_full",type:"slack",countryCodes:["au","nz"],languageCodes:["en"],name:"Maptime Oceania Slack",description:"Sign up at {signupUrl}",signupUrl:"https://bit.ly/maptimeau",url:"https://maptimeoceania.slack.com",contacts:[{name:"David Dean",email:"ddean@ieee.org"},{name:"Philip Mallis",email:"philip.mallis@unimelb.edu.au"},{name:"Edoardo Neerhut",email:"ed@mapillary.com"}]},"talk-nz":{id:"talk-nz",featureId:"new_zealand_full",type:"mailinglist",countryCodes:["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"}]},"OSM-AR-facebook":{id:"OSM-AR-facebook",featureId:"argentina",type:"facebook",name:"OpenStreetMap Argentina Facebook",countryCodes:["ar"],languageCodes:["es"],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"}]},"OSM-AR-forum":{id:"OSM-AR-forum",featureId:"argentina",type:"forum",name:"OpenStreetMap Argentina web forum",countryCodes:["ar"],languageCodes:["es"],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"}]},"OSM-AR-irc":{id:"OSM-AR-irc",featureId:"argentina",type:"irc",name:"OpenStreetMap Argentina IRC",countryCodes:["ar"],languageCodes:["es"],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"}]},"OSM-AR-mailinglist":{id:"OSM-AR-mailinglist",featureId:"argentina",type:"mailinglist",name:"Talk-ar Mailing List",countryCodes:["ar"],languageCodes:["es"],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"}]},"OSM-AR-telegram":{id:"OSM-AR-telegram",featureId:"argentina",type:"telegram",name:"OpenStreetMap Argentina Telegram",countryCodes:["ar"],languageCodes:["es"],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",featureId:"argentina",type:"twitter",name:"OpenStreetMap Argentina Twitter",countryCodes:["ar"],languageCodes:["es"],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-BO-mailinglist":{id:"OSM-BO-mailinglist",featureId:"bolivia",type:"mailinglist",name:"Talk-bo Mailing List",countryCodes:["bo"],languageCodes:["es"],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"}]},"Bahia-telegram":{id:"Bahia-telegram",featureId:"bahia",type:"telegram",name:"OpenStreetMap Bahia Telegram Group",countryCodes:["br"],languageCodes:["pt"],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"}]},"DF-telegram":{id:"DF-telegram",featureId:"df_br",type:"telegram",name:"OpenStreetMap Brasília Telegram Group",countryCodes:["br"],languageCodes:["pt"],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"}]},"OSM-br-discord":{id:"OSM-br-discord",featureId:"brazil",type:"discord",name:"OpenStreetMap Brasil Discord",countryCodes:["br"],languageCodes:["pt"],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",featureId:"brazil",type:"mailinglist",name:"Talk-br Mailing List",countryCodes:["br"],languageCodes:["pt"],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"}]},"OSM-br-telegram":{id:"OSM-br-telegram",featureId:"brazil",type:"telegram",name:"OpenStreetMap Brasil Telegram",countryCodes:["br"],languageCodes:["pt"],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"}],events:[{id:"webinar_mundogeo",name:"Webinar: OpenStreetMap em Prefeituras e Empresas",description:"Participe do webinar sobre como utilizar o OpenStreeMap em prefeituras e empresas.",where:"Online",when:"2018-05-02 14:30",url:"http://mundogeo.com/webinar/webinar.html"},{id:"mundogeo",name:"Painel OpenStreetMap no MundoGeo #connect",description:"Participe do painel sobre o OpenStreetMap no MundoGeo #connect.",where:"São Paulo, SP, Brasil",when:"2018-05-16 11:00",url:"http://mundogeoconnect.com/2018/atividades-especiais/"}]},"OSM-br-twitter":{id:"OSM-br-twitter",featureId:"brazil",type:"twitter",name:"OpenStreetMap Brasil Twitter",countryCodes:["br"],languageCodes:["pt"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapBR",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"RS-telegram":{id:"RS-telegram",featureId:"rs_br",type:"telegram",name:"OpenStreetMap Rio Grande do Sul Telegram Group",countryCodes:["br"],languageCodes:["pt"],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",contacts:[{name:"No one",email:"nobody@nowhere.org"}]},"OSM-CL-facebook":{id:"OSM-CL-facebook",featureId:"chile",type:"facebook",name:"OpenStreetMap Chile Facebook",countryCodes:["cl"],languageCodes:["es"],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"}]},"OSM-CL-mailinglist":{id:"OSM-CL-mailinglist",featureId:"chile",type:"mailinglist",name:"Talk-cl Mailing List",countryCodes:["cl"],languageCodes:["es"],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"}]},"OSM-CL-telegram":{id:"OSM-CL-telegram",featureId:"chile",type:"telegram",name:"OpenStreetMap Chile Telegram",countryCodes:["cl"],languageCodes:["es"],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",featureId:"chile",type:"twitter",name:"OpenStreetMap Chile Twitter",countryCodes:["cl"],languageCodes:["es"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmCL",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"Maptime-Bogota":{id:"Maptime-Bogota",featureId:"bogota",type:"meetup",name:"Maptime Bogotá",countryCodes:["co"],languageCodes:["es"],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"}]},"OSM-CO-facebook":{id:"OSM-CO-facebook",featureId:"colombia",type:"facebook",name:"OpenStreetMap Colombia Facebook",countryCodes:["co"],languageCodes:["es"],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"}]},"OSM-CO-mailinglist":{id:"OSM-CO-mailinglist",featureId:"colombia",type:"mailinglist",name:"Talk-co Mailing List",countryCodes:["co"],languageCodes:["es"],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"}]},"OSM-CO-telegram":{id:"OSM-CO-telegram",type:"telegram",featureId:"colombia",countryCodes:["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",featureId:"colombia",type:"twitter",name:"OpenStreetMap Colombia Twitter",countryCodes:["co"],languageCodes:["es"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapCo",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO":{id:"OSM-CO",featureId:"colombia",type:"group",countryCodes:["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"}]},"ym-Universidad-de-Antioquia":{type:"youthmappers",name:"Geomatica UDEA",description:"YouthMappers chapter at Universidad de Antioquia",id:"ym-Universidad-de-Antioquia",featureId:"Universidad-de-Antioquia",contacts:[{name:"Organizer",email:"geomatica.ing.udea@gmail.com"}],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.",countryCodes:["co"],url:"mailto:geomatica.ing.udea@gmail.com?subject=YouthMappers%20y%20Universidad%20de%20Antioquia"},"ym-Universidad-de-La-Guajira":{type:"youthmappers",name:"Grupo Mesh",description:"YouthMappers chapter at Universidad de La Guajira",id:"ym-Universidad-de-La-Guajira",featureId:"Universidad-de-La-Guajira",contacts:[{name:"Organizer",email:"zoviedo@uniguajira.edu.co"}],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.",countryCodes:["co"],url:"mailto:zoviedo@uniguajira.edu.co?subject=Grupo%20Mesh%20y%20YouthMappers"},"ym-Universidad-de-Los-Andes":{type:"youthmappers",name:"Cartografos Uniandes",description:"YouthMappers chapter at Universidad de Los Andes",id:"ym-Universidad-de-Los-Andes",featureId:"Universidad-de-Los-Andes",contacts:[{name:"Organizer",email:"geografia@uniandes.edu.co"}],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.",countryCodes:["co"],url:"mailto:geografia@uniandes.edu.co?subject=Youth%20Mappers%20Chapter%20y%20la%20Universidad%20de%20los%20Andes"},"ym-Universidad-de-San-Buenaventura":{type:"youthmappers",name:"YouthMappers San Buenaventura",description:"YouthMappers chapter at Universidad de San Buenaventura",id:"ym-Universidad-de-San-Buenaventura",featureId:"Universidad-de-San-Buenaventura",contacts:[{name:"Organizer",email:"ingenieria.sistemas@usbmed.edu.co"}],extendedDescription:"We are pleased to join YouthMappers mapping for a better world and community.",countryCodes:["co"],url:"https://www.facebook.com/groups/1742657446017065/"},"ym-Universidad-Distrital-Francisco-Jose-de-Caldas":{type:"youthmappers",name:"YouthMappers at Bogota",description:"YouthMappers chapter at Universidad Distrital Francisco Jose de Caldas",id:"ym-Universidad-Distrital-Francisco-Jose-de-Caldas",featureId:"Universidad-Distrital-Francisco-Jose-de-Caldas",contacts:[{name:"Organizer",email:"lrocha@selper.org.co"}],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.",countryCodes:["co"],url:"mailto:lrocha@selper.org.co"},"ym-Universidad-Nacional-de-Colombia":{type:"youthmappers",name:"Grupo UN",description:"YouthMappers chapter at Universidad Nacional de Colombia",id:"ym-Universidad-Nacional-de-Colombia",featureId:"Universidad-Nacional-de-Colombia",contacts:[{name:"Organizer",email:"raknudsono@unal.edu.co"}],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.",countryCodes:["co"],url:"mailto:raknudsono@unal.edu.co?subject=Youth%20Mappers%20y%20Grupo%20UN%20Colombia"},"OSM-EC-telegram":{id:"OSM-EC-telegram",type:"telegram",featureId:"ecuador",languageCodes:["es"],countryCodes:["ec"],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-PY-telegram":{id:"OSM-PY-telegram",type:"telegram",featureId:"paraguay",languageCodes:["es"],countryCodes:["py"],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-PE-facebook":{id:"OSM-PE-facebook",featureId:"peru",type:"facebook",name:"OpenStreetMap Peru Facebook",countryCodes:["pe"],languageCodes:["es"],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"}]},"OSM-PE-mailinglist":{id:"OSM-PE-mailinglist",featureId:"peru",type:"mailinglist",name:"Talk-pe Mailing List",countryCodes:["pe"],languageCodes:["es"],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"}]},"OSM-PE-matrix":{id:"OSM-PE-matrix",featureId:"peru",type:"matrix",name:"OpenStreetMap Peru Matrix Chat",countryCodes:["pe"],languageCodes:["es"],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",featureId:"peru",type:"telegram",name:"OpenStreetMap Peru Telegram",countryCodes:["pe"],languageCodes:["es"],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",featureId:"peru",type:"twitter",name:"OpenStreetMap Peru Twitter",countryCodes:["pe"],languageCodes:["es"],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-PE":{id:"OSM-PE",featureId:"peru",type:"group",name:"OpenStreetMap Peru",countryCodes:["ar"],languageCodes:["es"],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"}]},"uy-forum":{id:"uy-forum",type:"forum",featureId:"uruguay",countryCodes:["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"}]},"uy-irc":{id:"uy-irc",featureId:"uruguay",type:"irc",name:"OpenStreetMap Uruguay on IRC",countryCodes:["uy"],languageCodes:["es"],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"}]},"uy-mailinglist":{id:"uy-mailinglist",featureId:"uruguay",type:"mailinglist",name:"Talk-uy Mailing List",countryCodes:["uy"],languageCodes:["es"],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"}]},"ve-forum":{id:"ve-forum",type:"forum",featureId:"venezuela",countryCodes:["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"}]},"ve-mailinglist":{id:"ve-mailinglist",featureId:"venezuela",type:"mailinglist",name:"Talk-ve Mailing List",countryCodes:["ve"],languageCodes:["es"],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"}]},"ve-telegram":{id:"ve-telegram",featureId:"venezuela",type:"telegram",name:"OpenStreetMap Venezuela Telegram",countryCodes:["ve"],languageCodes:["es"],description:"Join the OpenStreetMap Venezuela community on Telegram",url:"https://telegram.me/OSMve",contacts:[{name:"VE Community",email:"talk-ve-owner@openstreetmap.org"}]},"LATAM-Facebook":{id:"LATAM-Facebook",featureId:"latam",type:"facebook",languageCodes:["es","pt"],name:"OpenStreetMap Latam Facebook",description:"OpenStreetMap Latam on Facebook",url:"https://www.facebook.com/osmlatam/",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}]},"LATAM-Telegram":{id:"LATAM-Telegram",featureId:"latam",type:"telegram",languageCodes:["es","pt"],name:"OpenStreetMap Latam Telegram",description:"OpenStreetMap Telegram for Latin America",url:"https://t.me/OSMLatam",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}]},"LATAM-Twitter":{id:"LATAM-Twitter",featureId:"latam",type:"twitter",languageCodes:["es","pt"],name:"OpenStreetMap Latam Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmlatam",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}]},"osm-latam":{id:"osm-latam",featureId:"latam",type:"group",languageCodes:["es","pt"],name:"OpenStreetMap Latam",description:"Supporting OpenStreetMap in Latin America",url:"https://osmlatam.org/",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}],events:[{id:"sotm-latam-2018",i18n:true,name:"State of the Map Latam 2018",description:"State of the Map Latam is the annual conference for all mappers and users of OpenStreetMap in Latin America. The program includes talks, panels, workshops, and mapathons related to OpenStreetMap.",where:"Buenos Aires, Argentina",when:"2018-sep-24",url:"https://state.osmlatam.org/"}]},"OSM-Discord":{id:"OSM-Discord",type:"discord",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-Facebook":{id:"OSM-Facebook",type:"facebook",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"}]},"OSM-help":{id:"OSM-help",type:"forum",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"}]},"OSM-IRC":{id:"OSM-IRC",type:"irc",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"}]},"OSM-Reddit":{id:"OSM-Reddit",type:"reddit",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"}]},"OSM-Telegram":{id:"OSM-Telegram",type:"telegram",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",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"}]},OSMF:{id:"OSMF",type:"group",languageCodes:["en","nl","fr","it","ja","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:"sotm2018",i18n:true,name:"State of the Map 2018",description:"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Milan, Italy",when:"2018-jul-28",url:"https://2018.stateofthemap.org/"}]}};
24713
24714         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:"OS7",name:"7th Series (OS7)",type:"tms",template:"https://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg",zoomExtent:[6,14],polygon:[[[-3.04697,54.83947],[-3.05864,55.24157],[-4.04466,55.23296],[-4.07076,55.63654],[-4.61904,55.6253],[-4.64926,56.02834],[-4.48961,56.03217],[-4.52394,56.4367],[-3.86751,56.44581],[-3.84176,56.04944],[-3.44591,56.04982],[-3.43492,55.64429],[-2.79497,55.65049],[-2.80802,56.05749],[-3.20661,56.05327],[-3.21417,56.45682],[-3.73808,56.45075],[-3.74185,56.86175],[-5.07669,56.83171],[-5.03652,56.42949],[-5.16012,56.42493],[-5.12991,56.01798],[-5.92607,55.99456],[-5.85518,55.23335],[-5.2281,55.25136],[-5.21024,55.02765],[-4.65956,55.04181],[-4.64548,54.81633],[-3.04697,54.83947]],[[-1.74835,57.76428],[-1.74065,57.36],[-2.58022,57.35537],[-2.57437,57.04526],[-2.08408,57.04799],[-2.07651,56.64276],[-2.7345,56.63906],[-2.73781,56.81718],[-3.23885,56.81437],[-3.24896,57.35168],[-3.75629,57.34889],[-3.76219,57.65868],[-4.76587,57.64473],[-4.81008,58.26984],[-5.2511,58.26547],[-5.27376,58.66767],[-3.55818,58.69887],[-3.56607,58.9316],[-3.37656,58.93444],[-3.38584,59.20171],[-3.18713,59.20215],[-3.18747,59.24176],[-3.06757,59.24203],[-3.07855,59.42135],[-2.37131,59.42763],[-2.36856,59.0222],[-2.67893,59.02078],[-2.67343,58.83935],[-2.86569,58.83651],[-2.8602,58.53531],[-3.03461,58.53316],[-3.0195,58.13159],[-3.6156,58.11982],[-3.61276,57.97754],[-3.71092,57.97562],[-3.69932,57.75364],[-1.74835,57.76428]],[[-7.07492,56.76319],[-7.73471,56.73566],[-7.7911,57.13994],[-7.70662,57.14343],[-7.76299,57.54311],[-7.60218,57.54968],[-7.62134,57.68452],[-7.72499,57.6803],[-7.73017,57.71673],[-7.60264,57.72191],[-7.59964,57.70083],[-7.48634,57.70544],[-7.49528,57.76813],[-7.37493,57.77301],[-7.39337,57.90201],[-7.23591,57.90838],[-7.24323,57.95948],[-7.13916,57.96369],[-7.14508,58.00495],[-7.23742,58.00122],[-7.23297,57.97018],[-7.31133,57.96702],[-7.31538,57.99525],[-7.24904,57.99792],[-7.28082,58.21856],[-7.07355,58.22687],[-7.0827,58.29018],[-6.80743,58.30119],[-6.82768,58.44074],[-6.50305,58.45366],[-6.51532,58.53792],[-6.16474,58.55184],[-6.10631,58.14894],[-6.33469,58.13976],[-6.27759,57.74145],[-6.96138,57.71366],[-6.93332,57.51615],[-7.10017,57.50933],[-7.05218,57.169],[-7.13111,57.16575],[-7.07492,56.76319]],[[0.41076,50.82087],[0.98102,50.80612],[0.99437,51.01173],[1.45062,50.99998],[1.47712,51.40552],[0.89619,51.42035],[0.88243,51.21039],[0.505,51.22007],[0.52273,51.49042],[-0.63397,51.51063],[-0.63671,51.44563],[-1.09951,51.45248],[-1.11485,51.04814],[-0.52987,51.0394],[-0.52751,51.10203],[0.42806,51.08778],[0.41076,50.82087]],[[-5.39457,51.9619],[-4.79581,51.98051],[-4.78873,51.89403],[-4.20265,51.91228],[-4.22941,52.23828],[-3.6552,52.25602],[-3.62228,51.85483],[-4.21342,51.8364],[-4.18551,51.49342],[-4.77661,51.47485],[-4.78476,51.57525],[-5.08799,51.56574],[-5.09422,51.64242],[-5.3678,51.63385],[-5.39457,51.9619]],[[-1.2389,54.03537],[-0.62779,54.02811],[-0.62004,54.25257],[-0.57268,54.25201],[-0.55865,54.65542],[-1.17998,54.66269],[-1.18782,54.43788],[-1.23221,54.4384],[-1.2389,54.03537]],[[-2.67227,50.97677],[-2.09961,50.98023],[-2.10572,51.37949],[-1.58877,51.38259],[-1.59499,51.78589],[-2.17563,51.78891],[-2.17154,51.38392],[-2.67846,51.38088],[-2.67227,50.97677]],[[-2.60155,53.27155],[-3.22973,53.2685],[-3.23522,53.67231],[-2.60704,53.67533],[-2.60155,53.27155]],[[-0.03942,51.7728],[-0.61563,51.77577],[-0.60465,52.58414],[-0.02843,52.58122],[-0.03942,51.7728]],[[-2.91529,54.03523],[-3.53229,54.02866],[-3.54484,54.43397],[-2.92785,54.44047],[-2.91529,54.03523]],[[-6.30583,57.19689],[-6.3539,57.60015],[-5.69111,57.62295],[-5.64305,57.21995],[-6.30583,57.19689]],[[1.17115,52.57236],[1.19865,52.97594],[1.79788,52.96106],[1.77037,52.55734],[1.17115,52.57236]],[[-2.40225,55.56317],[-2.40088,55.9657],[-1.76084,55.96501],[-1.76222,55.56248],[-2.40225,55.56317]],[[-6.32574,56.38537],[-7.0196,56.35747],[-7.07316,56.76384],[-6.3793,56.79145],[-6.32574,56.38537]],[[-2.42258,54.4431],[-2.42574,54.84188],[-1.79931,54.84354],[-1.79614,54.44477],[-2.42258,54.4431]],[[-3.02701,51.37935],[-3.60589,51.37017],[-3.62237,51.77304],[-3.04349,51.78215],[-3.02701,51.37935]],[[-3.05379,52.18979],[-3.06615,52.59374],[-2.48364,52.60034],[-2.47128,52.19646],[-3.05379,52.18979]],[[-5.67673,51.70425],[-5.67886,51.73101],[-5.4636,51.7376],[-5.46146,51.71084],[-5.67673,51.70425]],[[-5.84427,59.10882],[-5.8469,59.13578],[-5.79558,59.1371],[-5.79294,59.11014],[-5.84427,59.10882]],[[-8.64844,57.77861],[-8.66597,57.87717],[-8.46649,57.88721],[-8.44897,57.78867],[-8.64844,57.77861]],[[-4.52711,59.01532],[-4.52859,59.03319],[-4.47623,59.03434],[-4.47475,59.01646],[-4.52711,59.01532]],[[-7.68062,58.25838],[-7.68655,58.2938],[-7.53445,58.30084],[-7.52852,58.26542],[-7.68062,58.25838]],[[-6.19102,59.08009],[-6.19546,59.11586],[-6.12542,59.11815],[-6.12099,59.08238],[-6.19102,59.08009]],[[-4.42669,59.07112],[-4.42805,59.0887],[-4.37621,59.08976],[-4.37485,59.07218],[-4.42669,59.07112]]]},{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 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",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:"http://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:"http://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:"http://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_May_2018",name:"City of Melbourne",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.79929],[144.9139,-37.79888],[144.91276,-37.79858],[144.91138,-37.79876],[144.90975,-37.79976],[144.90604,-37.80641],[144.90428,-37.81261],[144.9042,-37.81421],[144.90561,-37.82089],[144.90426,-37.82245],[144.89902,-37.82728],[144.89686,-37.83007],[144.89598,-37.83355],[144.89602,-37.83873],[144.89703,-37.84192],[144.90113,-37.84692],[144.9052,-37.85019],[144.90684,-37.85056],[144.90802,-37.8502],[144.9084,-37.84948],[144.90701,-37.84771],[144.90763,-37.84693],[144.90448,-37.84165],[144.90529,-37.84139],[144.90806,-37.8458],[144.91181,-37.8502],[144.91274,-37.85039],[144.91548,-37.84892],[144.91553,-37.84814],[144.91396,-37.84594],[144.91619,-37.84451],[144.91396,-37.84131],[144.91634,-37.83985],[144.91651,-37.83841],[144.91508,-37.83441],[144.91829,-37.83307],[144.91947,-37.83258],[144.92102,-37.83087],[144.92186,-37.83002],[144.92297,-37.8295],[144.92937,-37.82816],[144.93529,-37.82702],[144.94112,-37.82692],[144.94181,-37.82679],[144.94585,-37.8275],[144.94707,-37.82794],[144.94784,-37.82779],[144.95786,-37.82953],[144.95921,-37.82941],[144.9613,-37.82902],[144.96254,-37.82972],[144.96477,-37.83184],[144.96565,-37.83229],[144.96621,-37.83231],[144.97033,-37.83121],[144.97052,-37.83228],[144.97106,-37.83307],[144.97346,-37.83507],[144.97428,-37.83595],[144.97943,-37.85002],[144.97968,-37.85081],[144.98061,-37.85117],[144.98425,-37.85151],[144.98483,-37.85139],[144.98537,-37.85085],[144.98923,-37.83109],[144.98891,-37.83038],[144.99226,-37.81041],[144.99243,-37.80983],[144.99187,-37.80895],[144.97449,-37.80714],[144.97683,-37.79327],[144.97674,-37.7928],[144.97642,-37.79232],[144.97589,-37.79219],[144.96977,-37.79146],[144.97076,-37.78566],[144.97041,-37.785],[144.9699,-37.78477],[144.96488,-37.7842],[144.96511,-37.78252],[144.96507,-37.78198],[144.96421,-37.78142],[144.96398,-37.78082],[144.96389,-37.77964],[144.96355,-37.7785],[144.96267,-37.77779],[144.96136,-37.77724],[144.93919,-37.77456],[144.93836,-37.77458],[144.93801,-37.77485],[144.93728,-37.77601],[144.93658,-37.77692],[144.93613,-37.77728],[144.93598,-37.77791],[144.93778,-37.78142],[144.93827,-37.78421],[144.93911,-37.78654],[144.93885,-37.78672],[144.93881,-37.7873],[144.93773,-37.78801],[144.93216,-37.7874],[144.93123,-37.78783],[144.93076,-37.78786],[144.93003,-37.78735],[144.92181,-37.78642],[144.91488,-37.77938],[144.91428,-37.77865],[144.9137,-37.77853],[144.91293,-37.77855],[144.90819,-37.78135],[144.90722,-37.78206],[144.90572,-37.7845],[144.90529,-37.78637],[144.90428,-37.78657],[144.90375,-37.78718],[144.90319,-37.78827],[144.90201,-37.78883],[144.90143,-37.78964],[144.90188,-37.79103],[144.90257,-37.79198],[144.90415,-37.79288],[144.90645,-37.79383],[144.90814,-37.79456],[144.91046,-37.79519],[144.9127,-37.79605],[144.91429,-37.79695],[144.91525,-37.79783],[144.91539,-37.79815],[144.91531,-37.79848],[144.91518,-37.79872],[144.9148,-37.79914],[144.9146,-37.79929]]],terms_url:"https://data.melbourne.vic.gov.au/Property-Planning/2018-Aerial-Imagery-True-Ortho-/qa5h-sfgh",terms_text:"City of Melbourne",best:true,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:"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:"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:"http://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:"http://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_2000",name:"FÖMI orthophoto 2000",type:"tms",template:"http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg",endDate:"2000-01-01T00:00:00.000Z",startDate:"2000-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:"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-Orthophotos2000",name:"Géolittoral - Orthophotos 2000",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2000-01-01T00:00:00.000Z",startDate:"2000-01-01T00:00:00.000Z",polygon:[[[-1.07962,46.10959],[-0.94115,46.01474],[-0.56306,45.15178],[-0.7266,45.08425],[-0.87904,45.34094],[-0.99794,45.33779],[-0.95558,44.69982],[-1.15862,44.19865],[-1.21512,44.20558],[-1.24654,44.1162],[-1.27903,44.03937],[-1.28825,44.02304],[-1.32117,43.94094],[-1.32151,43.92296],[-1.3092,43.92337],[-1.3085,43.91439],[-1.28366,43.91514],[-1.28302,43.90624],[-1.2761,43.90655],[-1.28211,43.89254],[-1.30102,43.85159],[-1.30384,43.8424],[-1.30923,43.83498],[-1.33474,43.76946],[-1.34407,43.74875],[-1.3456,43.74214],[-1.34673,43.73688],[-1.43284,43.53152],[-1.42806,43.46812],[-1.60627,43.40591],[-1.6061,43.36012],[-1.77441,43.30357],[-1.82995,43.38484],[-1.58551,43.46856],[-1.35706,44.03374],[-1.40217,44.06461],[-1.33584,44.22832],[-1.21836,44.23033],[-1.16795,44.41097],[-1.30744,44.41847],[-1.16979,45.59107],[-1.48685,46.06042],[-1.36364,46.09146],[-1.60176,46.17019],[-1.64442,46.22375],[-1.58595,46.30426],[-1.51008,46.33888],[-1.75643,46.42214],[-2.1872,46.81857],[-2.16423,46.85534],[-2.23654,46.9337],[-2.39769,46.96718],[-2.282,47.07631],[-2.12563,47.01875],[-2.09013,47.06562],[-2.18487,47.10698],[-2.2647,47.10763],[-2.24489,47.18562],[-2.56779,47.24467],[-2.66727,47.46686],[-2.74787,47.47122],[-2.75771,47.43461],[-2.89321,47.4629],[-2.90369,47.50905],[-3.03383,47.53833],[-3.07113,47.51185],[-3.01653,47.49873],[-3.12502,47.42693],[-3.18803,47.48441],[-3.22791,47.61132],[-3.2967,47.63161],[-3.2876,47.67154],[-3.34074,47.66893],[-3.38912,47.59473],[-3.55087,47.63827],[-3.53384,47.72488],[-3.76577,47.76476],[-3.77595,47.7371],[-3.91168,47.75915],[-3.8959,47.79911],[-3.97236,47.81526],[-3.99722,47.7975],[-3.97956,47.76268],[-3.8945,47.72193],[-3.9162,47.67831],[-4.10163,47.70921],[-4.08989,47.78944],[-4.03798,47.79909],[-4.04125,47.83109],[-4.08765,47.84221],[-4.14781,47.82525],[-4.14314,47.78847],[-4.35162,47.7415],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.63576,48.07798],[-4.60147,48.11469],[-4.385,48.10962],[-4.38955,48.14543],[-4.30925,48.15009],[-4.31268,48.17694],[-4.46369,48.18468],[-4.49748,48.1453],[-4.5921,48.14758],[-4.57537,48.22488],[-4.67101,48.2331],[-4.65434,48.31049],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.81465,48.39413],[-4.83515,48.54319],[-4.63387,48.66373],[-3.96692,48.77978],[-3.94939,48.74715],[-3.6502,48.75356],[-3.65853,48.82527],[-3.53931,48.85834],[-3.54444,48.90297],[-3.40954,48.91866],[-3.40755,48.87366],[-3.02769,48.9275],[-2.67861,48.58841],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.80392,48.66126],[-1.61161,48.68582],[-1.71645,49.24781],[-1.8026,49.32721],[-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.17134,49.55412],[-1.27353,49.55245],[-1.1328,49.3934],[-0.93059,49.40804],[-0.74827,49.35976],[-0.38935,49.34167],[-0.24704,49.29995],[-0.12454,49.29353],[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.4521,51.12144],[2.59286,51.12124],[2.60683,51.05779],[1.7976,50.89906],[1.66458,50.82379],[1.70786,50.1282],[1.05936,49.85],[0.61607,49.79062],[0.24731,49.65027],[0.1709,49.53174],[0.57065,49.49622],[0.41115,49.3396],[0.19504,49.35736],[0.01718,49.25479],[-0.24453,49.26312],[-0.38408,49.30495],[-0.74091,49.32438],[-0.9954,49.37133],[-1.05453,49.25175],[-1.27704,49.29022],[-1.25966,49.43463],[-1.39141,49.53985],[-1.27535,49.62056],[-1.29775,49.65946],[-1.4905,49.57139],[-1.77517,49.63398],[-1.74601,49.48155],[-1.51294,49.24691],[-1.48261,48.72607],[-1.30574,48.72531],[-1.28323,48.59731],[-2.76114,48.43471],[-3.00174,48.67646],[-3.21062,48.72097],[-3.95404,48.56051],[-4.15643,48.60792],[-4.44475,48.55852],[-4.63683,48.48299],[-4.6319,48.44727],[-4.25022,48.43088],[-4.06141,48.21805],[-4.1757,48.05165],[-4.31904,48.0141],[-4.26781,47.89977],[-3.88484,47.98172],[-3.76375,47.86403],[-2.32727,47.52634],[-2.36911,47.3339],[-1.74067,47.33507],[-1.77062,47.20451],[-2.03678,47.21942],[-2.0968,47.15548],[-1.88786,47.01239],[-2.08797,46.83007],[-2.01214,46.83436],[-1.84079,46.69651],[-1.87318,46.65484],[-1.68859,46.50392],[-1.62117,46.51513],[-1.42428,46.41675],[-1.01761,46.35917],[-1.07962,46.10959]],[[-2.41232,46.69242],[-2.37197,46.67611],[-2.26749,46.68033],[-2.27007,46.70705],[-2.29827,46.73286],[-2.41655,46.73711],[-2.41232,46.69242]],[[-3.06018,47.40542],[-2.82587,47.29635],[-2.78787,47.33417],[-3.02436,47.44563],[-3.06018,47.40542]],[[-3.26482,47.4295],[-3.3343,47.35928],[-3.29614,47.34133],[-3.31489,47.30057],[-3.19941,47.24492],[-3.16567,47.27751],[-3.08686,47.23612],[-3.00637,47.30855],[-3.26482,47.4295]],[[-1.93966,48.86346],[-1.93993,48.91179],[-1.701,48.91105],[-1.69726,48.86173],[-1.93966,48.86346]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho littorale 2000"},{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:"GRAFCAN-Canary_Islands",name:"GRAFCAN - 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_text:"GRAFCAN OrtoExpress Urbana 2009"},{id:"GRAFCAN_Express-Canary_Islands",name:"GRAFCAN Express - 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_text:"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",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-2012",name:"Lausanne - Orthophoto technique 2012",type:"tms",template:"http://osmdata.asitvd.ch/tiles/lausanne2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,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 technique 2012"},{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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",best:true,icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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],[148.95024,-28.99937],[148.94988,-28.96653],[148.99983,-28.96653],[149.00009,-28.81658],[149.10007,-28.81658],[149.0997,-28.74885],[148.99985,-28.74974],[148.99982,-28.50003],[151.00005,-28.50052],[151.00059,-28.73258],[151.02395,-28.73274],[151.02413,-28.74188],[151.03293,-28.74188],[151.03383,-28.75054],[151.99998,-28.74953],[151.99998,-28.71645],[152.0334,-28.71661],[152.03322,-28.6832],[152.00007,-28.68335],[151.99988,-28.64163],[151.98299,-28.64139],[151.98317,-28.62491],[151.93313,-28.62475],[151.93341,-28.50007],[151.99989,-28.50023],[151.99986,-28.37496],[152.24997,-28.37507],[152.24994,-28.25001],[152.99972,-28.24986],[152.9999,-28.28324],[153.1165,-28.2834],[153.11659,-28.24986],[153.16663,-28.25001],[153.16672,-28.23316],[153.24999,-28.23324],[153.25003,-28.12497],[153.62496,-28.12508],[153.62484,-28.49991],[153.7498,-28.49999],[153.74959,-28.7498],[153.62481,-28.75011],[153.62497,-28.99993],[153.49977,-29.00006],[153.49984,-29.49951],[153.3748,-29.50005],[153.37541,-29.87503],[153.49991,-29.87514],[153.49991,-30.00009],[153.24989,-29.99976],[153.25002,-30.19177],[153.27482,-30.19162],[153.27482,-30.21685],[153.21661,-30.21661],[153.21661,-30.25006],[153.25002,-30.25006],[153.24975,-30.37519],[153.12436,-30.37497],[153.12465,-30.62504],[153.03317,-30.62505],[153.03339,-30.87508],[153.12492,-30.87503],[153.12493,-31.12505],[153.00824,-31.12497],[153.00829,-31.24998],[153,-31.25],[152.99994,-31.62499],[152.87494,-31.62505],[152.87496,-31.74995],[152.78329,-31.75],[152.7832,-31.87486],[152.74991,-31.87501],[152.75004,-32.00002],[152.6249,-31.99994],[152.62491,-32.5],[152.49998,-32.49996],[152.50003,-32.56664],[152.41667,-32.56634],[152.41676,-32.625],[152.34985,-32.62499],[152.34985,-32.63323],[152.28308,-32.63322],[152.28326,-32.62498],[152.24948,-32.62498],[152.24981,-32.87491],[151.87457,-32.87504],[151.87485,-33.00001],[151.74977,-33.00015],[151.75047,-33.25004],[151.62524,-33.24974],[151.62508,-33.37516],[151.49958,-33.37514],[151.50031,-33.62494],[151.37415,-33.62437],[151.37279,-34.00196],[151.24778,-34.00112],[151.24778,-34.24931],[150.99573,-34.25015],[151.00081,-34.62483],[150.87174,-34.6265],[150.87276,-35.12427],[150.76706,-35.12344],[150.76909,-35.24638],[150.62579,-35.2497],[150.62803,-35.37515],[150.49997,-35.37515],[150.49591,-35.6275],[150.37192,-35.62503],[150.37497,-35.7538],[150.26724,-35.75132],[150.2652,-35.87412],[150.24792,-35.87083],[150.24589,-36.37488],[150.12292,-36.37488],[150.12597,-36.62243],[150.02535,-36.62407],[150.0284,-36.74713],[149.99283,-36.74958],[150.00401,-37.12245],[150.05889,-37.12731],[150.05686,-37.37809],[149.99791,-37.37324],[149.99994,-37.48301],[149.98774,-37.48462],[149.98571,-37.508],[148.06846,-36.80624],[147.99306,-36.138],[147.81483,-36.00556],[147.38939,-36.01137],[147.38221,-36.13103],[146.99725,-36.12755],[146.98863,-36.25283],[146.49564,-36.24471],[146.50426,-36.12639],[145.00118,-36.00795],[145.01541,-36.25421],[144.50725,-36.24765],[144.49912,-36.0211],[143.99654,-35.98105],[143.33826,-35.23318],[142.40976,-34.76694],[142.03614,-34.37588],[140.99652,-34.13858],[140.99884,-28.99924]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/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",best:true},{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:"Maxar-Premium",name:"Maxar Premium Imagery (Beta)",type:"tms",template:"https://earthwatch.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe:ImageryTileService@EPSG:3857@jpg/{zoom}/{x}/{-y}.jpg?connectId=91e57457-aa2d-41ad-a42b-3b63a123f54a",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"Maxar Premium is a mosaic composed of Maxar basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Maxar.png"},{id:"Maxar-Standard",name:"Maxar Standard Imagery (Beta)",type:"tms",template:"https://earthwatch.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe:ImageryTileService@EPSG:3857@jpg/{zoom}/{x}/{-y}.jpg?connectId=d9c5e3ef-6300-4cec-9562-c1f27da6b2d9",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"Maxar Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Maxar.png"},{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:"http://www.miljodirektoratet.no/Framework/favicon-32.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:"http://www.miljodirektoratet.no/Framework/favicon-32.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://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"nve-nettanlegg",name:"NVE Electricity Network overlay",type:"wms",template:"https://gis3.nve.no/map/services/Nettanlegg1/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://www.nve.no/Content/Images/nve-logo.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://www.nve.no/Content/Images/nve-logo.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://www.nve.no/Content/Images/nve-logo.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-historic-25k-OSM_Limited",name:"OS 1:25k historic (OSM)",type:"tms",template:"https://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg",zoomExtent:[6,17],polygon:[[[-6.45854,49.90441],[-6.3872,49.98411],[-6.22968,49.98962],[-6.21713,49.86801],[-6.45512,49.85918],[-6.45854,49.90441]],[[-1.44951,60.86341],[-0.71671,60.85451],[-0.73497,60.43598],[-0.69388,60.41682],[-0.72584,60.39427],[-0.73954,60.04847],[-0.92674,60.04619],[-0.93815,59.82662],[-1.45865,59.8312],[-1.44552,60.0536],[-1.46321,60.0536],[-1.46435,60.063],[-1.57165,60.06385],[-1.56936,60.179],[-1.64356,60.1807],[-1.64356,60.18922],[-1.82162,60.1895],[-1.82048,60.36155],[-1.8416,60.36973],[-1.82162,60.38328],[-1.81799,60.59343],[-1.45317,60.59343],[-1.44951,60.86341]],[[-4.90892,54.42421],[-4.2826,54.44299],[-4.25354,54.02977],[-4.87664,54.02218],[-4.90892,54.42421]],[[-5.86674,59.14446],[-5.776,59.14709],[-5.772,59.10141],[-5.86218,59.09906],[-5.86674,59.14446]],[[-1.70659,59.57036],[-1.55792,59.56935],[-1.55649,59.49657],[-1.70545,59.49758],[-1.70659,59.57036]],[[-7.68658,58.2941],[-7.53306,58.3007],[-7.52564,58.26469],[-7.67973,58.25779],[-7.68658,58.2941]],[[-4.53383,59.03599],[-4.48132,59.03716],[-4.47961,59.01866],[-4.53326,59.01807],[-4.53383,59.03599]],[[-8.67107,57.87699],[-8.46732,57.88973],[-8.44678,57.7907],[-8.65109,57.77792],[-8.67107,57.87699]],[[-5.23955,50.35306],[-5.79201,50.33849],[-5.76005,49.9317],[-4.65514,49.95815],[-4.67797,50.28601],[-4.24422,50.28017],[-4.24878,50.20425],[-3.38129,50.20425],[-3.42238,50.51882],[-3.11648,50.52463],[-3.12105,50.65796],[-2.67364,50.66195],[-2.59535,50.63943],[-2.5905,50.57284],[-2.47912,50.57335],[-2.47589,50.50667],[-2.39679,50.50564],[-2.40164,50.57233],[-1.04003,50.57182],[-1.03357,50.70593],[-0.5493,50.70388],[-0.54607,50.78866],[-0.09247,50.7856],[-0.08763,50.71819],[0.47897,50.71206],[0.48704,50.81825],[0.97615,50.80499],[0.99229,51.01263],[1.44912,51.00044],[1.47818,51.40904],[1.02296,51.42716],[1.03588,51.76409],[1.61054,51.7501],[1.64606,52.156],[1.72677,52.15402],[1.74937,52.44818],[1.78707,52.48116],[1.7591,52.52251],[1.79335,52.96027],[0.37981,52.99585],[0.38952,53.25112],[0.34786,53.25112],[0.32389,53.28219],[0.34615,53.65385],[0.12849,53.65755],[0.11658,53.66747],[0.13506,54.06557],[-0.06098,54.06591],[-0.04142,54.47094],[-0.56627,54.47718],[-0.55921,54.65651],[-1.16656,54.66235],[-1.16374,54.84261],[-1.33162,54.84391],[-1.32571,55.24708],[-1.52945,55.24871],[-1.52418,55.65401],[-1.76388,55.65401],[-1.77337,55.97191],[-2.16079,55.9683],[-2.15433,56.06214],[-2.45781,56.05853],[-2.41906,56.64172],[-2.09622,56.64172],[-2.0833,57.00213],[-1.92834,57.01268],[-1.9181,57.35909],[-1.75022,57.36257],[-1.76959,57.76086],[-3.69376,57.75742],[-3.70667,57.98064],[-3.5969,57.97721],[-3.60336,58.12073],[-3.02223,58.13096],[-3.02869,58.54108],[-2.8479,58.53097],[-2.86081,58.84305],[-2.67962,58.8415],[-2.68419,58.88517],[-2.63397,58.90522],[-2.67962,58.93351],[-2.68876,59.02292],[-2.36687,59.02292],[-2.37029,59.26529],[-2.3429,59.2822],[-2.37144,59.29969],[-2.37372,59.37071],[-2.3429,59.38582],[-2.37258,59.40035],[-2.37144,59.42591],[-3.07342,59.42301],[-3.07114,59.34336],[-3.1031,59.33114],[-3.07456,59.31367],[-3.07228,59.2326],[-3.38503,59.14842],[-3.37476,58.93528],[-3.56538,58.93233],[-3.55483,58.69759],[-5.28086,58.66677],[-5.25342,58.35141],[-5.50685,58.34379],[-5.47618,58.03236],[-5.8975,58.02124],[-5.8523,57.61718],[-6.13963,57.61372],[-6.15416,57.74232],[-6.29137,57.73801],[-6.33657,58.13988],[-6.11219,58.14669],[-6.14738,58.51063],[-6.29348,58.54162],[-6.84137,58.29773],[-7.00574,58.29293],[-7.10162,58.20644],[-7.25731,58.17931],[-7.25311,58.10049],[-7.40707,58.09056],[-7.39135,57.79114],[-7.79099,57.77332],[-7.76242,57.54442],[-7.6985,57.14532],[-7.79438,57.13045],[-7.71676,56.73686],[-7.01221,56.76544],[-6.97992,56.54539],[-7.06386,56.54539],[-7.04449,56.35626],[-6.50068,56.38129],[-6.44914,55.97936],[-6.56329,55.96915],[-6.53937,55.70301],[-6.55955,55.69073],[-6.53453,55.67617],[-6.52162,55.57044],[-5.89126,55.59234],[-5.85601,55.23207],[-5.22936,55.2516],[-5.18371,54.62541],[-3.6656,54.65184],[-3.64962,54.432],[-3.54004,54.43067],[-3.53091,54.02902],[-3.06977,54.03036],[-3.06757,53.82214],[-3.08049,53.77399],[-3.06192,53.74775],[-3.06112,53.6737],[-3.21447,53.67084],[-3.20577,53.42262],[-3.27996,53.35522],[-3.28967,53.36084],[-3.33275,53.36493],[-3.37613,53.35403],[-4.0889,53.34331],[-4.09455,53.4612],[-4.69741,53.44486],[-4.68828,53.33186],[-4.72024,53.28958],[-4.68371,53.24862],[-4.67687,53.15426],[-4.84808,53.14468],[-4.81783,52.74403],[-4.25458,52.75589],[-4.22888,52.25488],[-4.26076,52.25364],[-4.27246,52.24326],[-4.81363,52.23009],[-4.80792,52.11389],[-5.38891,52.09917],[-5.37179,51.91297],[-5.42087,51.91015],[-5.41402,51.84532],[-5.36836,51.84744],[-5.34668,51.55953],[-4.77368,51.57585],[-4.76569,51.48851],[-4.19154,51.49704],[-4.18698,51.43447],[-3.61512,51.44443],[-3.61055,51.37465],[-3.14941,51.37893],[-3.14941,51.29193],[-4.30387,51.27459],[-4.28612,51.05087],[-4.85433,51.03666],[-4.83722,50.72128],[-5.26183,50.70827],[-5.23955,50.35306]],[[-2.15027,60.17132],[-2.00302,60.16961],[-2.00131,60.0997],[-2.14855,60.10112],[-2.15027,60.17132]],[[-6.2086,59.11635],[-6.12299,59.11664],[-6.12185,59.0715],[-6.20974,59.0715],[-6.2086,59.11635]],[[-4.41596,59.0889],[-4.4212,59.07708],[-4.39719,59.07791],[-4.39134,59.08973],[-4.41596,59.0889]]]},{id:"OS-New_Popular_Edition-historic",name:"OS New Popular Edition historic",type:"tms",template:"https://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png",zoomExtent:[6,15],polygon:[[[-3.68466,55.23744],[-3.65106,54.42892],[-3.54463,54.43072],[-3.52815,54.02593],[-3.07016,54.03137],[-3.06123,53.6717],[-3.21298,53.67048],[-3.20371,53.35568],[-4.10424,53.34297],[-4.11042,53.46005],[-4.71124,53.44799],[-4.69339,53.15171],[-4.84307,53.1476],[-4.81595,52.74378],[-4.25342,52.75541],[-4.22733,52.24378],[-4.81303,52.23117],[-4.80754,52.11452],[-5.38913,52.09892],[-5.3493,51.56085],[-4.77252,51.57622],[-4.76772,51.48652],[-4.19299,51.49806],[-4.18956,51.43518],[-3.61278,51.44502],[-3.61072,51.37307],[-3.15067,51.37864],[-3.14723,51.28984],[-4.29462,51.2718],[-4.28363,51.04744],[-4.85423,51.03406],[-4.83707,50.76556],[-5.2621,50.75427],[-5.23395,50.34984],[-5.79562,50.33319],[-5.76228,49.92913],[-4.64717,49.96094],[-4.66914,50.2753],[-4.25166,50.2832],[-4.24617,50.19361],[-3.40159,50.20679],[-3.41395,50.52041],[-3.13105,50.52391],[-3.1338,50.66078],[-2.66963,50.66252],[-2.66688,50.5719],[-1.04228,50.56929],[-1.04502,50.70429],[-0.54652,50.69994],[-0.54103,50.79031],[-0.08784,50.78424],[-0.08887,50.72211],[0.47693,50.70907],[0.48242,50.81939],[0.98024,50.8068],[0.99328,51.01333],[1.44784,51.00036],[1.47805,51.40478],[1.018,51.41634],[1.04272,51.76742],[1.6195,51.75084],[1.65246,52.15456],[1.72662,52.15245],[1.79529,52.9594],[0.60396,52.99123],[0.60327,52.97222],[0.38148,52.97883],[0.39625,53.24796],[0.31934,53.24961],[0.34269,53.65319],[0.11609,53.65726],[0.13738,54.06181],[-0.06243,54.06584],[-0.04183,54.46924],[-0.56781,54.47722],[-0.56163,54.65715],[-1.18098,54.66271],[-1.17755,54.84183],[-1.33342,54.84381],[-1.32655,55.24743],[-1.53117,55.24821],[-1.52636,55.6528],[-1.76394,55.6528],[-1.76257,55.96765],[-2.40321,55.96727],[-2.39772,55.56243],[-2.16151,55.56282],[-2.15808,55.2486],[-2.92158,55.24571],[-3.68466,55.23744]]]},{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:"OS-Scottish_Popular-historic",name:"OS Scottish Popular historic",type:"tms",template:"https://ooc.openstreetmap.org/npescotland/{zoom}/{x}/{y}.jpg",zoomExtent:[6,15],polygon:[[[-6.37546,57.1045],[-6.12998,57.11183],[-6.12586,56.94143],[-6.26045,56.93892],[-6.26045,56.83765],[-6.24259,56.65806],[-6.3552,56.65655],[-6.37649,56.79029],[-7.02812,56.76396],[-6.99636,56.54246],[-7.04391,56.53937],[-7.03206,56.44201],[-6.98331,56.44353],[-6.97593,56.36063],[-6.45271,56.37964],[-6.44035,56.2013],[-6.19315,56.21199],[-6.18354,56.12483],[-6.36379,56.11641],[-6.36173,55.98258],[-6.48944,55.97912],[-6.47777,55.84134],[-6.55467,55.8371],[-6.53545,55.66049],[-6.45442,55.66087],[-6.44412,55.57285],[-6.19985,55.57266],[-5.96845,55.58857],[-5.98562,55.7686],[-5.90665,55.77169],[-5.88949,55.59284],[-5.80983,55.594],[-5.79335,55.41395],[-5.827,55.41395],[-5.80915,55.24247],[-5.61826,55.24873],[-5.62101,55.26713],[-5.46239,55.27026],[-5.48642,55.514],[-5.43836,55.51516],[-5.42943,55.42681],[-5.24129,55.43071],[-5.19464,54.80351],[-5.07105,54.80668],[-5.05221,54.62471],[-4.3223,54.65173],[-4.33123,54.7319],[-4.06786,54.73697],[-4.06786,54.76471],[-3.55699,54.77342],[-3.55837,54.83754],[-2.42098,54.84671],[-2.42647,55.25265],[-2.03097,55.25265],[-2.01449,55.56606],[-1.76455,55.56606],[-1.76455,55.9724],[-2.35026,55.96548],[-2.5796,56.06527],[-2.58234,56.37071],[-2.65032,56.36919],[-2.65581,56.50585],[-2.48965,56.50509],[-2.42785,56.55356],[-2.42373,56.73026],[-2.1628,56.73177],[-2.17104,56.99301],[-2.00075,56.99301],[-1.98479,57.3159],[-1.83476,57.31553],[-1.83441,57.36074],[-1.75167,57.36111],[-1.74893,57.63046],[-1.83613,57.63009],[-1.83544,57.70171],[-2.00436,57.70207],[-2.00367,57.71968],[-3.22281,57.71418],[-3.22629,57.76157],[-3.51331,57.77622],[-3.50914,57.71051],[-3.84766,57.70611],[-3.85182,57.76853],[-3.79925,57.76989],[-3.80474,57.88578],[-3.85556,57.88651],[-3.85937,57.97558],[-3.79513,57.97656],[-3.79483,58.03052],[-3.69733,58.03161],[-3.69458,58.06722],[-3.52391,58.07437],[-3.52978,58.16007],[-3.35774,58.16286],[-3.3483,58.28742],[-3.07638,58.29121],[-3.03004,58.43744],[-3.01768,58.65814],[-2.85837,58.66028],[-2.86524,58.7943],[-2.75812,58.79715],[-2.76636,58.87461],[-2.6208,58.88668],[-2.62766,58.97527],[-2.54114,58.97668],[-2.54217,59.0841],[-2.52363,59.08375],[-2.52913,59.1574],[-2.43849,59.15705],[-2.4378,59.246],[-2.36914,59.24705],[-2.3688,59.40748],[-2.52947,59.40748],[-2.52741,59.33436],[-2.70319,59.33576],[-2.70525,59.40608],[-3.12891,59.40433],[-3.12411,59.15951],[-3.40288,59.1574],[-3.39464,58.9689],[-3.4276,58.96961],[-3.42572,58.88526],[-3.45215,58.87071],[-3.51017,58.86911],[-3.50708,58.78826],[-3.38555,58.79004],[-3.3828,58.6999],[-3.4494,58.69847],[-3.45078,58.65385],[-3.50159,58.65421],[-3.5009,58.62705],[-3.72612,58.62383],[-3.72475,58.60595],[-4.6476,58.5895],[-4.65996,58.67171],[-5.10697,58.66135],[-5.09804,58.58091],[-5.23743,58.57769],[-5.22455,58.26305],[-5.4127,58.25818],[-5.39965,58.12245],[-5.53286,58.11991],[-5.52393,57.99494],[-5.55346,57.99422],[-5.54728,57.93995],[-5.85696,57.93157],[-5.83181,57.73361],[-5.86374,57.73224],[-5.85773,57.66096],[-6.19624,57.64975],[-6.20242,57.72353],[-6.41666,57.7162],[-6.42421,57.75945],[-6.4764,57.75725],[-6.46884,57.71326],[-6.53339,57.71216],[-6.52721,57.6391],[-6.692,57.63395],[-6.68102,57.54341],[-6.78195,57.53826],[-6.75311,57.31608],[-6.50592,57.32498],[-6.49768,57.28084],[-6.4812,57.27824],[-6.47159,57.19203],[-6.38644,57.19352],[-6.37546,57.1045]],[[-7.65043,56.77461],[-7.40667,56.79304],[-7.41972,56.88281],[-7.38676,56.90268],[-7.25836,56.91056],[-7.24806,57.07141],[-7.11485,57.077],[-7.16772,57.43466],[-7.0352,57.44094],[-7.05236,57.69026],[-6.86834,57.6976],[-6.87315,57.71631],[-6.70286,57.72217],[-6.71591,57.81117],[-6.53188,57.81958],[-6.53875,57.88133],[-6.22015,57.89265],[-6.24143,58.09935],[-6.12676,58.10152],[-6.17758,58.53105],[-6.46734,58.52029],[-6.4591,58.45102],[-6.63145,58.44455],[-6.6239,58.39169],[-6.79212,58.38485],[-6.78869,58.34956],[-6.90885,58.34415],[-6.89718,58.25503],[-7.20136,58.24166],[-7.14094,57.83201],[-7.37509,57.82104],[-7.36822,57.69503],[-7.6573,57.68292],[-7.67652,57.80715],[-7.79257,57.80202],[-7.77327,57.67734],[-7.70756,57.68024],[-7.69376,57.59088],[-7.75947,57.58797],[-7.74587,57.49965],[-7.51241,57.5085],[-7.47911,57.29468],[-7.52855,57.2932],[-7.51276,57.05871],[-7.61163,57.05386],[-7.59859,56.87493],[-7.66725,56.87268],[-7.65043,56.77461]],[[-1.46238,59.82831],[-1.21519,59.83107],[-1.21519,59.96194],[-1.10533,59.96056],[-1.0986,60.09498],[-0.97632,60.09346],[-0.96352,60.3476],[-0.74028,60.34484],[-0.7147,60.84722],[-1.08215,60.85901],[-1.08455,60.76944],[-1.21296,60.77011],[-1.21579,60.68079],[-1.23364,60.68113],[-1.23467,60.5909],[-1.27132,60.59191],[-1.27338,60.64581],[-1.45466,60.64648],[-1.45397,60.59224],[-1.6373,60.59292],[-1.63954,60.3507],[-1.73172,60.35095],[-1.73172,60.18067],[-1.64177,60.17931],[-1.64177,60.1448],[-1.46393,60.14344],[-1.46238,59.82831]],[[-6.21496,56.97437],[-6.22525,57.06445],[-6.29117,57.06184],[-6.29237,57.08062],[-6.62162,57.06943],[-6.61338,57.00629],[-6.46163,57.01302],[-6.4582,56.96776],[-6.21496,56.97437]],[[-2.12774,60.10855],[-2.12803,60.16207],[-2.00203,60.16224],[-2.00174,60.10872],[-2.12774,60.10855]],[[-6.68977,56.95804],[-6.69228,56.9759],[-6.65984,56.97726],[-6.65733,56.9594],[-6.68977,56.95804]],[[-7.66365,58.25846],[-7.66844,58.28502],[-7.54896,58.29098],[-7.54417,58.26442],[-7.66365,58.25846]],[[-8.65104,57.78885],[-8.66674,57.875],[-8.48272,57.88449],[-8.46702,57.79836],[-8.65104,57.78885]]]},{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-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]]],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:"http://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",name:"South Tyrol Orthofoto 2011",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2011_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-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 3.0"},{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-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:"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",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://ags-proxy.openstreetmap.us/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fbasemap.nationalmap.gov%2Farcgis%2Frest%2Fservices%2FUSGSImageryOnly%2FMapServer",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:"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:"http://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"}];
24715
24716         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"],moreFields:["charge_fee","opening_hours","fee","payment_multi","address","website","phone","email","fax"],geometry:["point","vertex","line","area"],tags:{attraction:"*"},searchable:false,name:"Attraction"},boundary:{fields:["boundary"],geometry:["line"],tags:{boundary:"*"},searchable:false,name:"Boundary"},building_point:{icon:"maki-home",fields:["{building}"],moreFields:["{building}"],geometry:["point"],tags:{building:"*"},matchScore:0.6,searchable:false,terms:[],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"},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"},leisure:{icon:"maki-pitch",fields:["name","leisure"],geometry:["point","vertex","line","area"],tags:{leisure:"*"},searchable:false,name:"Leisure"},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"},natural:{icon:"maki-natural",fields:["name","natural"],geometry:["point","vertex","line","area"],tags:{natural:"*"},searchable:false,name:"Natural"},place:{fields:["name","place"],geometry:["point","vertex","area"],tags:{place:"*"},searchable:false,name:"Place"},playground:{icon:"maki-playground",fields:["playground"],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"},railway:{fields:["railway"],geometry:["point","vertex","line","area"],tags:{railway:"*"},searchable:false,name:"Railway"},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"},waterway:{fields:["name","waterway"],geometry:["point","vertex","line","area"],tags:{waterway:"*"},searchable:false,name:"Waterway"},"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":{fields:["direction","lit"],geometry:["point","vertex","line"],tags:{advertising:"billboard"},name:"Billboard"},"advertising/column":{icon:"temaki-storage_tank",fields:["lit"],geometry:["point","area"],tags:{advertising:"column"},name:"Advertising Column"},"aerialway/station":{icon:"maki-aerialway",geometry:["point","vertex","area"],fields:["aerialway/access","aerialway/summer/access","elevation","building_area"],tags:{aerialway:"station"},matchScore:0.95,name:"Aerialway Station",searchable:false,replacement:"public_transport/station_aerialway"},"aerialway/cable_car":{icon:"fas-tram",geometry:["line"],terms:["tramway","ropeway"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"cable_car"},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"},name:"Chair Lift"},"aerialway/drag_lift":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"drag_lift"},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"},name:"Gondola"},"aerialway/goods":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"goods"},name:"Goods Aerialway"},"aerialway/j-bar":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],terms:["jbar"],tags:{aerialway:"j-bar"},name:"J-bar Lift"},"aerialway/magic_carpet":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"magic_carpet"},name:"Magic Carpet Lift"},"aerialway/mixed_lift":{geometry:["line"],fields:["name","oneway_yes","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"mixed_lift"},name:"Mixed Lift"},"aerialway/platter":{geometry:["line"],terms:["button lift","poma lift"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"platter"},name:"Platter Lift"},"aerialway/pylon":{geometry:["point","vertex"],fields:["ref"],tags:{aerialway:"pylon"},name:"Aerialway Pylon"},"aerialway/rope_tow":{geometry:["line"],terms:["handle tow","bugel lift"],fields:["name","oneway_yes","aerialway/capacity","aerialway/duration"],tags:{aerialway:"rope_tow"},name:"Rope Tow Lift"},"aerialway/t-bar":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],terms:["tbar"],tags:{aerialway:"t-bar"},name:"T-bar Lift"},"aerialway/zip_line":{geometry:["line"],fields:["name","oneway_yes","aerialway/duration","maxweight","access_simple"],terms:["aerial runway","canopy","flying fox","foefie slide","gravity propelled aerial ropeslide","Tyrolean traverse","zip wire","zip-line","zipline","zipwire"],tags:{aerialway:"zip_line"},name:"Zip Line"},"aeroway/aerodrome":{icon:"maki-airport",geometry:["point","area"],fields:["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],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:["point","area"],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",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/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"],moreFields:["wheelchair","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:"maki-embassy",fields:["name","country","address","building_area"],moreFields:["website","phone","email","fax","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"],terms:[],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"],terms:["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],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:"maki-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:["payment_multi","website","phone","email","fax","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:["website","phone","email","fax","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:["website","phone","email","fax","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","internet_access","internet_access/fee","internet_access/ssid","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","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","atm","drive_through"],moreFields:["air_conditioning","currency_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","opening_hours","phone","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","outdoor_seating","brewery"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","microbrewery","opening_hours","payment_multi","phone","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","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","lit"],geometry:["point","vertex","area"],terms:["bike"],tags:{amenity:"bicycle_parking"},name:"Bicycle Parking"},"amenity/bicycle_parking/building":{icon:"maki-bicycle",fields:["{amenity/bicycle_parking}","opening_hours","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"building"},reference:{key:"bicycle_parking"},terms:["Multi-Storey Bicycle Park","Multi-Storey Bike Park","Bike Parking Station"],name:"Bicycle Parking Garage"},"amenity/bicycle_parking/lockers":{icon:"maki-bicycle",geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"lockers"},reference:{key:"bicycle_parking"},terms:["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:["Bike Shed"],name:"Bicycle Shed"},"amenity/bicycle_rental":{icon:"maki-bicycle",fields:["capacity","network","operator","operator/type","fee","payment_multi_fee"],moreFields:["address","email","covered","fax","opening_hours","phone","website","wheelchair"],geometry:["point","vertex","area"],terms:["bike","bicycle","bikeshare","bike share","bicycle share","hub","dock"],tags:{amenity:"bicycle_rental"},name:"Bicycle Rental"},"amenity/bicycle_repair_station":{icon:"maki-bicycle",fields:["operator","brand","opening_hours","fee","payment_multi_fee","charge_fee","service/bicycle"],moreFields:["colour","covered","indoor","manufacturer"],geometry:["point","vertex"],terms:["bike","repair","chain","pump","tools","stand","multitool"],tags:{amenity:"bicycle_repair_station"},name:"Bicycle Repair Tool Stand"},"amenity/biergarten":{icon:"fas-beer",fields:["name","address","building","outdoor_seating","brewery"],moreFields:["{amenity/bar}"],geometry:["point","area"],tags:{amenity:"biergarten"},terms:["beer","bier","booze"],name:"Biergarten"},"amenity/boat_rental":{icon:"temaki-boating",fields:["name","operator","operator/type","fee","payment_multi_fee","charge_fee"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"boat_rental"},name:"Boat Rental"},"amenity/bureau_de_change":{icon:"maki-bank",fields:["name","operator","payment_multi","currency_multi","address","building_area"],moreFields:["opening_hours","website","phone","email","fax","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","outdoor_seating","internet_access","internet_access/fee"],moreFields:["air_conditioning","bar","capacity","delivery","diet_multi","email","fax","internet_access/ssid","not/name","opening_hours","payment_multi","phone","reservation","smoking","takeaway","website","wheelchair"],geometry:["point","area"],terms:["bistro","coffee","tea"],tags:{amenity:"cafe"},name:"Cafe"},"amenity/car_pooling":{icon:"maki-car",fields:["name","operator","operator/type","capacity","address","opening_hours","lit"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_pooling"},name:"Car Pooling"},"amenity/car_rental":{icon:"maki-car-rental",fields:["name","operator","address","opening_hours","payment_multi"],moreFields:["brand","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_rental"},name:"Car Rental"},"amenity/car_sharing":{icon:"maki-car",fields:["name","operator","operator/type","capacity","address","payment_multi","supervised"],moreFields:["lit","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_sharing"},name:"Car Sharing"},"amenity/car_wash":{icon:"temaki-car_wash",fields:["name","operator","address","building_area","opening_hours","payment_multi","self_service"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_wash"},name:"Car Wash"},"amenity/casino":{icon:"maki-casino",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","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","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"],moreFields:["payment_multi","website","phone","email","fax","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","email","fax","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","payment_multi","website","phone","email","fax","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","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"],moreFields:["religion","denomination","internet_access/ssid","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["university","undergraduate school"],tags:{amenity:"college"},name:"College Grounds"},"amenity/community_centre":{icon:"maki-town-hall",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","email","fax","phone","polling_station","website","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:"maki-car",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","building_area","address","website","internet_access"],moreFields:["air_conditioning","email","fax","internet_access/fee","internet_access/ssid","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","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","website","phone","email","fax","wheelchair"],geometry:["area","point"],tags:{amenity:"crematorium"},terms:["cemetery","funeral"],name:"Crematorium"},"amenity/dentist":{icon:"maki-dentist",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","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:["payment_multi","website","phone","email","fax","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:["payment_multi","website","phone","email","fax","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:["payment_multi","website","phone","email","fax","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","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"],moreFields:["covered","indoor","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:["payment_multi","website","phone","email","fax","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"],moreFields:["air_conditioning","email","fax","internet_access/fee","internet_access/ssid","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","drive_through"],moreFields:["air_conditioning","opening_hours","diet_multi","takeaway","delivery","smoking","capacity","outdoor_seating","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","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/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","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"],moreFields:["smoking","outdoor_seating","capacity","internet_access","internet_access/fee","internet_access/ssid","diet_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["fast food","restaurant","food"],tags:{amenity:"food_court"},name:"Food Court"},"amenity/fountain":{icon:"temaki-fountain",fields:["name","operator","height","lit"],moreFields:["covered","indoor","manufacturer"],geometry:["point","area"],tags:{amenity:"fountain"},name:"Fountain"},"amenity/fuel":{icon:"maki-fuel",fields:["name","brand","operator","address","fuel_multi","self_service"],moreFields:["opening_hours","payment_multi","building","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"fuel"},name:"Gas Station"},"amenity/grave_yard":{icon:"maki-cemetery",fields:["religion","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{amenity:"grave_yard"},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:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],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"],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:["takeaway","delivery","drive_through","internet_access","internet_access/fee","internet_access/ssid","diet_multi","payment_multi","website","phone","email","fax","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","opening_hours","outdoor_seating","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],tags:{amenity:"internet_cafe"},name:"Internet Cafe"},"amenity/karaoke":{icon:"maki-karaoke",fields:["name","operator","address","building_area","opening_hours","website"],moreFields:["air_conditioning","email","fax","payment_multi","phone","smoking","wheelchair"],geometry:["point","area"],terms:["karaoke club","karaoke room","karaoke television","KTV"],tags:{amenity:"karaoke_box"},name:"Karaoke Box"},"amenity/kindergarten":{icon:"maki-school",fields:["name","operator","address","phone","preschool"],moreFields:["email","fax","opening_hours","payment_multi","website","wheelchair"],geometry:["point","area"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool/Kindergarten Grounds"},"amenity/language_school":{icon:"maki-school",fields:["name","operator","operator/type","address","building_area","opening_hours","language_multi"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["esl"],tags:{amenity:"language_school"},name:"Language School"},"amenity/letter_box":{icon:"temaki-letter_box",fields:["post","access_simple","collection_times","height"],moreFields:["covered","indoor","lit","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","email","fax","opening_hours","payment_multi","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["book"],tags:{amenity:"library"},name:"Library"},"amenity/love_hotel":{icon:"maki-heart",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["smoking","payment_multi","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"love_hotel"},name:"Love Hotel"},"amenity/marketplace":{icon:"maki-shop",fields:["name","operator","address","building","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"marketplace"},name:"Marketplace"},"amenity/monastery":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area"],moreFields:["website","phone","email","fax","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","monastery","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"monastery"},name:"Monastery Grounds"},"amenity/money_transfer":{icon:"maki-bank",fields:["name","brand","address","building_area","payment_multi","currency_multi"],moreFields:["opening_hours","website","phone","email","fax","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:"maki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","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","smoking"],moreFields:["air_conditioning","payment_multi","website","phone","email","fax","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:["access_simple","ref"],geometry:["vertex"],tags:{amenity:"parking_entrance"},name:"Parking Garage Entrance/Exit"},"amenity/parking_space":{fields:["capacity"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"parking_space"},matchScore:0.95,name:"Parking Space"},"amenity/parking":{icon:"maki-car",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:["point","vertex","area"],tags:{amenity:"parking"},terms:["automobile parking","car lot","car parking","rv parking","truck parking","vehicle parking"],name:"Parking Lot"},"amenity/parking/multi-storey":{icon:"maki-car",fields:["name","{amenity/parking}","building"],moreFields:["{amenity/parking}","levels","height"],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"],matchScore:1.05,name:"Multilevel Parking Garage"},"amenity/parking/park_ride":{icon:"maki-car",geometry:["point","vertex","area"],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"],name:"Park & Ride Lot"},"amenity/parking/underground":{icon:"maki-car",fields:["{amenity/parking}","layer"],geometry:["point","vertex","area"],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"],matchScore:1.05,name:"Underground Parking"},"amenity/payment_centre":{icon:"maki-bank",fields:["name","brand","address","building_area","opening_hours","payment_multi"],moreFields:["currency_multi","website","phone","email","fax","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:["currency_multi","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","drive_through","dispensing"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","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"],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","email","fax","internet_access","internet_access/ssid","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","fee","payment_multi_fee","website","phone","email","fax","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","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","internet_access","internet_access/fee","internet_access/ssid","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","height","indoor","manufacturer","wheelchair"],geometry:["point","vertex"],tags:{amenity:"post_box"},terms:["letter drop","mail box","package drop","post box","postal box"],name:"Mailbox"},"amenity/post_depot":{icon:"fas-mail-bulk",fields:["name","operator","address","building_area","phone"],moreFields:["email","fax","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:["email","fax","internet_access","internet_access/fee","internet_access/ssid","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:["payment_multi","website","phone","email","fax","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:["website","phone","email","fax","wheelchair"],geometry:["point","area"],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","diet_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","microbrewery","outdoor_seating","payment_multi","phone","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","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:["wheelchair","location","address","access_simple","brand","email","phone"],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","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","fee","payment_multi_fee","website","phone","email","fax","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","manufacturer","material"],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/restaurant":{icon:"maki-restaurant",fields:["name","cuisine","address","building_area","opening_hours","phone"],moreFields:["air_conditioning","bar","brewery","capacity","delivery","diet_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","microbrewery","not/name","outdoor_seating","reservation","smoking","stars","takeaway","website","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:"fas-fish",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:"maki-school",fields:["name","operator","operator/type","address","religion","denomination","website"],moreFields:["charge_fee","email","fax","fee","internet_access","internet_access/ssid","phone","polling_station","wheelchair"],geometry:["point","area"],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:["lit","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:"maki-shelter",fields:["name","operator","building_area"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"lean_to"},name:"Lean-To"},"amenity/shelter/picnic_shelter":{icon:"maki-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:"maki-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:"fas-shower",fields:["opening_hours","access_simple","fee","payment_multi_fee","charge_fee","supervised","building_area","wheelchair"],moreFields:["address","operator","gender"],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:["lit","wheelchair","covered"],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","email","fax","internet_access","internet_access/fee","internet_access/ssid","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:["email","fax","internet_access","internet_access/fee","internet_access/ssid","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"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["recording","radio","television"],tags:{amenity:"studio"},name:"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","lit","wheelchair"],geometry:["point","vertex"],tags:{amenity:"telephone"},terms:["phone"],name:"Telephone"},"amenity/theatre":{icon:"maki-theatre",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","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","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","address","building_area"],moreFields:["email","fax","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],terms:["village","city","government","courthouse","municipal"],tags:{amenity:"townhall"},name:"Town Hall"},"amenity/toy_library":{icon:"fas-chess-knight",fields:["operator","address","building_area","opening_hours"],moreFields:["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:["point","area"],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","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","operator","payment_multi","currency_multi"],moreFields:["brand","covered","height","indoor","manufacturer"],geometry:["point"],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"],terms:["bottle return"],tags:{amenity:"vending_machine",vending:"bottle_return"},reference:{key:"vending",value:"bottle_return"},name:"Bottle Return Machine"},"amenity/vending_machine/cigarettes":{icon:"temaki-vending_machine",geometry:["point"],terms:["cigarette"],tags:{amenity:"vending_machine",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},name:"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{icon:"temaki-vending_machine",geometry:["point"],terms:["coffee"],tags:{amenity:"vending_machine",vending:"coffee"},reference:{key:"vending",value:"coffee"},name:"Coffee Vending Machine"},"amenity/vending_machine/condoms":{icon:"temaki-vending_machine",geometry:["point"],terms:["condom"],tags:{amenity:"vending_machine",vending:"condoms"},reference:{key:"vending",value:"condoms"},name:"Condom Vending Machine"},"amenity/vending_machine/drinks":{icon:"temaki-vending_machine",geometry:["point"],terms:["drink","soda","beverage","juice","pop"],tags:{amenity:"vending_machine",vending:"drinks"},reference:{key:"vending",value:"drinks"},name:"Drink Vending Machine"},"amenity/vending_machine/electronics":{icon:"temaki-vending_machine",geometry:["point"],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_machine",geometry:["point"],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_machine",fields:["{amenity/vending_machine}"],geometry:["point"],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_machine",geometry:["point"],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"],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"],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_machine",geometry:["point"],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/newspapers":{icon:"far-newspaper",fields:["vending","operator","fee","payment_multi_fee","charge_fee","currency_multi"],geometry:["point"],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_machine",fields:["vending","operator","payment_multi","currency_multi"],geometry:["point"],terms:["mail","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_machine",fields:["vending","operator"],geometry:["point"],terms:["amazon","locker","mail","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_machine",geometry:["point"],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_machine",geometry:["point"],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_machine",geometry:["point"],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"],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","fee","payment_multi_fee","website","phone","email","fax","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","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","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","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","fee","payment_multi_fee","charge_fee","opening_hours"],geometry:["area","vertex","point"],tags:{amenity:"water_point"},name:"RV Drinking Water"},"amenity/watering_place":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi_fee","charge_fee","opening_hours"],geometry:["area","vertex","point"],tags:{amenity:"watering_place"},name:"Animal Watering Place"},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 Surface"},"attraction/amusement_ride":{icon:"maki-amusement-park",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"],geometry:["point"],terms:["ferris wheel","theme park","amusement ride"],tags:{attraction:"big_wheel"},name:"Big Wheel"},"attraction/bumper_car":{icon:"maki-car",geometry:["point","area"],terms:["theme park","dodgem cars","autoscooter"],tags:{attraction:"bumper_car"},name:"Bumper Car"},"attraction/bungee_jumping":{icon:"maki-pitch",fields:["{attraction}","height"],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"],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"],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"],geometry:["point","area"],terms:["theme park","amusement ride","gondola","tower","big drop"],tags:{attraction:"drop_tower"},name:"Drop Tower"},"attraction/maze":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride","labyrinth"],tags:{attraction:"maze"},name:"Maze"},"attraction/pirate_ship":{icon:"maki-danger",geometry:["point"],terms:["theme park","carnival ride","amusement ride"],tags:{attraction:"pirate_ship"},name:"Pirate Ship"},"attraction/river_rafting":{icon:"maki-ferry",geometry:["point","line"],terms:["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],tags:{attraction:"river_rafting"},name:"River Rafting"},"attraction/roller_coaster":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride"],tags:{attraction:"roller_coaster"},name:"Roller Coaster"},"attraction/summer_toboggan":{icon:"temaki-sledding",geometry:["line"],terms:["alpine slide","mountain coaster"],tags:{attraction:"summer_toboggan"},name:"Summer Toboggan"},"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:"fas-swimmer",fields:["{attraction}","height"],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"],name:"Barrier",matchScore:0.4},"barrier/entrance":{icon:"maki-entrance-alt1",geometry:["vertex"],tags:{barrier:"entrance"},name:"Entrance",searchable:false},"barrier/block":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex"],tags:{barrier:"block"},name:"Block"},"barrier/bollard":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex","line"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"maki-roadblock",fields:["access","building_area"],moreFields:["address","website","phone","email","fax"],geometry:["vertex","area"],tags:{barrier:"border_control"},name:"Border Control"},"barrier/cattle_grid":{icon:"maki-barrier",geometry:["vertex"],tags:{barrier:"cattle_grid"},name:"Cattle Grid"},"barrier/chain":{icon:"maki-barrier",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"},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:"maki-barrier",fields:["access","opening_hours"],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-car_wash",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:"maki-barrier",fields:["access"],geometry:["vertex"],tags:{barrier:"kissing_gate"},name:"Kissing Gate"},"barrier/lift_gate":{icon:"maki-roadblock",fields:["access"],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"],geometry:["vertex"],tags:{barrier:"stile"},name:"Stile"},"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:"maki-roadblock",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},"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:["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","levels","height","address"],moreFields:["architect","building/levels/underground","building/material","not/name","layer","operator","roof/colour","smoking","wheelchair"],geometry:["area"],tags:{building:"*"},matchScore:0.6,terms:[],name:"Building"},"building/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:"maki-farm",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:"maki-home",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:"maki-place-of-worship",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:"maki-place-of-worship",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:"maki-building",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:"maki-building",geometry:["area"],tags:{building:"hospital"},matchScore:0.5,name:"Hospital Building"},"building/hotel":{icon:"maki-building",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:"maki-home",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:"maki-building",geometry:["area"],terms:["kindergarden","pre-school"],tags:{building:"kindergarten"},matchScore:0.5,name:"Preschool/Kindergarten Building"},"building/mosque":{icon:"maki-place-of-worship",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:"maki-building",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-home",geometry:["area"],tags:{building:"service"},matchScore:0.5,name:"Service Building"},"building/shed":{icon:"maki-home",geometry:["area"],tags:{building:"shed"},matchScore:0.5,name:"Shed"},"building/stable":{icon:"maki-horse-riding",geometry:["area"],tags:{building:"stable"},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:"maki-building",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:"maki-building",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","height_building","email","fax","internet_access","internet_access/fee","internet_access/ssid","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","height_building","email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","product","website","wheelchair"],geometry:["point","area"],tags:{craft:"*"},terms:[],name:"Craft"},"craft/jeweler":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"jeweler"},reference:{key:"shop",value:"jewelry"},name:"Jeweler",searchable:false,replacement:"shop/jewelry"},"craft/locksmith":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"locksmith"},reference:{key:"shop",value:"locksmith"},name:"Locksmith",searchable:false},"craft/optician":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"optician"},reference:{key:"shop",value:"optician"},name:"Optician",searchable:false,replacement:"shop/optician"},"craft/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],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:"maki-art-gallery",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-tools",geometry:["point","area"],tags:{craft:"blacksmith"},name:"Blacksmith"},"craft/boatbuilder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"boatbuilder"},matchScore:0.4,name:"Boat Builder"},"craft/bookbinder":{icon:"maki-library",geometry:["point","area"],terms:["book repair"],tags:{craft:"bookbinder"},name:"Bookbinder"},"craft/brewery":{icon:"temaki-storage_tank",fields:["{craft}","product"],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/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_tank",fields:["{craft}","product"],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:"maki-clothing-store",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:"maki-art-gallery",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:"maki-art-gallery",geometry:["point","area"],terms:["ceramic"],tags:{craft:"pottery"},name:"Pottery"},"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",geometry:["point","area"],tags:{craft:"winery"},name:"Winery"},"emergency/designated":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"designated"},terms:[],name:"Emergency Access Designated",searchable:false,matchScore:0.01},"emergency/destination":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"destination"},terms:[],name:"Emergency Access Destination",searchable:false,matchScore:0.01},"emergency/no":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"no"},terms:[],name:"Emergency Access No",searchable:false,matchScore:0.01},"emergency/official":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"official"},terms:[],name:"Emergency Access Official",searchable:false,matchScore:0.01},"emergency/private":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"private"},terms:[],name:"Emergency Access Private",searchable:false,matchScore:0.01},"emergency/yes":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"yes"},terms:[],name:"Emergency Access Yes",searchable:false,matchScore:0.01},"emergency/ambulance_station":{icon:"fas-ambulance",fields:["name","operator","building_area","address"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"ambulance_station"},name:"Ambulance Station"},"emergency/defibrillator":{icon:"maki-defibrillator",fields:["indoor","ref","operator"],geometry:["point","vertex"],terms:["AED"],tags:{emergency:"defibrillator"},name:"Defibrillator"},"emergency/fire_alarm":{icon:"fas-bell",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_alarm_box"},name:"Fire Alarm Call Box"},"emergency/fire_extinguisher":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_extinguisher"},name:"Fire Extinguisher"},"emergency/fire_hose":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],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/pressure","fire_hydrant/diameter","water_volume","survey/date"],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"],geometry:["point","vertex"],terms:["bandage","first aid","med","med kit","medic*","medkit"],tags:{emergency:"first_aid_kit"},name:"First Aid Kit"},"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"],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",geometry:["vertex"],terms:["entrance","exit","door"],tags:{entrance:"*"},fields:["entrance","door","access_simple","address"],matchScore:0.8,name:"Entrance/Exit"},ford:{icon:"temaki-pedestrian",fields:["name","access","seasonal"],geometry:["vertex"],tags:{ford:"yes"},name:"Ford"},"golf/bunker":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"bunker",natural:"sand"},terms:["hazard","bunker"],reference:{key:"golf",value:"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"},reference:{key:"golf",value:"cartpath"},name:"Golf Cartpath"},"golf/driving_range":{icon:"maki-golf",fields:["name","capacity"],geometry:["area"],tags:{golf:"driving_range",landuse:"grass"},reference:{key:"golf",value:"driving_range"},name:"Driving Range"},"golf/fairway":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"fairway",landuse:"grass"},reference:{key:"golf",value:"fairway"},name:"Fairway"},"golf/green":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"green",landuse:"grass",leisure:"pitch",sport:"golf"},reference:{key:"golf",value:"green"},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",natural:"water"},reference:{key:"golf",value:"lateral_water_hazard"},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"},reference:{key:"golf",value:"path"},name:"Golf Walking Path"},"golf/rough":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"rough",landuse:"grass"},reference:{key:"golf",value:"rough"},name:"Rough"},"golf/tee":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"tee",landuse:"grass"},terms:["teeing ground"],reference:{key:"golf",value:"tee"},name:"Tee Box"},"golf/water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"water_hazard",natural:"water"},reference:{key:"golf",value:"water_hazard"},name:"Water Hazard"},healthcare:{icon:"maki-hospital",fields:["name","healthcare","operator","healthcare/speciality","address","building_area"],moreFields:["building/levels_building","height_building","opening_hours","payment_multi","brand","website","phone","email","fax","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"],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",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",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/crossing/zebra":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"highway/crossing/marked-raised":{icon:"temaki-pedestrian",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",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:["bike path","bicyle path"],matchScore:0.9,name:"Cycle Path"},"highway/cycleway/crossing":{icon:"fas-biking",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":{icon:"fas-biking",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"],matchScore:0.95,name:"Cycle & Foot Path"},"highway/cycleway/crossing/marked":{icon:"fas-biking",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"],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"],name:"Unmarked Cycle Crossing"},"highway/elevator":{icon:"temaki-elevator",fields:["access_simple","opening_hours","maxweight","ref","wheelchair"],moreFields:["maxheight"],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"},matchScore:0.9,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"},matchScore:0.95,searchable:false,name:"Pedestrian Crossing"},"highway/footway/zebra-raised":{icon:"temaki-pedestrian",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"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/footway/zebra":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra"},reference:{key:"footway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"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",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",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"],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"],geometry:["line"],tags:{highway:"motorway_link"},addTags:{highway:"motorway_link",oneway:"yes"},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"],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","horse_scale","lit","maxweight_bridge","mtb/scale","mtb/scale/uphill","mtb/scale/imba","not/name","ref","sac_scale","smoothness","stroller","trail_visibility","wheelchair"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"path"},name:"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/ref_oneway","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","oneway/bicycle","ref_road_number","smoothness","toll","trolley_wire"],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"],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:["point","line","area"],tags:{highway:"raceway"},addTags:{highway:"raceway",sport:"motor"},terms:["auto*","formula one","kart","motocross","nascar","race*","track"],name:"Racetrack (Motorsport)"},"highway/residential":{icon:"iD-highway-residential",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","flood_prone","incline","junction_line","lit","oneway/bicycle","maxheight","maxspeed/advisory","maxweight_bridge","not/name","smoothness","trolley_wire"],geometry:["line"],tags:{highway:"residential"},terms:["road","street"],name:"Residential Road"},"highway/rest_area":{icon:"maki-car",fields:["name","operator","opening_hours"],moreFields:["address","website","phone","email","fax","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"],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","handrail","step_count","surface","lit","width"],moreFields:["covered","dog","indoor","stroller","wheelchair"],geometry:["line"],tags:{highway:"steps"},terms:["stairs","staircase","stairway"],name:"Steps"},"highway/steps/conveying":{icon:"maki-entrance",fields:["name","incline_steps","conveying","access_simple","lit","width","handrail","step_count"],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-bulb",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/uphill","mtb/scale/imba","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:["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","minspeed","maxweight_bridge","not/name","smoothness","toll"],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"],geometry:["point","vertex","line","area"],tags:{historic:"*"},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:["material"],geometry:["point","vertex"],tags:{historic:"boundary_stone"},name:"Boundary Stone"},"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:["website"],geometry:["point","vertex","area"],terms:["dedicatory","epitaph","remember","remembrance","memory","monument","stolperstein"],tags:{historic:"memorial"},name:"Memorial"},"historic/memorial/plaque":{icon:"maki-monument",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:["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:["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:["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/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/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/fee","internet_access/ssid"],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"},"junction/circular":{geometry:["vertex","line"],fields:["name"],tags:{junction:"circular"},name:"Traffic Circle",searchable:false},"junction/jughandle":{geometry:["line"],fields:["name"],tags:{junction:"jughandle"},name:"Jughandle",searchable:false},"junction/roundabout":{geometry:["vertex","line"],fields:["name"],tags:{junction:"roundabout"},name:"Roundabout",searchable:false},"landuse/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{landuse:"basin"},name:"Basin",searchable:false},"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","website","phone","email","fax"],tags:{landuse:"allotments"},terms:["allotment","garden"],name:"Community Garden"},"landuse/aquaculture":{icon:"maki-aquarium",fields:["name","operator","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"aquaculture"},terms:["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],name:"Aquaculture"},"landuse/brownfield":{geometry:["area"],fields:["name"],tags:{landuse:"brownfield"},terms:[],matchScore:0.9,name:"Brownfield"},"landuse/cemetery":{icon:"maki-cemetery",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"cemetery"},terms:[],name:"Cemetery"},"landuse/churchyard":{icon:"maki-religious-christian",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"churchyard"},terms:[],name:"Churchyard"},"landuse/commercial":{icon:"maki-suitcase",fields:["name"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"commercial"},terms:[],matchScore:0.9,name:"Commercial Area"},"landuse/construction":{icon:"temaki-tools",fields:["name","construction","operator","opening_date","check_date","note"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"construction"},terms:[],name:"Construction"},"landuse/farmland":{icon:"fas-tractor",fields:["name","operator","crop","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"farmland"},terms:["crop","grow","plant"],name:"Farmland"},"landuse/farmyard":{icon:"maki-farm",fields:["name","operator","crop"],moreFields:["address","website","phone","email","fax"],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","website","phone","email","fax"],geometry:["area"],tags:{landuse:"forest"},terms:["cut","forest","forestry","lumber","silviculture","tree"],name:"Managed Forest"},"landuse/garages":{icon:"fas-warehouse",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"garages"},terms:[],name:"Garage Landuse"},"landuse/grass":{geometry:["area"],tags:{landuse:"grass"},terms:[],name:"Grass"},"landuse/greenfield":{geometry:["area"],fields:["name"],tags:{landuse:"greenfield"},terms:[],matchScore:0.9,name:"Greenfield"},"landuse/greenhouse_horticulture":{icon:"maki-garden",fields:["name","operator"],moreFields:["address","website","phone","email","fax"],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","website","phone","email","fax"],geometry:["area"],terms:["boat"],tags:{landuse:"harbour"},name:"Harbor"},"landuse/industrial":{icon:"maki-industry",fields:["name","industrial"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"industrial"},terms:[],matchScore:0.9,name:"Industrial Area"},"landuse/industrial/scrap_yard":{icon:"maki-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":{geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],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","website","phone","email","fax"],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","website","phone","email","fax"],geometry:["area"],tags:{landuse:"plant_nursery"},terms:["flower","garden","grow","vivero"],name:"Plant Nursery"},"landuse/quarry":{geometry:["area"],fields:["name","operator","resource"],moreFields:["address","website","phone","email","fax"],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","website","phone","email","fax"],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","website","phone","email","fax"],tags:{landuse:"religious"},terms:[],name:"Religious Area"},"landuse/residential":{icon:"maki-building",geometry:["area"],tags:{landuse:"residential"},terms:[],matchScore:0.9,name:"Residential Area"},"landuse/residential/apartments":{icon:"maki-building",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","website","phone","email","fax"],tags:{landuse:"retail"},matchScore:0.9,name:"Retail Area"},"landuse/vineyard":{fields:["name","operator","grape_variety"],moreFields:["address","website","phone","email","fax"],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:["address","access_simple","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","opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["pay-to-play games","video games","driving simulators","pinball machines"],tags:{leisure:"amusement_arcade"},name:"Amusement Arcade"},"leisure/bandstand":{icon:"maki-music",fields:["name","building_area","operator"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bandstand"},name:"Bandstand"},"leisure/beach_resort":{icon:"maki-beach",fields:["name","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["smoking","website","phone","email","fax"],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":{geometry:["point","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","opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["bowling center"],tags:{leisure:"bowling_alley"},name:"Bowling Alley"},"leisure/common":{icon:"temaki-pedestrian",fields:["name"],moreFields:["website"],geometry:["point","area"],terms:["open space"],tags:{leisure:"common"},name:"Common"},"leisure/dance":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["ballroom","jive","swing","tango","waltz"],tags:{leisure:"dance"},name:"Dance Hall"},"leisure/dancing_school":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],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","lit","phone","website","wheelchair"],geometry:["point","area"],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"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:[],tags:{leisure:"dog_park"},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","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:"maki-fire-station",fields:["access_simple"],geometry:["point","area"],tags:{leisure:"firepit"},terms:["fireplace","campfire"],name:"Firepit"},"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"],moreFields:["charge_fee","opening_hours","fee","payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"fitness_centre"},terms:["health","gym","leisure","studio"],name:"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{icon:"maki-pitch",geometry:["point","area"],terms:["studio","asanas","modern yoga","meditation"],tags:{leisure:"fitness_centre",sport:"yoga"},reference:{key:"sport",value:"yoga"},name:"Yoga Studio"},"leisure/fitness_station":{icon:"maki-pitch",fields:["fitness_station","ref"],moreFields:["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:["website","phone","email","fax"],geometry:["point","vertex","area"],tags:{leisure:"garden"},name:"Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],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","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:["opening_hours","payment_multi","website","phone","email","fax"],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:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],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","internet_access","internet_access/fee","internet_access/ssid","seamark/type","website","phone","email","fax"],geometry:["point","vertex","area"],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:["website","phone","email","fax"],geometry:["point","area"],terms:["crazy golf","mini golf","putt-putt"],tags:{leisure:"miniature_golf"},name:"Miniature Golf"},"leisure/nature_reserve":{icon:"maki-park",geometry:["point","area"],fields:["name","operator","address","opening_hours"],moreFields:["dog","website","phone","email","fax"],tags:{leisure:"nature_reserve"},terms:["protected","wildlife"],name:"Nature Reserve"},"leisure/outdoor_seating":{icon:"maki-picnic-site",geometry:["point","area"],fields:["name","operator"],terms:["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],tags:{leisure:"outdoor_seating"},name:"Outdoor Seating Area"},"leisure/park":{icon:"maki-park",fields:["name","operator","address","opening_hours"],moreFields:["dog","smoking","website","phone","email","fax"],geometry:["point","area"],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"],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","indoor","payment_multi_fee"],geometry:["point","area"],tags:{leisure:"pitch"},terms:["field"],name:"Sport Pitch"},"leisure/pitch/american_football":{icon:"maki-american-football",geometry:["point","area"],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:["point","area"],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:["point","area"],tags:{leisure:"pitch",sport:"badminton"},reference:{key:"sport",value:"badminton"},terms:[],name:"Badminton Court"},"leisure/pitch/baseball":{icon:"maki-baseball",geometry:["point","area"],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:["point","area"],tags:{leisure:"pitch",sport:"basketball"},reference:{key:"sport",value:"basketball"},terms:[],name:"Basketball Court"},"leisure/pitch/beachvolleyball":{icon:"maki-volleyball",geometry:["point","area"],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:["point","area"],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:["point","area"],tags:{leisure:"pitch",sport:"bowls"},reference:{key:"sport",value:"bowls"},terms:[],name:"Bowling Green"},"leisure/pitch/cricket":{icon:"maki-cricket",geometry:["point","area"],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:["point","area"],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:["point","area"],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:["point","area"],tags:{leisure:"pitch",sport:"horseshoes"},reference:{key:"sport",value:"horseshoes"},terms:["horse shoes"],name:"Horseshoes Pit"},"leisure/pitch/netball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"netball"},reference:{key:"sport",value:"netball"},terms:[],name:"Netball Court"},"leisure/pitch/rugby_league":{icon:"maki-american-football",geometry:["point","area"],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:["point","area"],tags:{leisure:"pitch",sport:"rugby_union"},reference:{key:"sport",value:"rugby_union"},terms:[],name:"Rugby Union Field"},"leisure/pitch/shuffleboard":{icon:"temaki-shuffleboard",geometry:["point","area"],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:["point","area"],tags:{leisure:"pitch",sport:"skateboard"},reference:{key:"sport",value:"skateboard"},terms:[],name:"Skate Park"},"leisure/pitch/soccer":{icon:"maki-soccer",geometry:["point","area"],tags:{leisure:"pitch",sport:"soccer"},reference:{key:"sport",value:"soccer"},terms:["football"],name:"Soccer Field"},"leisure/pitch/softball":{icon:"maki-baseball",geometry:["point","area"],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:["point","area"],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:["point","area"],tags:{leisure:"pitch",sport:"tennis"},reference:{key:"sport",value:"tennis"},terms:[],name:"Tennis Court"},"leisure/pitch/volleyball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"volleyball"},reference:{key:"sport",value:"volleyball"},terms:[],name:"Volleyball Court"},"leisure/playground":{icon:"maki-playground",fields:["name","operator","surface","playground/max_age","playground/min_age","access_simple"],geometry:["point","area"],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","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:["website","phone","email","fax"],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:["opening_hours","website","phone","email","fax"],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:["point","area"],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","sport","address"],moreFields:["website","phone","email","fax"],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","opening_hours","operator"],geometry:["point","area"],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","indoor"],geometry:["point","line","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:["payment_multi","brand","website","phone","email","fax"],geometry:["point","area"],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"],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:["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",matchScore:0.85},"man_made/bunker_silo":{icon:"temaki-silo",fields:["content"],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","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","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/mast":{icon:"maki-communications-tower",fields:["tower/type","tower/construction","height"],moreFields:["manufacturer","material","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"},name:"Mast"},"man_made/mast/communication":{icon:"maki-communications-tower",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:"maki-communications-tower",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:"maki-communications-tower",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:"maki-communications-tower",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"],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:["website","phone","email","fax"],geometry:["point","area"],terms:["astronomical","meteorological"],tags:{man_made:"observatory"},name:"Observatory"},"man_made/petroleum_well":{icon:"temaki-storage_tank",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-pedestrian",fields:["name","surface","floating","width","access","lit"],moreFields:["access","fishing","incline","{highway/footway}"],geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier"},name:"Pier"},"man_made/pier/floating":{icon:"temaki-pedestrian",geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier",floating:"yes"},addTags:{highway:"footway",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":{geometry:["vertex"],fields:["ref","operator","valve","location","diameter"],moreFields:["colour","manufacturer","material"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline",pipeline:"valve"},name:"Pipeline Valve"},"man_made/pumping_station":{icon:"maki-water",geometry:["point","area"],tags:{man_made:"pumping_station"},name:"Pumping Station"},"man_made/silo":{icon:"temaki-silo",fields:["crop","building_area"],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:["point","area"],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","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"],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",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-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:"tnp-2009642",fields:["name","tunnel","layer","width","length","height"],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"},"man_made/wastewater_plant":{icon:"maki-water",fields:["name","operator","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["sewage*","water treatment plant","reclamation plant"],tags:{man_made:"wastewater_plant"},name:"Wastewater Plant"},"man_made/water_tower":{icon:"maki-water",fields:["operator","height"],geometry:["point","area"],tags:{man_made:"water_tower"},name:"Water Tower"},"man_made/water_well":{icon:"maki-water",fields:["operator"],geometry:["point","area"],tags:{man_made:"water_well"},name:"Water Well"},"man_made/water_works":{icon:"maki-water",fields:["name","operator","address"],geometry:["point","area"],tags:{man_made:"water_works"},name:"Water Works"},"man_made/watermill":{icon:"maki-watermill",fields:["building_area"],geometry:["point","area"],terms:["water","wheel","mill"],tags:{man_made:"watermill"},name:"Watermill"},"man_made/windmill":{icon:"maki-windmill",fields:["building_area"],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:["website","phone","email","fax"],geometry:["point","area"],terms:["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],tags:{man_made:"works"},name:"Factory"},manhole:{icon:"maki-circle-stroked",fields:["manhole","operator","label","ref"],geometry:["point","vertex"],tags:{manhole:"*"},addTags:{man_made:"manhole",manhole:"*"},terms:["cover","hole","sewer","sewage","telecom"],name:"Manhole"},"manhole/drain":{icon:"maki-water",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"},"manhole/telecom":{icon:"maki-circle-stroked",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"telecom"},addTags:{man_made:"manhole",manhole:"telecom"},terms:["cover","phone","hole","telecom","telephone","bt"],name:"Telecom Manhole"},"military/bunker":{icon:"temaki-military",fields:["name","bunker_type","building_area"],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"],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"],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"],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":{geometry:["line"],tags:{natural:"coastline"},terms:["shore"],name:"Coastline"},"natural/fell":{geometry:["area"],tags:{natural:"fell"},terms:[],name:"Fell"},"natural/glacier":{icon:"temaki-snow",geometry:["area"],tags:{natural:"glacier"},terms:["ice","snow"],name:"Glacier"},"natural/grassland":{geometry:["area"],tags:{natural:"grassland"},terms:["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:["point","area"],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","intermittent"],geometry:["point","vertex"],tags:{natural:"spring"},terms:[],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:"maki-park",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","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"},"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"},"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"},"natural/water/wastewater":{icon:"maki-water",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:["point","area"],tags:{natural:"wood"},terms:["tree"],name:"Wood"},"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","building/levels_building","height_building","email","fax","internet_access","internet_access/fee","internet_access/ssid","not/name","operator","phone","smoking","website","wheelchair"],geometry:["point","vertex","area"],tags:{office:"*"},terms:[],name:"Office"},"office/administrative":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"administrative"},terms:[],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"},terms:[],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/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:"maki-embassy",fields:["name","diplomatic","country","target","diplomatic/services","{office}"],geometry:["point","area"],tags:{office:"diplomatic"},terms:[],name:"Diplomatic Office"},"office/diplomatic/consulate":{icon:"maki-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:"maki-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:"maki-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:"maki-suitcase",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",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/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:"maki-suitcase",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:[],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:"maki-suitcase",geometry:["point","area"],tags:{office:"research"},terms:[],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"],terms:["ski","alpine","snowboard","downhill","piste"],tags:{"piste:type":"downhill"},name:"Downhill Piste/Ski Run"},"piste/downhill/halfpipe":{icon:"fas-snowboarding",geometry:["line","area"],terms:["ski","alpine","halfpipe","half pipe","snowboard","downhill","piste"],tags:{"piste:type":"downhill",man_made:"piste:halfpipe"},name:"Halfpipe"},"piste/hike":{icon:"temaki-snow_shoeing",fields:["name","piste/type","piste/difficulty","piste/grooming_hike","oneway","lit"],geometry:["line","area"],terms:["hike","winter hiking","snowshoe","snowshoeing","piste","ski"],tags:{"piste:type":"hike"},name:"Snowshoeing or Winter Hiking Trail"},"piste/ice_skate":{icon:"fas-skating",fields:["name","piste/type","sport_ice","oneway","lit"],geometry:["line","area"],terms:["ice","skating","ski","piste"],tags:{"piste:type":"ice_skate"},name:"Ice Skating Piste"},"piste/nordic":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_nordic","piste/grooming_nordic","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","skating","piste"],tags:{"piste:type":"nordic"},name:"Nordic or Crosscountry Piste/Ski Trail"},"piste/piste":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","downhill","alpine","snowboard","skitour","ski touring","sled","luge","sleigh","sledge","ski-joring","husky","horse","winter hiking","snowshoe","snowshoeing","ice","skating"],tags:{"piste:type":"*"},name:"Winter Sport Trails"},"piste/skitour":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_skitour","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","skitour","crosscountry","ski touring","piste"],tags:{"piste:type":"skitour"},name:"Ski Touring Trail"},"piste/sled":{icon:"temaki-sledding",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","sled","luge","sleigh","sledge","piste"],tags:{"piste:type":"sled"},name:"Sled Piste"},"piste/sleigh":{icon:"fas-sleigh",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","piste","sled","luge","sleigh","sledge","ski-joring","husky","horse"],tags:{"piste:type":"sleigh"},name:"Sleigh Piste"},"place/farm":{icon:"maki-farm",geometry:["point","area"],fields:["name"],tags:{place:"farm"},name:"Farm",searchable:false},"place/city_block":{icon:"maki-triangle-stroked",fields:["name"],moreFields:["website"],geometry:["point","area"],tags:{place:"city_block"},name:"City Block"},"place/city":{icon:"maki-city",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"city"},name:"City"},"place/hamlet":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"hamlet"},name:"Hamlet"},"place/island":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"island"},name:"Island"},"place/islet":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"islet"},name:"Islet"},"place/isolated_dwelling":{icon:"maki-home",geometry:["point","area"],fields:["name"],tags:{place:"isolated_dwelling"},name:"Isolated Dwelling"},"place/locality":{icon:"maki-triangle-stroked",geometry:["point","area"],moreFields:["website"],fields:["name"],tags:{place:"locality"},name:"Locality"},"place/neighbourhood":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"neighbourhood"},terms:["neighbourhood"],name:"Neighborhood"},"place/plot":{icon:"maki-triangle-stroked",fields:["name"],geometry:["point","area"],tags:{place:"plot"},terms:["tract","land","lot","parcel"],name:"Plot"},"place/quarter":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"quarter"},terms:["boro","borough","quarter"],name:"Sub-Borough / Quarter"},"place/square":{icon:"temaki-pedestrian",geometry:["point","area"],fields:["name"],moreFields:["website"],tags:{place:"square"},name:"Square"},"place/suburb":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"suburb"},terms:["boro","borough","quarter"],name:"Borough / Suburb"},"place/town":{icon:"maki-town",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"town"},name:"Town"},"place/village":{icon:"maki-village",fields:["name","population"],moreFields:["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",fields:["height"],geometry:["point"],terms:["high 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:["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"},name:"Sandpit"},"playground/seesaw":{icon:"maki-playground",geometry:["point"],tags:{playground:"seesaw"},name:"Seesaw"},"playground/slide":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"slide"},name:"Slide"},"playground/structure":{icon:"maki-pitch",geometry:["point","area"],tags:{playground:"structure"},name:"Play Structure"},"playground/swing":{icon:"maki-playground",fields:["capacity","playground/baby","wheelchair"],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","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/sub_station":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"sub_station"},reference:{key:"power",value:"substation"},name:"Substation",searchable:false},"power/cable/underground":{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:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["hydro","solar","turbine","wind"],tags:{power:"generator"},name:"Power Generator"},"power/generator/method/photovoltaic":{icon:"fas-solar-panel",fields:["operator","generator/output/electricity","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["photovoltaic module","PV module","sunlight"],tags:{power:"generator","generator:method":"photovoltaic"},addTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"yes"},reference:{key:"generator:method",value:"photovoltaic"},name:"Solar Panel"},"power/generator/source/hydro":{icon:"temaki-power",fields:["operator","generator/method","generator/type","generator/output/electricity","ref"],moreFields:["height","manufacturer"],geometry:["point","vertex","area"],terms:["dam","generator","francis turbine","hydroelectricity","kaplan turbine","pelton turbine"],tags:{power:"generator","generator:source":"hydro"},addTags:{power:"generator","generator:source":"hydro","generator:output:electricity":"yes"},reference:{key:"generator:source",value:"hydro"},name:"Water Turbine"},"power/generator/source/nuclear":{icon:"temaki-radiation",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["fission","generator","nuclear","nuke","reactor"],tags:{power:"generator","generator:source":"nuclear","generator:method":"fission"},reference:{key:"generator:source",value:"nuclear"},name:"Nuclear Reactor"},"power/generator/source/wind":{icon:"temaki-wind_turbine",fields:["operator","generator/type","generator/output/electricity","height","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["generator","turbine","windmill","wind"],tags:{power:"generator","generator:source":"wind","generator:method":"wind_turbine"},reference:{key:"generator:source",value:"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/output/electricity","start_date"],geometry:["area"],tags:{power:"plant"},addTags:{power:"plant",landuse:"industrial"},terms:["coal","gas","generat*","hydro","nuclear","power","station"],name:"Power Station Grounds"},"power/pole":{icon:"temaki-utility_pole",fields:["ref","operator","material","line_attachment"],moreFields:["manufacturer"],geometry:["point","vertex"],tags:{power:"pole"},name:"Power Pole"},"power/substation":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"substation"},name:"Substation"},"power/switch":{icon:"temaki-power",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","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",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:"maki-rail",fields:["name","network","operator","departures_board","shelter"],moreFields:["bench","bin","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-pedestrian",fields:["ref_platform","network","operator","departures_board","surface"],moreFields:["access","covered","indoor","layer","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"},terms:["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],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"},terms:["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],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"},terms:["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],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"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],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"},terms:["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],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"},terms:["platform","public transit","public transportation","rail","track","train","transit","transportation"],searchable:false,name:"Train Stop / Platform"},"public_transport/platform/aerialway":{icon:"temaki-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-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-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-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-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-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-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-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-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:{public_transport:"station",aerialway:"yes"},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","internet_access/fee","internet_access/ssid","website","phone","email","fax","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"],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"},terms:["break","interrupt","rest","wait","interruption"],name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"temaki-pedestrian",fields:["name","ref_platform","surface","lit","shelter"],geometry:["line","area"],tags:{railway:"platform"},name:"Train Platform",searchable:false,replacement:"public_transport/platform/train"},"railway/station":{icon:"maki-rail",fields:["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","vertex","area"],tags:{railway:"station"},terms:["train station","station"],matchScore:0.95,name:"Train Station",searchable:false,replacement:"public_transport/station_train"},"railway/tram_stop":{icon:"temaki-tram",fields:["name","network","operator"],geometry:["vertex"],tags:{railway:"tram_stop"},terms:["light rail","streetcar","tram","trolley"],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"],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"},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","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":{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":{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":{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":{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","height_building","currency_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","not/name","phone","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"],terms:["oven","stove"],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"],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 Shop"},"shop/antiques":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"antiques"},name:"Antiques Shop"},"shop/appliance":{icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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-boating",geometry:["point","area"],terms:["fishing boat","jetski","motorboat","rowboat","sailboat","vessel","watercraft"],tags:{shop:"boat"},name:"Boat Store"},"shop/bookmaker":{icon:"maki-shop",geometry:["point","area"],terms:["betting","bookie"],tags:{shop:"bookmaker"},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/butcher":{icon:"fas-bacon",geometry:["point","area"],terms:["chicken","beef","lamb","meat","pork"],tags:{shop:"butcher"},name:"Butcher"},"shop/candles":{icon:"fas-burn",geometry:["point","area"],tags:{shop:"candles"},terms:["wax"],name:"Candle Shop"},"shop/cannabis":{icon:"fas-cannabis",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/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:"maki-shop",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-shop",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/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/coffee":{icon:"maki-shop",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:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics"},terms:["make-up","makeup"],name:"Cosmetics Store"},"shop/country_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store"},name:"Country Store"},"shop/craft":{icon:"fas-palette",geometry:["point","area"],tags:{shop:"craft"},terms:["art*","paint*","frame"],name:"Arts and 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/dry_cleaning":{icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{shop:"dry_cleaning"},name:"Dry Cleaner"},"shop/e-cigarette":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"e-cigarette"},terms:["electronic","vape","vaping","vapor"],name:"E-Cigarette Shop"},"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",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:"maki-shop",geometry:["point","area"],terms:["farm shop","farm stand"],tags:{shop:"farm"},name:"Produce Stand"},"shop/fashion_accessories":{icon:"maki-shop",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:"maki-shop",geometry:["point","area"],tags:{shop:"fishing"},terms:["bait","fishing line","flies","fly","lure","reel","rod","tackle"],name:"Fishing 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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",fields:["{shop}","levels"],geometry:["point","area"],tags:{shop:"kiosk"},name:"Kiosk"},"shop/kitchen":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen"},terms:["cabinets","countertops","sinks"],name:"Kitchen Design Store"},"shop/laundry":{icon:"maki-laundry",fields:["{shop}","self_service"],geometry:["point","area"],tags:{shop:"laundry"},name:"Laundry"},"shop/laundry/self_service":{icon:"maki-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:"maki-shop",geometry:["point","area"],tags:{shop:"leather"},name:"Leather Store"},"shop/lighting":{icon:"far-lightbulb",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:"maki-shop",geometry:["point","area"],tags:{shop:"lottery"},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:"maki-shop",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:"maki-bank",fields:["{shop}","currency_multi"],geometry:["point","area"],tags:{shop:"money_lender"},name:"Money Lender"},"shop/motorcycle_repair":{icon:"fas-motorcycle",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:"maki-shop",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:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker"},name:"Pawn Shop"},"shop/perfumery":{icon:"maki-shop",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"],tags:{shop:"photo"},name:"Photography Store"},"shop/printer_ink":{icon:"maki-shop",geometry:["point","area"],terms:["copier ink","fax ink","ink cartridges","toner"],tags:{shop:"printer_ink"},name:"Printer Ink Store"},"shop/pyrotechnics":{icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/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:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental"},terms:["garages"],name:"Storage Rental"},"shop/supermarket":{icon:"maki-grocery",moreFields:["diet_multi","{shop}"],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:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{shop:"tailor"},name:"Tailor"},"shop/tattoo":{icon:"maki-shop",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/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:"maki-shop",geometry:["point","area"],tags:{shop:"tobacco"},terms:["cigarettes","cigars"],name:"Tobacco Shop"},"shop/toys":{icon:"fas-space-shuttle",geometry:["point","area"],tags:{shop:"toys"},terms:["games"],name:"Toy Store"},"shop/trade":{icon:"maki-shop",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"},name:"Travel Agency"},"shop/tyres":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres"},name:"Tire Store"},"shop/vacuum_cleaner":{icon:"maki-shop",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",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:"maki-shop",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",geometry:["point","area"],tags:{shop:"wine"},name:"Wine Shop"},"telecom/data_center":{icon:"fas-server",fields:["name","ref","operator","building_area"],moreFields:["address","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:"maki-lodging",fields:["name","operator","address","building_area","internet_access","internet_access/fee","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","internet_access/ssid","phone","reservation","website","wheelchair"],geometry:["point","area"],terms:["climbing 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","height_building","email","fax","internet_access/ssid","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"apartment"},name:"Guest Apartment / Condo"},"tourism/aquarium":{icon:"maki-aquarium",fields:["name","operator","address","building_area","opening_hours"],moreFields:["charge_fee","fee","internet_access","internet_access/fee","internet_access/ssid","payment_multi_fee","smoking","website","phone","email","fax","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:["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:"maki-art-gallery",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:"maki-art-gallery",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:"fas-female",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"],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","internet_access","internet_access/fee"],moreFields:["email","fax","internet_access/ssid","phone","power_supply","reservation","sanitary_dump_station","website","wheelchair"],geometry:["point","vertex","area"],terms:["tent","rv"],tags:{tourism:"camp_site"},name:"Campground"},"tourism/caravan_site":{icon:"temaki-rv_park",fields:["name","address","capacity","sanitary_dump_station","power_supply","internet_access","internet_access/fee"],moreFields:["charge_fee","operator","fee","payment_multi_fee","internet_access/ssid","smoking","website","phone","email","fax","wheelchair","reservation"],geometry:["point","vertex","area"],terms:["Motor Home","Camper"],tags:{tourism:"caravan_site"},name:"RV Park"},"tourism/chalet":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","height_building","smoking","payment_multi","internet_access/ssid","website","phone","email","fax","wheelchair","reservation"],geometry:["point","area"],terms:["holiday","holiday cottage","holiday home","vacation","vacation home"],tags:{tourism:"chalet"},name:"Holiday Cottage"},"tourism/gallery":{icon:"maki-art-gallery",fields:["name","operator","address","building_area","opening_hours"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","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","height_building","smoking","payment_multi","internet_access/ssid","website","phone","email","fax","wheelchair","reservation"],geometry:["point","area"],tags:{tourism:"guest_house"},terms:["B&B","Bed and Breakfast"],name:"Guest House"},"tourism/hostel":{icon:"maki-lodging",fields:["{tourism/guest_house}"],moreFields:["{tourism/guest_house}"],geometry:["point","area"],tags:{tourism:"hostel"},name:"Hostel"},"tourism/hotel":{icon:"fas-concierge-bell",fields:["{tourism/motel}"],moreFields:["{tourism/motel}","stars","bar"],geometry:["point","area"],tags:{tourism:"hotel"},name:"Hotel"},"tourism/information":{icon:"maki-information",fields:["information","operator","address","building_area"],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","height_building","email","fax","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","building/levels_building","height_building","email","fax","internet_access/ssid","operator","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"motel"},name:"Motel"},"tourism/museum":{icon:"temaki-museum",fields:["name","operator","operator/type","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","charge_fee","height_building","fee","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],tags:{tourism:"museum"},name:"Museum"},"tourism/picnic_site":{icon:"maki-picnic-site",fields:["name","operator","address","access_simple","capacity"],moreFields:["charge_fee","internet_access","internet_access/fee","internet_access/ssid","smoking","fee","payment_multi_fee","phone","reservation","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:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","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:["internet_access","internet_access/fee","internet_access/ssid","address","opening_hours","website","phone","email","fax"],geometry:["point","area"],tags:{tourism:"trail_riding_station"},name:"Trail Riding Station",matchScore:2},"tourism/viewpoint":{icon:"temaki-binoculars",geometry:["point","vertex"],fields:["direction"],tags:{tourism:"viewpoint"},name:"Viewpoint"},"tourism/wilderness_hut":{icon:"maki-lodging",fields:["name","operator","address","building_area","fee","payment_multi_fee","charge_fee","fireplace"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","reservation","wheelchair"],geometry:["point","area"],terms:["wilderness hut","backcountry hut","bothy"],tags:{tourism:"wilderness_hut"},name:"Wilderness Hut"},"tourism/zoo":{icon:"temaki-zoo",fields:["name","operator","address","opening_hours","fee","charge_fee"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","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"],geometry:["relation"],tags:{type:"boundary",boundary:"administrative"},reference:{key:"boundary",value:"administrative"},name:"Administrative Boundary"},"type/enforcement":{icon:"iD-relation",fields:["name","enforcement"],geometry:["relation"],tags:{type:"enforcement"},name:"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"],geometry:["relation"],tags:{type:"route"},name:"Route"},"type/route/bicycle":{icon:"maki-bicycle",fields:["name","ref_route","network_bicycle","cycle_network","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","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","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","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","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","to","from"],moreFields:["colour","interval","opening_hours","duration","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:"maki-harbor",fields:["name","operator"],moreFields:["address","website","phone","email","fax","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","salt","tidal"],geometry:["line"],tags:{waterway:"canal"},name:"Canal"},"waterway/canal/lock":{icon:"iD-waterway-canal",fields:["name","width","lock"],moreFields:["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","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/fuel":{icon:"maki-fuel",fields:["name","operator","address","opening_hours","fuel_multi"],moreFields:["payment_multi","brand","seamark/type","building","website","phone","email","fax","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","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","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/water_point":{icon:"maki-drinking-water",geometry:["area","vertex","point"],tags:{waterway:"water_point"},name:"Marine Drinking Water"},"waterway/waterfall":{icon:"maki-waterfall",fields:["name","height","width","intermittent"],geometry:["vertex"],terms:["fall"],tags:{waterway:"waterfall"},name:"Waterfall"},"waterway/weir":{icon:"maki-dam",fields:["name","operator","height","material"],moreFields:["seamark/type"],geometry:["vertex","line"],terms:["low-head dam","low-rise dam","wier"],tags:{waterway:"weir"},name:"Weir"},"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":"en:ABN AMRO",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":"Q331688",amenity:"bank"},addTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","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:[],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/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/Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড":{name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড",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:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","name:en":"Agrani Bank Limited"},countryCodes:["bd"],terms:[],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":"en: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://pbs.twimg.com/profile_images/991552653015502848/xDR-OAbM_bigger.jpg",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",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":"en:Argenta (bank)",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":"en: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":{name:"BAC",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","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de América Central",name:"BAC",official_name:"Banco de America Central"},terms:[],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/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/MaisMillennium/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/MaisMillennium/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"},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":"en: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/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:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO",official_name:"Banco de Oro","official_name:en":"Gold Bank","official_name:es":"Banco de Oro"},countryCodes:["ph"],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":"en:Banque Internationale Arabe de Tunisie",name:"BIAT"},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"},countryCodes:["vn"],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"},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:["BMO","BMO Bank of Montreal","BMO Harris Bank","Bank of Montreal","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:["BMO","BMO Bank of Montreal","BMO Banque de Montréal","Bank of Montreal","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/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":"en: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/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/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":{name:"BPI",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",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 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 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/bancofalabella/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20pastor168x78.gif%3Bpv91c0cc0e0080a771.gif&width=100",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:en":"Sabadell Bank","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:en":"Sabadell Bank","name:es":"Banco Sabadell"},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 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://graph.facebook.com/371998329537690/picture?type=large",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 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 Nationale (Canada)":{name:"Banque Nationale (Canada)",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:"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"Banque Nationale"},countryCodes:["ca"],terms:["banque nationale du canada","national bank of canada"],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/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 Desjardins":{name:"Caisse 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:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"},countryCodes:["ca"],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":"en:Groupe Caisse d'Épargne",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",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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChina%20Construction%20Bank%20logo.svg&width=100",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":"en:Davivienda",name:"Davivienda"},terms:[],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:[],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"],terms:[],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",imageURL:"https://graph.facebook.com/eurobanksa/picture?type=large",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://pbs.twimg.com/profile_images/2620760877/6gtc0ga7q8q9srd7tjvg_bigger.jpeg",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://pbs.twimg.com/profile_images/1126552175327567874/X3D9CTSp_bigger.png",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:[],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",imageURL:"https://graph.facebook.com/HalkbankBeograd/picture?type=large",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/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://pbs.twimg.com/profile_images/735066633992065024/1b4aJQUq_bigger.jpg",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",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/Janata Bank Limited জনতা ব্যাংক লিমিটেড":{name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড",icon:"maki-bank",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":"en:Janata Bank",name:"জনতা ব্যাংক লিমিটেড","name:bn":"জনতা ব্যাংক লিমিটেড","name:en":"Janata Bank Limited"},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://pbs.twimg.com/profile_images/117198928/KBC_bigger.jpg",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/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":"en: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/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",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://pbs.twimg.com/profile_images/864061345330855936/lBp9CKv7_bigger.jpg",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","brand:wikipedia":"es:MiBanco",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/MaisMillennium/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/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/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:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank",official_name:"National Bank of Canada"},countryCodes:["ca"],terms:[],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"},countryCodes:["us"],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"},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/473816917182930946/kWDoDGQx_bigger.jpeg",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/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/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/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 Río",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/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/Sonali Bank":{name:"Sonali Bank",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:"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"Sonali Bank"},countryCodes:["bd"],terms:["sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],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/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/StanbicBankGhana/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/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/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"},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",geometry:["point","area"],tags:{"brand:wikidata":"Q18636687",amenity:"bank"},addTags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q18636687","brand:wikipedia":"en:United Industrial Bank",name:"UIB"},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",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://graph.facebook.com/bankatunited/picture?type=large",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 (WestVirginia)":{name:"United Bank (WestVirginia)",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/Vijaya Bank":{name:"Vijaya Bank",icon:"maki-bank",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/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://pbs.twimg.com/profile_images/829803606291255300/QT18JzGl_bigger.jpg",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"},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"},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"},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","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","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/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"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Приднестровский Сбербанк":{name:"Приднестровский Сбербанк",icon:"maki-bank",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","ua"],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:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval","name:ru":"Райффайзен Банк Аваль"},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",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/1058027651502366720/Pi8dYujA_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",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",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://pbs.twimg.com/profile_images/617953199421440000/TlmMJUwj_bigger.jpg",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",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",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",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",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",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",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20Saderat%20Iran%20logo.png&width=100",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20maskan.jpg&width=100",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",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",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",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",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",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",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:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"অগ্রণী ব্যাংক লিমিটেড","name:en":"Agrani Bank"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/গ্রামীণ ব্যাংক":{name:"গ্রামীণ ব্যাংক",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q188567",amenity:"bank"},addTags:{amenity:"bank",brand:"গ্রামীণ ব্যাংক","brand:wikidata":"Q188567","brand:wikipedia":"en:Grameen Bank",name:"গ্রামীণ ব্যাংক","name:en":"Grameen Bank"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/বাংলাদেশ কৃষি ব্যাংক":{name:"বাংলাদেশ কৃষি ব্যাংক",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q16345932",amenity:"bank"},addTags:{amenity:"bank",brand:"বাংলাদেশ কৃষি ব্যাংক","brand:wikidata":"Q16345932","brand:wikipedia":"en:Bangladesh Krishi Bank",name:"বাংলাদেশ কৃষি ব্যাংক","name:en":"Bangladesh Krishi Bank"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงเทพ":{name:"ธนาคารกรุงเทพ",icon:"maki-bank",imageURL:"https://graph.facebook.com/371998329537690/picture?type=large",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://pbs.twimg.com/profile_images/1100959964040814599/Wv9V7iMd_bigger.png",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://pbs.twimg.com/profile_images/1162922250091167744/3JZpBOQr_bigger.jpg",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",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://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:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"},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:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/上海商業儲蓄銀行":{name:"上海商業儲蓄銀行",icon:"maki-bank",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%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",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:"中信银行"},countryCodes:["cn"],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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChina%20Construction%20Bank%20logo.svg&width=100",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",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPostal%20Savings%20Bank%20of%20China%20Logo.svg&width=100",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",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20of%20Communications%20Logo.svg&width=100",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",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",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",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":"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",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",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",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:wikidata":"Q6297774","brand:wikipedia":"en:Joyo Bank",name:"常陽銀行"},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",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":"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",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",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",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",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",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",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":"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":"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",geometry:["point","area"],tags:{"brand:wikidata":"Q7499501",amenity:"bank"},addTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka 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%2FKB%20logo.svg&width=100",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",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",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://pbs.twimg.com/profile_images/2838394455/1686ad262e3d37918e0830b9479d6aea_bigger.jpeg",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://pbs.twimg.com/profile_images/894461767065128960/SK5wN3DO_bigger.jpg",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:"maki-bicycle",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:"maki-bicycle",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:"maki-bicycle",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:"maki-bicycle",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:"maki-bicycle",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/bicycle_rental/nextbike":{name:"nextbike",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/nextbike/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q2351279",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"nextbike","brand:wikidata":"Q2351279","brand:wikipedia":"de:Nextbike",name:"nextbike"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/CADECA":{name:"CADECA",icon:"maki-bank",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:"maki-bank",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 Coffe Shop":{name:"Beck's Coffe 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 Coffe Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:Beck's Coffe Shop",cuisine:"coffee_shop",name:"Beck's Coffe Shop",takeaway:"yes"},countryCodes:["jp"],terms:[],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://pbs.twimg.com/profile_images/705857382715293696/SEQJftR7_bigger.jpg",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/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/Bridgehead":{name:"Bridgehead",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/1112740662041030656/nX5CaG2O_bigger.png",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 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/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",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:website":"http://www.franscafe.com.br","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",takeaway:"yes"},countryCodes:["br"],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/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/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/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/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/Даблби":{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":"Chocolate",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":"スターバックス",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",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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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/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/Circuit électrique":{name:"Circuit électrique",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/lecircuitelectrique/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q64969699",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Circuit électrique","brand:wikidata":"Q64969699",name:"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"],terms:[],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/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/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/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://graph.facebook.com/cinemaxxtheater/picture?type=large",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/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/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/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/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 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/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/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/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",imageURL:"https://graph.facebook.com/thelittleclinic/picture?type=large",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/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/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/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/Boston Market":{name:"Boston Market",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BostonMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q603617",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american",name:"Boston Market",takeaway:"yes"},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 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/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:["gb","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:website":"https://www.cinnabon.com/","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:[],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/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 Pizza":{name:"Domino's Pizza",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 Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza",short_name:"Domino's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},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"},addTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee",name:"Dunkin' Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["dunkin doughnuts"],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/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/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/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/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/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/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/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/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/Hot Dog on a Stick":{name:"Hot Dog on a Stick",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HotDogonaStick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5909922",amenity:"fast_food"},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"},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/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/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",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/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/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/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/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/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/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/Num Pang":{name:"Num Pang",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NumPangKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62079702",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian, sandwich",name:"Num Pang",takeaway:"yes"},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/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"},addTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",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/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 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/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",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gb","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/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/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/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":"en:St-Hubert",cuisine:"chicken;barbecue",name:"St-Hubert Express",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca"],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/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/TCBY":{name:"TCBY",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tcby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669631",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"},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/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/Ted's Hot Dogs":{name:"Ted's Hot Dogs",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TedsHotDogs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692930",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Ted's Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"sausage",name:"Ted's Hot Dogs",takeaway:"yes"},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"},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/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":"en:Groupe Valentine Inc.",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/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/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/Wienerschnitzel":{name:"Wienerschnitzel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Wienerschnitzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324679",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"},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/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/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/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 Pizza","brand:ru":"Домино'c Пицца","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c Пицца","name:en":"Domino's Pizza","name:ru":"Домино'c Пицца",short_name:"Домино'c","short_name:en":"Domino's","short_name:ru":"Домино'c",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],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/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/adhatzemexpress/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/1125940338793693184/GAXNsHP4_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/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 Pizza","brand:ja":"ドミノ・ピザ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ・ピザ","name:en":"Domino's Pizza","name:ja":"ドミノ・ピザ",short_name:"ドミノ","short_name:en":"Domino's","short_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/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/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",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/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"],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"},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/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/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/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"},countryCodes:["es"],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"},countryCodes:["es","pt"],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:{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/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/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/circlekireland/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/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/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/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:[],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/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"},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/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"],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",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://pbs.twimg.com/profile_images/918945400538714112/bRGd_5pv_bigger.jpg",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/684702839143317504/DqCgzXbW_bigger.png",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/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/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/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",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",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/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"},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/115786179112919/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:["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/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"},terms:["qt"],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/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/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:[],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/Tesco":{name:"Tesco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q17145596",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",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/Topaz":{name:"Topaz",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1039514449244114945/evpJUxKM_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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUSA%20Gasoline%20Logo.svg&width=100",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/190502784374269/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"},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/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/Авіас":{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",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/hospital/Select Specialty Hospital":{name:"Select Specialty Hospital",icon:"maki-hospital",geometry:["point","area"],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:["point","area"],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:["point","area"],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/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/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/Yogen Früz":{name:"Yogen Früz",icon:"fas-ice-cream",imageURL:"https://pbs.twimg.com/profile_images/717339887498878977/ZDfPSjfD_bigger.jpg",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/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/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:"maki-school",imageURL:"https://graph.facebook.com/Childrenslearningadventure/picture?type=large",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/Childtime/picture?type=large",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/kindercare/picture?type=large",geometry:["point","area"],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",max_age:"12",min_age:"6 weeks",name:"KinderCare",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/La Petite Academy":{name:"La Petite Academy",icon:"maki-school",imageURL:"https://graph.facebook.com/LaPetiteAcademy/picture?type=large",geometry:["point","area"],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:"maki-school",imageURL:"https://pbs.twimg.com/profile_images/778681004206592001/ZQF3Eurh_bigger.jpg",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/PrimroseSchools/picture?type=large",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/ChildrensCourtyard/picture?type=large",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/goddardschool/picture?type=large",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/TutorTime/picture?type=large",geometry:["point","area"],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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-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:"maki-school",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:"maki-bank",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:"maki-bank",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:"maki-bank",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:"maki-bank",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:"maki-bank",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/Parking Company of America":{name:"Parking Company of America",icon:"maki-car",imageURL:"https://graph.facebook.com/parkingcompanyofamerica/picture?type=large",geometry:["point","vertex","area"],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:"maki-car",imageURL:"https://graph.facebook.com/sppluscorp/picture?type=large",geometry:["point","vertex","area"],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/payment_centre/Abitab":{name:"Abitab",icon:"maki-bank",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:"maki-bank",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://pbs.twimg.com/profile_images/725613555530133504/f2lYAu0M_bigger.jpg",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":"en: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/1748872266/avatar_Twitter_bigger.png",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:[],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:{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":"en:Jean Coutu Group",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",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":"en:Shoppers Drug Mart",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":"en:Uniprix",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:[],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":"Q11299163",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","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/1050257672753229825/lhBcsYat_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301948",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ココカラファイン","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",geometry:["point","area"],tags:{"brand:wikidata":"Q11305867",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"サンドラッグ","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":"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_box/Canada Post":{name:"Canada Post",icon:"temaki-post_box",imageURL:"https://graph.facebook.com/canadapost/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1032001",amenity:"post_box"},addTags:{amenity:"post_box",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/post_box/Deutsche Post":{name:"Deutsche Post",icon:"temaki-post_box",imageURL:"https://graph.facebook.com/deutschepost/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q157645",amenity:"post_box"},addTags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},countryCodes:["de"],terms:["deutsche post ag"],matchScore:2,suggestion:true},"amenity/post_box/FedEx":{name:"FedEx",icon:"temaki-post_box",imageURL:"https://graph.facebook.com/FedEx/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q459477",amenity:"post_box"},addTags:{amenity:"post_box",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},terms:[],matchScore:2,suggestion:true},"amenity/post_box/UPS":{name:"UPS",icon:"temaki-post_box",imageURL:"https://graph.facebook.com/ups/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q155026",amenity:"post_box"},addTags:{amenity:"post_box",brand:"UPS","brand:wikidata":"Q155026","brand:wikipedia":"en:United Parcel Service",name:"UPS"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/post_box/USPS":{name:"USPS",icon:"temaki-post_box",imageURL:"https://graph.facebook.com/USPS/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q668687",amenity:"post_box"},addTags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS"},countryCodes:["us"],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":{name:"CTT",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/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"},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"},terms:["correos"],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/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","ua"],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:["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/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",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/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/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/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/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/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/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/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/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/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",name:"Chuck E. Cheese's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["chuck e cheese"],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/Cora":{name:"Cora",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/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",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/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/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/italian/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:"italian"},addTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"italian",name:"Frankie & Benny's"},reference:{key:"cuisine",value:"italian"},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"},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/3122105126/6f68644cf2b9b86b935ad99ee57fffad_bigger.jpeg",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/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/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/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/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/Kudu":{name:"Kudu",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/KuduRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6441777",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"},countryCodes:["sa"],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/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/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/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/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 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/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 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/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/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/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":"en:St-Hubert",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/Steak 'n Shake":{name:"Steak 'n Shake",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/steaknshake/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605233",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"},countryCodes:["us"],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/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 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/Toby Carvery":{name:"Toby Carvery",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1091279321795309573/A5J8Nhws_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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWestern%20Sizzlin'%20logo.png&width=100",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/Wingstop":{name:"Wingstop",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Wingstop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025339",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/YO! Sushi":{name:"YO! Sushi",icon:"fas-fish",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/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/dean&david":{name:"dean&david",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/deananddavid07/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",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/Евразия (Ukraine)":{name:"Евразия (Ukraine)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/EvrasiaKiev/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66088028",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Евразия","brand:wikidata":"Q66088028",cuisine:"international",name:"Евразия"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Планета Суши":{name:"Планета Суши",icon:"fas-fish",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","ua"],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/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/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",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",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://pbs.twimg.com/profile_images/1159440101379756032/EUNHc9Xz_bigger.jpg",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",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://pbs.twimg.com/profile_images/1159439860110786561/d0gMXCV-_bigger.jpg",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",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",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",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",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:"maki-school",imageURL:"https://pbs.twimg.com/profile_images/378800000441414844/d5dd1489ee04654b0efb3f99873bea51_bigger.jpeg",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/KIPPFoundation/picture?type=large",geometry:["point","area"],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:"maki-school",imageURL:"https://graph.facebook.com/SuccessAcademies/picture?type=large",geometry:["point","area"],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/107605905935671/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/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",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/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:["point","area"],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:["point","area"],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:["point","area"],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://pbs.twimg.com/profile_images/3238634623/8ccb79c10c4bfb652432961fe776c6c3_bigger.jpeg",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/vending_machine/parcel_pickup/Amazon Locker":{name:"Amazon Locker",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/amazon/picture?type=large",geometry:["point"],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"],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_machine",geometry:["point"],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_machine",imageURL:"https://graph.facebook.com/bkkbudapest/picture?type=large",geometry:["point"],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"],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"],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"],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_machine",geometry:["point"],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"],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_machine",geometry:["point"],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/Home City Ice":{name:"Home City Ice",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/HomeCityIceJobs/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q5888287",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Home City Ice","brand:wikidata":"Q5888287",name:"Home City Ice",vending:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/KKM":{name:"KKM",icon:"temaki-vending_machine",geometry:["point"],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_dropoff/Paczkomat InPost":{name:"Paczkomat InPost",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/paczkomaty/picture?type=large",geometry:["point"],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_machine",imageURL:"https://graph.facebook.com/CalgaryParkingAuthority/picture?type=large",geometry:["point"],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"],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/Reddy Ice":{name:"Reddy Ice",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/RealReddyIce/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q7305666",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Reddy Ice","brand:wikidata":"Q7305666","brand:wikipedia":"en:Reddy Ice",name:"Reddy Ice",vending:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Robidog":{name:"Robidog",icon:"temaki-vending_machine",geometry:["point"],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_machine",geometry:["point"],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_machine",geometry:["point"],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_machine",imageURL:"https://pbs.twimg.com/profile_images/1149007644918784001/b5PBpHkK_bigger.jpg",geometry:["point"],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"],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/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},"healthcare/blood_donation/Australian Red Cross Blood Service":{name:"Australian Red Cross Blood Service",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/redcrossbloodau/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},"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},"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-building",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/dog_park/Kamp K9":{name:"Kamp K9",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","area"],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",imageURL:"https://graph.facebook.com/BlinkFitness/picture?type=large",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://pbs.twimg.com/profile_images/1002267809248768000/7GDwAjgc_bigger.jpg",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://pbs.twimg.com/profile_images/570920453774917632/3SpVGgNU_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q64821053",leisure:"fitness_centre"},addTags:{brand:"Fit4less","brand:wikidata":"Q64821053",leisure:"fitness_centre",name:"Fit4less"},countryCodes:["uk"],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://graph.facebook.com/mcfit.DE/picture?type=large",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/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/playground/McDonald's PlayPlace":{name:"McDonald's PlayPlace",icon:"maki-playground",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],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},"shop/beauty/tanning/Palm Beach Tan":{name:"Palm Beach Tan",icon:"maki-shop",imageURL:"https://graph.facebook.com/PBTOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64027086",shop:"beauty",beauty:"tanning"},addTags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",leisure:"tanning_salon",name:"Palm Beach Tan",shop:"beauty"},reference:{key:"leisure",value:"tanning_salon"},countryCodes:["us"],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/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",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",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",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",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/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/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/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/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/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/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/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/Square Habitat":{name:"Square Habitat",icon:"temaki-real_estate_agency",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/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/insurance/AAA Insurance":{name:"AAA Insurance",icon:"maki-suitcase",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:"maki-suitcase",imageURL:"https://pbs.twimg.com/profile_images/881831342455103488/349uFeQY_bigger.jpg",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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/Aviva":{name:"Aviva",icon:"maki-suitcase",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/DAK":{name:"DAK",icon:"maki-suitcase",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"},terms:[],matchScore:2,suggestion:true},"office/insurance/DEVK":{name:"DEVK",icon:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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/GEICO":{name:"GEICO",icon:"maki-suitcase",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/Generali":{name:"Generali",icon:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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/Knappschaft":{name:"Knappschaft",icon:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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/PZU":{name:"PZU",icon:"maki-suitcase",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:"maki-suitcase",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/State Farm":{name:"State Farm",icon:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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:"maki-suitcase",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/Росгосстрах":{name:"Росгосстрах",icon:"maki-suitcase",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/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:["us"],terms:[],matchScore:2,suggestion:true},"office/telecommunication/A1":{name:"A1",icon:"maki-telephone",imageURL:"https://graph.facebook.com/A1Fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688755",office:"telecommunication"},addTags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",office:"telecommunication"},countryCodes:["at","bg","by","hr","si"],terms:["velcom","velcom|a1","велком"],matchScore:2,suggestion:true},"office/telecommunication/Ooredoo":{name:"Ooredoo",icon:"maki-telephone",imageURL:"https://graph.facebook.com/ooredooqatar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q919935",office:"telecommunication"},addTags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",office:"telecommunication"},terms:[],matchScore:2,suggestion:true},"office/telecommunication/МТС":{name:"МТС",icon:"maki-telephone",imageURL:"https://graph.facebook.com/mts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1368919",office:"telecommunication"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",office:"telecommunication"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"office/telecommunication/Ростелеком":{name:"Ростелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/288785311160831/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1477012",office:"telecommunication"},addTags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",office:"telecommunication"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/telecommunication/Укртелеком":{name:"Укртелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Ukrtelecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1505321",office:"telecommunication"},addTags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",office:"telecommunication"},countryCodes:["ua"],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/1128010188038893568/TCOuuRrD_bigger.png",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/1147150560644272129/jeg6tzSF_bigger.png",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/3095579292/69f5115c869a3b0f73bfb7ad25ba2a37_bigger.png",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/西松屋":{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/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/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/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/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/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/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/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/Cooplands":{name:"Cooplands",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Cooplands/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/Greggs":{name:"Greggs",icon:"maki-bakery",imageURL:"https://graph.facebook.com/greggsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3403981",shop:"bakery"},addTags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",shop:"bakery"},countryCodes:["gb"],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/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",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:["schäfer"],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:"maki-shop",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:"maki-shop",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:"maki-shop",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/Sola Salons":{name:"Sola Salons",icon:"maki-shop",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:"maki-shop",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:"maki-shop",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/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/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 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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/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/bookmaker/Betfred":{name:"Betfred",icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",imageURL:"https://graph.facebook.com/2039606582931195/picture?type=large",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:"maki-shop",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:"maki-shop",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:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1024247841135452160/UlceXxkv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2007823",shop:"bookmaker"},addTags:{brand:"ΟΠΑΠ","brand:el":"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:el":"ΟΠΑΠ","name:en":"OPAP",shop:"bookmaker"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Лига ставок":{name:"Лига ставок",icon:"maki-shop",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:"maki-shop",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/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/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/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/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",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/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",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",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/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:"fas-bacon",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:"fas-bacon",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:"fas-bacon",imageURL:"https://pbs.twimg.com/profile_images/705793072836288513/-hlwSo1Q_bigger.jpg",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:"fas-bacon",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:"fas-bacon",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%92%D0%B5%D0%BB%D0%B8%D0%BA%D0%BE%D0%BB%D1%83%D0%BA%D1%81%D0%BA%D0%B8%D0%B9%20%D0%BC%D1%8F%D1%81%D0%BE%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82.png&width=100",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:"fas-bacon",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:"fas-bacon",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/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/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/イエローハット":{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/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://pbs.twimg.com/profile_images/1152245094897950720/l4DNap9o_bigger.jpg",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/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/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 Auocentre","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"],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/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":"en:Renault",name:"Renault",shop:"car_repair"},terms:["garage renault"],matchScore:2,suggestion:true},"shop/car_repair/Roady":{name:"Roady",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/RoadyFrance/picture?type=large",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:[],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/Ö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/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/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://pbs.twimg.com/profile_images/458970501172301826/63JNVTLh_bigger.png",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://pbs.twimg.com/profile_images/951540064349077504/J4mo65dY_bigger.jpg",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/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/landroverusa/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/Land Rover":{name:"Land Rover",icon:"maki-car",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Land%20Rover%2C%20a%20British%20marque.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q35907",shop:"car"},addTags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FToyota-Dealer-Netz.png&width=100",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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FProton%20Logo.jpg&width=100",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":"en: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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSaipa%20Football%20Club%20de%20Tehran.svg&width=100",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDaihatsu%20Logo.svg&width=100",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/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:"maki-shop",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/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/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/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",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/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://pbs.twimg.com/profile_images/876818433781968896/ZwZLcRz3_bigger.jpg",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/chemist/Acqua & Sapone":{name:"Acqua & Sapone",icon:"fas-shopping-basket",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBipa%20Logo.svg&width=100",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/Matas":{name:"Matas",icon:"fas-shopping-basket",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Drogerie%20Mueller.svg&width=100",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:[],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/1141970592448602112/ubBPZHWI_bigger.png",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",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-shop",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/Gertrude Hawk Chocolates":{name:"Gertrude Hawk Chocolates",icon:"maki-shop",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-shop",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-shop",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-shop",imageURL:"https://pbs.twimg.com/profile_images/771761705336639488/0S9UP_QL_bigger.jpg",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-shop",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-shop",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-shop",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/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:["de","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/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",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://pbs.twimg.com/profile_images/926445027907293185/xgAk5nhG_bigger.jpg",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/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/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/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/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://pbs.twimg.com/profile_images/993897138152091648/RkssuGQ7_bigger.jpg",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://pbs.twimg.com/profile_images/1148268137449775111/rhL9wC1e_bigger.jpg",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/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/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/Brice":{name:"Brice",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/833583108603658240/v7HkRIsd_bigger.jpg",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",name:"Buckle",shop:"clothes"},countryCodes:["us"],terms:[],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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCharles%20Voegele%20Logo.svg&width=100",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",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/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/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/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:[],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/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":"Q5307031",shop:"clothes"},addTags:{brand:"Dress Barn","brand:wikidata":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",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",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/ermenegildozegna/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/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://pbs.twimg.com/profile_images/870307662935805961/8fyPNSUX_bigger.jpg",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/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/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://pbs.twimg.com/profile_images/1158761655809040389/oQ6rMDaf_bigger.jpg",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://pbs.twimg.com/profile_images/1013286424693518336/6XVpnzF7_bigger.jpg",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/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/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:["joseph a bank"],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/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/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://pbs.twimg.com/profile_images/540241105199980544/QfhC9PHl_bigger.png",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",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/Le Château":{name:"Le Château",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/984791052736434176/OKpgwHyj_bigger.jpg",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"],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://pbs.twimg.com/profile_images/842174325243305984/dylLS9xr_bigger.jpg",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/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/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'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",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",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/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://pbs.twimg.com/profile_images/471700618038345729/gZ8q6UVv_bigger.jpeg",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/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/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/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/Pepco":{name:"Pepco",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20the%20Potomac%20Electric%20Power%20Company.png&width=100",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/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/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/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/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/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/Ross":{name:"Ross",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RossDressforLess/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3442791",shop:"clothes"},addTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"clothes"},countryCodes:["us"],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/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/Slaters1973/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/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://pbs.twimg.com/profile_images/659104617792434176/FTrSM8oi_bigger.jpg",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://pbs.twimg.com/profile_images/743172502814285828/rKuPz3Ms_bigger.jpg",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/TJ Maxx":{name:"TJ Maxx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tjmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10860683",shop:"clothes"},addTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/TK Maxx":{name:"TK Maxx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tkmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23823668",shop:"clothes"},addTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",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/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 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://pbs.twimg.com/profile_images/780828141644230657/2yanagO1_bigger.jpg",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:["tr"],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://pbs.twimg.com/profile_images/1092442171238699013/-Zx_BPzB_bigger.jpg",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/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",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/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://pbs.twimg.com/profile_images/1148154393348464645/IMDAv3jZ_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7963123",shop:"clothes"},addTags:{brand:"Wallis","brand:wikidata":"Q7963123",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://pbs.twimg.com/profile_images/925811570889842689/M0Y4yIjA_bigger.jpg",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/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/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://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:"maki-shop",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:"maki-shop",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 World":{name:"PC World",icon:"fas-laptop",imageURL:"https://graph.facebook.com/curryspcworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7118727",shop:"computer"},addTags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",shop:"computer"},countryCodes:["gb"],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/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/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/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/99speedmart/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/albertheijn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653985",shop:"convenience"},addTags:{brand:"Albert Heijn to go","brand:wikidata":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",shop:"convenience"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Alepa":{name:"Alepa",icon:"fas-shopping-basket",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/Alfamart":{name:"Alfamart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/alfamartku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23745600",shop:"convenience"},addTags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"id:Alfamart",name:"Alfamart",shop:"convenience"},countryCodes:["id"],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/AmeriStop":{name:"AmeriStop",icon:"fas-shopping-basket",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/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",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://graph.facebook.com/cbaboltok/picture?type=large",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/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",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/circlekireland/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/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",imageURL:"https://graph.facebook.com/sklepyfreshmarket/picture?type=large",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/Hudson":{name:"Hudson",icon:"fas-shopping-basket",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/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/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/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",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/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/Mace":{name:"Mace",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/maces.stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17089386",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},countryCodes:["gb","ie"],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/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/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://graph.facebook.com/374173965530/picture?type=large",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/Nasz Sklep":{name:"Nasz Sklep",icon:"fas-shopping-basket",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",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",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便利店":{name:"OK便利店",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/circlekireland/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",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/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/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/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",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",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/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/Tesco":{name:"Tesco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/tesco/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/tesco/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/The Co-operative Food (UK)":{name:"The Co-operative Food (UK)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/coopukfood/picture?type=large",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/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/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/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",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/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",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",geometry:["point","area"],tags:{"brand:wikidata":"Q66480830",shop:"convenience"},addTags:{brand:"uSmile 昆仑好","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"uSmile 便利店",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"uSmile 便利店",shop:"convenience"},countryCodes:["cn"],terms:["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"},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":"Q1783878",shop:"convenience"},addTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},countryCodes:["by","ru","ua"],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:["kz","ru"],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",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/circlekireland/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://graph.facebook.com/374173965530/picture?type=large",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",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:"maki-shop",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:"maki-shop",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/KIKO Milano":{name:"KIKO Milano",icon:"maki-shop",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","fr","gb","nl"],terms:["kiko"],matchScore:2,suggestion:true},"shop/cosmetics/Kiehl's":{name:"Kiehl's",icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",imageURL:"https://graph.facebook.com/sephora/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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:[],matchScore:2,suggestion:true},"shop/country_store/Wynnstay":{name:"Wynnstay",icon:"maki-shop",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-palette",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-palette",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-palette",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-palette",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-palette",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-palette",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/Bealls (Florida-based)":{name:"Bealls (Florida-based)",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBealls%20inc%20logob.jpg&width=100",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",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBi-Mart.svg&width=100",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/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:[],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/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:["be","de","nl"],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":"Q61968827",shop:"department_store"},addTags:{brand:"Havan","brand:wikidata":"Q61968827",name:"Havan",shop:"department_store"},countryCodes:["br"],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",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",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/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/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-shop",imageURL:"https://graph.facebook.com/marksandspencerrussia/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/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/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/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/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",imageURL:"https://graph.facebook.com/137379942944322/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q672043",shop:"doityourself"},addTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},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":"en:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},countryCodes:["fr","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"},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"},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",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"},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"},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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FToolstation-Logo.png&width=100",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/192246064148765/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",imageURL:"https://graph.facebook.com/saiengardenclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302690",shop:"doityourself"},addTags:{brand:"コメリ","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:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%205%C3%A0sec.jpg&width=100",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/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/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"},terms:["apple"],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/Currys":{name:"Currys",icon:"fas-plug",imageURL:"https://graph.facebook.com/curryspcworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3246464",shop:"electronics"},addTags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"},countryCodes:["gb","ie"],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":"Q7118727",shop:"electronics"},addTags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"},countryCodes:["gb","ie"],terms:[],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":"Q3117381",shop:"electronics"},addTags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac Darty",name:"Darty",shop:"electronics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Elektra":{name:"Elektra",icon:"fas-plug",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMural%20Elektra.JPG&width=100",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://pbs.twimg.com/profile_images/484728069265969152/bbYIKMqN_bigger.jpeg",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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGigantti%20logo.png&width=100",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",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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMEDIMAX%20Logo-cmyk%20mit%20Claim.jpg&width=100",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/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/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/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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FThe%20Good%20Guys%20Logo.png&width=100",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/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/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",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://pbs.twimg.com/profile_images/1073173217404043266/fIyrfOW-_bigger.jpg",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/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://pbs.twimg.com/profile_images/875976284915892225/JAIY0yvm_bigger.jpg",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/1097856236639453184/BM-4ecgU_bigger.png",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/Jimmy Choo":{name:"Jimmy Choo",icon:"maki-shop",imageURL:"https://graph.facebook.com/JimmyChoo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5213855",shop:"fashion_accessories"},addTags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"fashion_accessories"},terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Prada":{name:"Prada",icon:"maki-shop",imageURL:"https://graph.facebook.com/Prada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q193136",shop:"fashion_accessories"},addTags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",shop:"fashion_accessories"},terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Radley London":{name:"Radley London",icon:"maki-shop",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/Salvatore Ferragamo":{name:"Salvatore Ferragamo",icon:"maki-shop",imageURL:"https://graph.facebook.com/SalvatoreFerragamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3946053",shop:"fashion_accessories"},addTags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"fashion_accessories"},terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Van Cleef & Arpels":{name:"Van Cleef & Arpels",icon:"maki-shop",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/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/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",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/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:["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",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/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/AmericanSignatureFurnitureUSA/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",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/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"],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/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/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/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:[],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/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/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/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"],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/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/İ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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGames%20Workshop%20Logo.png&width=100",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/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/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/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/Point Vert":{name:"Point Vert",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/444739795728913/picture?type=large",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/gas/Airgas":{name:"Airgas",icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:[],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",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:"maki-shop",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:["ca","mx","us"],terms:[],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/health_food/Holland & Barrett":{name:"Holland & Barrett",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1146032750463504384/jGVlI8rw_bigger.png",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",imageURL:"https://graph.facebook.com/kindhoergeraete/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:"maki-shop",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:"maki-shop",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBose%20logo.svg&width=100",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/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/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:website":"http://www.oldtimepottery.com","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/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/World Market":{name:"World Market",icon:"fas-blender",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/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/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://pbs.twimg.com/profile_images/895948506082537472/9N7fI-vd_bigger.jpg",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/HomeSenseCanada/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"],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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCharm%20Diamond%20Logo%20BLACK5700.jpg&width=100",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/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/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/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/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/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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/Magnet":{name:"Magnet",icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/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:"maki-shop",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:"maki-shop",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/MTN":{name:"MTN",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MTN/picture?type=large",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/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/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/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/Алло":{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/money_lender/ACE Cash Express":{name:"ACE Cash Express",icon:"maki-bank",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:"maki-bank",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:"maki-bank",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:"maki-bank",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/Check Into Cash":{name:"Check Into Cash",icon:"maki-bank",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:"maki-bank",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:"maki-bank",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:"maki-bank",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/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/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://pbs.twimg.com/profile_images/1058023773964824576/fkO9j6IA_bigger.jpg",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/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:"kiosk"},addTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"kiosk"},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"},countryCodes:["gb"],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://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:["by"],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:["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:["by","kz","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:"maki-shop",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/The Vitamin Shoppe":{name:"The Vitamin Shoppe",icon:"maki-shop",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:"maki-shop",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/fielmannzittauagundcoohg/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/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/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/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",name:"Cotswold Outdoor",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Gander Outdoors":{name:"Gander Outdoors",icon:"temaki-compass",imageURL:"https://graph.facebook.com/GanderOutdoors/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/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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/perfumery/Douglas":{name:"Douglas",icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/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://pbs.twimg.com/profile_images/879147372143661056/QsqRYNnI_bigger.jpg",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/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/printer_ink/Cartridge World":{name:"Cartridge World",icon:"maki-shop",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/U-Haul":{name:"U-Haul",icon:"maki-shop",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/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/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/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/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/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/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/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/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/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/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/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/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",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/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/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/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/Decathlon":{name:"Decathlon",icon:"fas-futbol",imageURL:"https://graph.facebook.com/DecathlonUSA/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/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",imageURL:"https://graph.facebook.com/intersportAT/picture?type=large",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/JDSportsOfficial/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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRebel%20sport%20logo%202012.png&width=100",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://pbs.twimg.com/profile_images/1072276948317986817/J6YF-QLZ_bigger.jpg",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/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":"Q2913554",shop:"sports"},addTags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"},terms:["SportsDirect.com"],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/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://pbs.twimg.com/profile_images/962836818193408001/miihwmd8_bigger.jpg",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:"fas-warehouse",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:[],matchScore:2,suggestion:true},"shop/storage_rental/Public Storage":{name:"Public Storage",icon:"fas-warehouse",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/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/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/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"},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/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/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 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/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/CBA":{name:"CBA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/cbaboltok/picture?type=large",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/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/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/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/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/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":"en: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":"en:Edeka",name:"Edeka",shop:"supermarket"},countryCodes:["de"],terms:["edeka neukauf"],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/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/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/Farmfoods":{name:"Farmfoods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/147382588630890/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435841",shop:"supermarket"},addTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"supermarket"},countryCodes:["gb","sk"],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/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/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:[],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":"en:Géant 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/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",imageURL:"https://graph.facebook.com/IrmaDanmark/picture?type=large",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/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:["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/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":"en:La Vie Claire (company)",name:"La Vie Claire",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":"en: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/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/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://graph.facebook.com/119240581466268/picture?type=large",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/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":"en:Maxi (Canadian supermarket)",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"},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","hz","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 (Canada)":{name:"Metro (Canada)",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/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/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":{name:"Netto",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":"en:Netto (store)",name:"Netto",shop:"supermarket"},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":"en:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},countryCodes:["de"],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/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",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://graph.facebook.com/pennyoesterreich/picture?type=large",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":"en: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/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/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"},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:[],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",imageURL:"https://graph.facebook.com/265671900499370/picture?type=large",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/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":"en:Super C (supermarket)",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/tesco/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 Express":{name:"Tesco Express",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"supermarket"},addTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Extra":{name:"Tesco Extra",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tesco/picture?type=large",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 Metro":{name:"Tesco Metro",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tesco/picture?type=large",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://graph.facebook.com/coopukfood/picture?type=large",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",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/Ş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",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",imageURL:"https://graph.facebook.com/2637775479623484/picture?type=large",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",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/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://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://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",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://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/gsjdf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11590183",shop:"supermarket"},addTags:{brand:"業務スーパー","brand:en":"Gyōmu sūpā","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:["leslie's swimming pool supplies"],matchScore:2,suggestion:true},"shop/tea/DavidsTea":{name:"DavidsTea",icon:"maki-teahouse",imageURL:"https://pbs.twimg.com/profile_images/1134536272062685184/YvIzsQOi_bigger.png",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/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/776102546045865984/-NPGF3eG_bigger.jpg",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/tobacco/Nemzeti Dohánybolt":{name:"Nemzeti Dohánybolt",icon:"maki-shop",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/toys/Build-A-Bear Workshop":{name:"Build-A-Bear Workshop",icon:"fas-space-shuttle",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-space-shuttle",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/Hawkin's Bazaar":{name:"Hawkin's Bazaar",icon:"fas-space-shuttle",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-space-shuttle",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-space-shuttle",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-space-shuttle",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-space-shuttle",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-space-shuttle",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-space-shuttle",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-space-shuttle",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-space-shuttle",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/Smyths":{name:"Smyths",icon:"fas-space-shuttle",imageURL:"https://pbs.twimg.com/profile_images/1067119121245048834/S_SSe3Yd_bigger.jpg",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-space-shuttle",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-space-shuttle",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-space-shuttle",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-space-shuttle",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:"maki-shop",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:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1104430883761733639/nhptxXQp_bigger.png",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:"maki-shop",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:"maki-shop",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:"maki-shop",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/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/coraltravelofficial/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:[],matchScore:2,suggestion:true},"shop/travel_agency/Expedia CruiseShipCenters":{name:"Expedia CruiseShipCenters",icon:"fas-suitcase",imageURL:"https://pbs.twimg.com/profile_images/476431342729588736/6JpT6tus_bigger.jpeg",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/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/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/Поехали с нами":{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/tyres/Big O Tires":{name:"Big O Tires",icon:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:"maki-shop",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:[],matchScore:2,suggestion:true},"shop/tyres/Michelin":{name:"Michelin",icon:"maki-shop",imageURL:"https://graph.facebook.com/MichelinSustainableMobility/picture?type=large",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/Tire Discounters":{name:"Tire Discounters",icon:"maki-shop",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:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/378800000821067695/d59e0a647859aabacc690ebb962670aa_bigger.jpeg",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:"maki-shop",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:"maki-shop",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","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",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"},countryCodes:["au","us"],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/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/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/1098907826305421312/KCKaI33I_bigger.png",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://pbs.twimg.com/profile_images/925661697230163968/GTdV1FP7_bigger.jpg",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:["gb"],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:["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:[],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/コストコ":{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/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/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/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/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","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},countryCodes:["ca","us"],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/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 by Marriott":{name:"Courtyard by Marriott",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 by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard by Marriott",tourism:"hotel"},countryCodes:["ca","us"],terms:["courtyard","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","gb","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/DoubleTree by Hilton":{name:"DoubleTree by Hilton",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 by Hilton","brand:wikidata":"Q2504643","brand:wikipedia":"en:DoubleTree",name:"DoubleTree by Hilton",short_name:"DoubleTree",tourism:"hotel"},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",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:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},countryCodes:["ca","us"],terms:["fairfield inn and suites"],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/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/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",tourism:"hotel"},countryCodes:["us"],terms:["hampton inn and suites"],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"},countryCodes:["ca","us"],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",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://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 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/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":{name:"La Quinta",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","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",tourism:"hotel"},countryCodes:["us"],terms:["la quinta inn and suites","la quinta inns and suites"],matchScore:2,suggestion:true},"tourism/hotel/Le Méridien":{name:"Le Méridien",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/444194265032163329/ioAHiave_bigger.jpeg",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/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/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/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/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/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 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 Hotel":{name:"Renaissance Hotel",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 Hotels","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance Hotel",tourism:"hotel"},countryCodes:["us"],terms:[],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/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/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":{name:"Travelodge",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"},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/東横イン":{name:"東横イン",icon:"fas-concierge-bell",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/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/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}};
24717
24718         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"]};
24719
24720         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","natural/beach"]},"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"]}};
24721
24722         var fields = {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!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","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!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"},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"]},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"},booth:{key:"booth",type:"combo",label:"Booth",caseSensitive:true},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/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"},construction:{key:"construction",type:"combo",label:"Type"},consulate:{key:"consulate",type:"combo",label:"Type"},"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:{key:"conveying",type:"typeCombo",label:"Movement Direction",strings:{options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}}},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"},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"}},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"},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"},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"},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"},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"},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"},government:{key:"government",type:"typeCombo",label:"Type"},grape_variety:{key:"grape_variety",type:"semiCombo",label:"Grape Varieties"},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:"Suggested 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"}},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"},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:{key:"level",type:"combo",label:"Level",universal:true,terms:["building floor","deck","storey","story"]},levels:{key:"building:levels",type:"number",minValue:0,label:"Levels",placeholder:"2, 4, 6..."},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"},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"},material:{key:"material",type:"combo",label:"Material"},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"]},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"}}},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 Type",placeholder:"Local, Regional, National, International",strings:{options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}}},network_foot:{key:"network",type:"combo",label:"Network Type",placeholder:"Local, Regional, National, International",strings:{options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}}},network_horse:{key:"network",type:"combo",label:"Network Type",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"},"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"}},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/output/electricity":{key:"plant:output:electricity",type:"text",label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},playground:{key:"playground",type:"combo",label:"Type"},"playground/baby":{key:"baby",type:"check",label:"Baby Seat"},"playground/max_age":{key:"max_age",type:"number",minValue:0,label:"Maximum Age"},"playground/min_age":{key:"min_age",type:"number",minValue:0,label:"Minimum Age"},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"},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},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"},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"}}},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"},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"}}},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"},"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"}}},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"},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:"check",options:["yes","limited","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/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"},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"}}},valve:{key:"valve",type:"combo",label:"Type"},vending:{key:"vending",type:"semiCombo",label:"Types of Goods"},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"},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",options:["yes","limited","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"},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"}}}};
24723
24724         var quickselect = createCommonjsModule(function (module, exports) {
24725         (function (global, factory) {
24726                  module.exports = factory() ;
24727         }(commonjsGlobal, (function () {
24728         function quickselect(arr, k, left, right, compare) {
24729             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
24730         }
24731
24732         function quickselectStep(arr, k, left, right, compare) {
24733
24734             while (right > left) {
24735                 if (right - left > 600) {
24736                     var n = right - left + 1;
24737                     var m = k - left + 1;
24738                     var z = Math.log(n);
24739                     var s = 0.5 * Math.exp(2 * z / 3);
24740                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
24741                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
24742                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
24743                     quickselectStep(arr, k, newLeft, newRight, compare);
24744                 }
24745
24746                 var t = arr[k];
24747                 var i = left;
24748                 var j = right;
24749
24750                 swap(arr, left, k);
24751                 if (compare(arr[right], t) > 0) swap(arr, left, right);
24752
24753                 while (i < j) {
24754                     swap(arr, i, j);
24755                     i++;
24756                     j--;
24757                     while (compare(arr[i], t) < 0) i++;
24758                     while (compare(arr[j], t) > 0) j--;
24759                 }
24760
24761                 if (compare(arr[left], t) === 0) swap(arr, left, j);
24762                 else {
24763                     j++;
24764                     swap(arr, j, right);
24765                 }
24766
24767                 if (j <= k) left = j + 1;
24768                 if (k <= j) right = j - 1;
24769             }
24770         }
24771
24772         function swap(arr, i, j) {
24773             var tmp = arr[i];
24774             arr[i] = arr[j];
24775             arr[j] = tmp;
24776         }
24777
24778         function defaultCompare(a, b) {
24779             return a < b ? -1 : a > b ? 1 : 0;
24780         }
24781
24782         return quickselect;
24783
24784         })));
24785         });
24786
24787         var rbush_1 = rbush;
24788         var default_1 = rbush;
24789
24790
24791
24792         function rbush(maxEntries, format) {
24793             if (!(this instanceof rbush)) return new rbush(maxEntries, format);
24794
24795             // max entries in a node is 9 by default; min node fill is 40% for best performance
24796             this._maxEntries = Math.max(4, maxEntries || 9);
24797             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
24798
24799             if (format) {
24800                 this._initFormat(format);
24801             }
24802
24803             this.clear();
24804         }
24805
24806         rbush.prototype = {
24807
24808             all: function () {
24809                 return this._all(this.data, []);
24810             },
24811
24812             search: function (bbox) {
24813
24814                 var node = this.data,
24815                     result = [],
24816                     toBBox = this.toBBox;
24817
24818                 if (!intersects$1(bbox, node)) return result;
24819
24820                 var nodesToSearch = [],
24821                     i, len, child, childBBox;
24822
24823                 while (node) {
24824                     for (i = 0, len = node.children.length; i < len; i++) {
24825
24826                         child = node.children[i];
24827                         childBBox = node.leaf ? toBBox(child) : child;
24828
24829                         if (intersects$1(bbox, childBBox)) {
24830                             if (node.leaf) result.push(child);
24831                             else if (contains$4(bbox, childBBox)) this._all(child, result);
24832                             else nodesToSearch.push(child);
24833                         }
24834                     }
24835                     node = nodesToSearch.pop();
24836                 }
24837
24838                 return result;
24839             },
24840
24841             collides: function (bbox) {
24842
24843                 var node = this.data,
24844                     toBBox = this.toBBox;
24845
24846                 if (!intersects$1(bbox, node)) return false;
24847
24848                 var nodesToSearch = [],
24849                     i, len, child, childBBox;
24850
24851                 while (node) {
24852                     for (i = 0, len = node.children.length; i < len; i++) {
24853
24854                         child = node.children[i];
24855                         childBBox = node.leaf ? toBBox(child) : child;
24856
24857                         if (intersects$1(bbox, childBBox)) {
24858                             if (node.leaf || contains$4(bbox, childBBox)) return true;
24859                             nodesToSearch.push(child);
24860                         }
24861                     }
24862                     node = nodesToSearch.pop();
24863                 }
24864
24865                 return false;
24866             },
24867
24868             load: function (data) {
24869                 if (!(data && data.length)) return this;
24870
24871                 if (data.length < this._minEntries) {
24872                     for (var i = 0, len = data.length; i < len; i++) {
24873                         this.insert(data[i]);
24874                     }
24875                     return this;
24876                 }
24877
24878                 // recursively build the tree with the given data from scratch using OMT algorithm
24879                 var node = this._build(data.slice(), 0, data.length - 1, 0);
24880
24881                 if (!this.data.children.length) {
24882                     // save as is if tree is empty
24883                     this.data = node;
24884
24885                 } else if (this.data.height === node.height) {
24886                     // split root if trees have the same height
24887                     this._splitRoot(this.data, node);
24888
24889                 } else {
24890                     if (this.data.height < node.height) {
24891                         // swap trees if inserted one is bigger
24892                         var tmpNode = this.data;
24893                         this.data = node;
24894                         node = tmpNode;
24895                     }
24896
24897                     // insert the small tree into the large tree at appropriate level
24898                     this._insert(node, this.data.height - node.height - 1, true);
24899                 }
24900
24901                 return this;
24902             },
24903
24904             insert: function (item) {
24905                 if (item) this._insert(item, this.data.height - 1);
24906                 return this;
24907             },
24908
24909             clear: function () {
24910                 this.data = createNode([]);
24911                 return this;
24912             },
24913
24914             remove: function (item, equalsFn) {
24915                 if (!item) return this;
24916
24917                 var node = this.data,
24918                     bbox = this.toBBox(item),
24919                     path = [],
24920                     indexes = [],
24921                     i, parent, index, goingUp;
24922
24923                 // depth-first iterative tree traversal
24924                 while (node || path.length) {
24925
24926                     if (!node) { // go up
24927                         node = path.pop();
24928                         parent = path[path.length - 1];
24929                         i = indexes.pop();
24930                         goingUp = true;
24931                     }
24932
24933                     if (node.leaf) { // check current node
24934                         index = findItem(item, node.children, equalsFn);
24935
24936                         if (index !== -1) {
24937                             // item found, remove the item and condense tree upwards
24938                             node.children.splice(index, 1);
24939                             path.push(node);
24940                             this._condense(path);
24941                             return this;
24942                         }
24943                     }
24944
24945                     if (!goingUp && !node.leaf && contains$4(node, bbox)) { // go down
24946                         path.push(node);
24947                         indexes.push(i);
24948                         i = 0;
24949                         parent = node;
24950                         node = node.children[0];
24951
24952                     } else if (parent) { // go right
24953                         i++;
24954                         node = parent.children[i];
24955                         goingUp = false;
24956
24957                     } else node = null; // nothing found
24958                 }
24959
24960                 return this;
24961             },
24962
24963             toBBox: function (item) { return item; },
24964
24965             compareMinX: compareNodeMinX,
24966             compareMinY: compareNodeMinY,
24967
24968             toJSON: function () { return this.data; },
24969
24970             fromJSON: function (data) {
24971                 this.data = data;
24972                 return this;
24973             },
24974
24975             _all: function (node, result) {
24976                 var nodesToSearch = [];
24977                 while (node) {
24978                     if (node.leaf) result.push.apply(result, node.children);
24979                     else nodesToSearch.push.apply(nodesToSearch, node.children);
24980
24981                     node = nodesToSearch.pop();
24982                 }
24983                 return result;
24984             },
24985
24986             _build: function (items, left, right, height) {
24987
24988                 var N = right - left + 1,
24989                     M = this._maxEntries,
24990                     node;
24991
24992                 if (N <= M) {
24993                     // reached leaf level; return leaf
24994                     node = createNode(items.slice(left, right + 1));
24995                     calcBBox(node, this.toBBox);
24996                     return node;
24997                 }
24998
24999                 if (!height) {
25000                     // target height of the bulk-loaded tree
25001                     height = Math.ceil(Math.log(N) / Math.log(M));
25002
25003                     // target number of root entries to maximize storage utilization
25004                     M = Math.ceil(N / Math.pow(M, height - 1));
25005                 }
25006
25007                 node = createNode([]);
25008                 node.leaf = false;
25009                 node.height = height;
25010
25011                 // split the items into M mostly square tiles
25012
25013                 var N2 = Math.ceil(N / M),
25014                     N1 = N2 * Math.ceil(Math.sqrt(M)),
25015                     i, j, right2, right3;
25016
25017                 multiSelect(items, left, right, N1, this.compareMinX);
25018
25019                 for (i = left; i <= right; i += N1) {
25020
25021                     right2 = Math.min(i + N1 - 1, right);
25022
25023                     multiSelect(items, i, right2, N2, this.compareMinY);
25024
25025                     for (j = i; j <= right2; j += N2) {
25026
25027                         right3 = Math.min(j + N2 - 1, right2);
25028
25029                         // pack each entry recursively
25030                         node.children.push(this._build(items, j, right3, height - 1));
25031                     }
25032                 }
25033
25034                 calcBBox(node, this.toBBox);
25035
25036                 return node;
25037             },
25038
25039             _chooseSubtree: function (bbox, node, level, path) {
25040
25041                 var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
25042
25043                 while (true) {
25044                     path.push(node);
25045
25046                     if (node.leaf || path.length - 1 === level) break;
25047
25048                     minArea = minEnlargement = Infinity;
25049
25050                     for (i = 0, len = node.children.length; i < len; i++) {
25051                         child = node.children[i];
25052                         area = bboxArea(child);
25053                         enlargement = enlargedArea(bbox, child) - area;
25054
25055                         // choose entry with the least area enlargement
25056                         if (enlargement < minEnlargement) {
25057                             minEnlargement = enlargement;
25058                             minArea = area < minArea ? area : minArea;
25059                             targetNode = child;
25060
25061                         } else if (enlargement === minEnlargement) {
25062                             // otherwise choose one with the smallest area
25063                             if (area < minArea) {
25064                                 minArea = area;
25065                                 targetNode = child;
25066                             }
25067                         }
25068                     }
25069
25070                     node = targetNode || node.children[0];
25071                 }
25072
25073                 return node;
25074             },
25075
25076             _insert: function (item, level, isNode) {
25077
25078                 var toBBox = this.toBBox,
25079                     bbox = isNode ? item : toBBox(item),
25080                     insertPath = [];
25081
25082                 // find the best node for accommodating the item, saving all nodes along the path too
25083                 var node = this._chooseSubtree(bbox, this.data, level, insertPath);
25084
25085                 // put the item into the node
25086                 node.children.push(item);
25087                 extend$1(node, bbox);
25088
25089                 // split on node overflow; propagate upwards if necessary
25090                 while (level >= 0) {
25091                     if (insertPath[level].children.length > this._maxEntries) {
25092                         this._split(insertPath, level);
25093                         level--;
25094                     } else break;
25095                 }
25096
25097                 // adjust bboxes along the insertion path
25098                 this._adjustParentBBoxes(bbox, insertPath, level);
25099             },
25100
25101             // split overflowed node into two
25102             _split: function (insertPath, level) {
25103
25104                 var node = insertPath[level],
25105                     M = node.children.length,
25106                     m = this._minEntries;
25107
25108                 this._chooseSplitAxis(node, m, M);
25109
25110                 var splitIndex = this._chooseSplitIndex(node, m, M);
25111
25112                 var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
25113                 newNode.height = node.height;
25114                 newNode.leaf = node.leaf;
25115
25116                 calcBBox(node, this.toBBox);
25117                 calcBBox(newNode, this.toBBox);
25118
25119                 if (level) insertPath[level - 1].children.push(newNode);
25120                 else this._splitRoot(node, newNode);
25121             },
25122
25123             _splitRoot: function (node, newNode) {
25124                 // split root node
25125                 this.data = createNode([node, newNode]);
25126                 this.data.height = node.height + 1;
25127                 this.data.leaf = false;
25128                 calcBBox(this.data, this.toBBox);
25129             },
25130
25131             _chooseSplitIndex: function (node, m, M) {
25132
25133                 var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
25134
25135                 minOverlap = minArea = Infinity;
25136
25137                 for (i = m; i <= M - m; i++) {
25138                     bbox1 = distBBox(node, 0, i, this.toBBox);
25139                     bbox2 = distBBox(node, i, M, this.toBBox);
25140
25141                     overlap = intersectionArea(bbox1, bbox2);
25142                     area = bboxArea(bbox1) + bboxArea(bbox2);
25143
25144                     // choose distribution with minimum overlap
25145                     if (overlap < minOverlap) {
25146                         minOverlap = overlap;
25147                         index = i;
25148
25149                         minArea = area < minArea ? area : minArea;
25150
25151                     } else if (overlap === minOverlap) {
25152                         // otherwise choose distribution with minimum area
25153                         if (area < minArea) {
25154                             minArea = area;
25155                             index = i;
25156                         }
25157                     }
25158                 }
25159
25160                 return index;
25161             },
25162
25163             // sorts node children by the best axis for split
25164             _chooseSplitAxis: function (node, m, M) {
25165
25166                 var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
25167                     compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
25168                     xMargin = this._allDistMargin(node, m, M, compareMinX),
25169                     yMargin = this._allDistMargin(node, m, M, compareMinY);
25170
25171                 // if total distributions margin value is minimal for x, sort by minX,
25172                 // otherwise it's already sorted by minY
25173                 if (xMargin < yMargin) node.children.sort(compareMinX);
25174             },
25175
25176             // total margin of all possible split distributions where each node is at least m full
25177             _allDistMargin: function (node, m, M, compare) {
25178
25179                 node.children.sort(compare);
25180
25181                 var toBBox = this.toBBox,
25182                     leftBBox = distBBox(node, 0, m, toBBox),
25183                     rightBBox = distBBox(node, M - m, M, toBBox),
25184                     margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
25185                     i, child;
25186
25187                 for (i = m; i < M - m; i++) {
25188                     child = node.children[i];
25189                     extend$1(leftBBox, node.leaf ? toBBox(child) : child);
25190                     margin += bboxMargin(leftBBox);
25191                 }
25192
25193                 for (i = M - m - 1; i >= m; i--) {
25194                     child = node.children[i];
25195                     extend$1(rightBBox, node.leaf ? toBBox(child) : child);
25196                     margin += bboxMargin(rightBBox);
25197                 }
25198
25199                 return margin;
25200             },
25201
25202             _adjustParentBBoxes: function (bbox, path, level) {
25203                 // adjust bboxes along the given tree path
25204                 for (var i = level; i >= 0; i--) {
25205                     extend$1(path[i], bbox);
25206                 }
25207             },
25208
25209             _condense: function (path) {
25210                 // go through the path, removing empty nodes and updating bboxes
25211                 for (var i = path.length - 1, siblings; i >= 0; i--) {
25212                     if (path[i].children.length === 0) {
25213                         if (i > 0) {
25214                             siblings = path[i - 1].children;
25215                             siblings.splice(siblings.indexOf(path[i]), 1);
25216
25217                         } else this.clear();
25218
25219                     } else calcBBox(path[i], this.toBBox);
25220                 }
25221             },
25222
25223             _initFormat: function (format) {
25224                 // data format (minX, minY, maxX, maxY accessors)
25225
25226                 // uses eval-type function compilation instead of just accepting a toBBox function
25227                 // because the algorithms are very sensitive to sorting functions performance,
25228                 // so they should be dead simple and without inner calls
25229
25230                 var compareArr = ['return a', ' - b', ';'];
25231
25232                 this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
25233                 this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
25234
25235                 this.toBBox = new Function('a',
25236                     'return {minX: a' + format[0] +
25237                     ', minY: a' + format[1] +
25238                     ', maxX: a' + format[2] +
25239                     ', maxY: a' + format[3] + '};');
25240             }
25241         };
25242
25243         function findItem(item, items, equalsFn) {
25244             if (!equalsFn) return items.indexOf(item);
25245
25246             for (var i = 0; i < items.length; i++) {
25247                 if (equalsFn(item, items[i])) return i;
25248             }
25249             return -1;
25250         }
25251
25252         // calculate node's bbox from bboxes of its children
25253         function calcBBox(node, toBBox) {
25254             distBBox(node, 0, node.children.length, toBBox, node);
25255         }
25256
25257         // min bounding rectangle of node children from k to p-1
25258         function distBBox(node, k, p, toBBox, destNode) {
25259             if (!destNode) destNode = createNode(null);
25260             destNode.minX = Infinity;
25261             destNode.minY = Infinity;
25262             destNode.maxX = -Infinity;
25263             destNode.maxY = -Infinity;
25264
25265             for (var i = k, child; i < p; i++) {
25266                 child = node.children[i];
25267                 extend$1(destNode, node.leaf ? toBBox(child) : child);
25268             }
25269
25270             return destNode;
25271         }
25272
25273         function extend$1(a, b) {
25274             a.minX = Math.min(a.minX, b.minX);
25275             a.minY = Math.min(a.minY, b.minY);
25276             a.maxX = Math.max(a.maxX, b.maxX);
25277             a.maxY = Math.max(a.maxY, b.maxY);
25278             return a;
25279         }
25280
25281         function compareNodeMinX(a, b) { return a.minX - b.minX; }
25282         function compareNodeMinY(a, b) { return a.minY - b.minY; }
25283
25284         function bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
25285         function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
25286
25287         function enlargedArea(a, b) {
25288             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
25289                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
25290         }
25291
25292         function intersectionArea(a, b) {
25293             var minX = Math.max(a.minX, b.minX),
25294                 minY = Math.max(a.minY, b.minY),
25295                 maxX = Math.min(a.maxX, b.maxX),
25296                 maxY = Math.min(a.maxY, b.maxY);
25297
25298             return Math.max(0, maxX - minX) *
25299                    Math.max(0, maxY - minY);
25300         }
25301
25302         function contains$4(a, b) {
25303             return a.minX <= b.minX &&
25304                    a.minY <= b.minY &&
25305                    b.maxX <= a.maxX &&
25306                    b.maxY <= a.maxY;
25307         }
25308
25309         function intersects$1(a, b) {
25310             return b.minX <= a.maxX &&
25311                    b.minY <= a.maxY &&
25312                    b.maxX >= a.minX &&
25313                    b.maxY >= a.minY;
25314         }
25315
25316         function createNode(children) {
25317             return {
25318                 children: children,
25319                 height: 1,
25320                 leaf: true,
25321                 minX: Infinity,
25322                 minY: Infinity,
25323                 maxX: -Infinity,
25324                 maxY: -Infinity
25325             };
25326         }
25327
25328         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
25329         // combines selection algorithm with binary divide & conquer approach
25330
25331         function multiSelect(arr, left, right, n, compare) {
25332             var stack = [left, right],
25333                 mid;
25334
25335             while (stack.length) {
25336                 right = stack.pop();
25337                 left = stack.pop();
25338
25339                 if (right - left <= n) continue;
25340
25341                 mid = left + Math.ceil((right - left) / n / 2) * n;
25342                 quickselect(arr, mid, left, right, compare);
25343
25344                 stack.push(left, mid, mid, right);
25345             }
25346         }
25347         rbush_1.default = default_1;
25348
25349         var lineclip_1 = lineclip;
25350
25351         lineclip.polyline = lineclip;
25352         lineclip.polygon = polygonclip;
25353
25354
25355         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
25356         // handle polylines rather than just segments
25357
25358         function lineclip(points, bbox, result) {
25359
25360             var len = points.length,
25361                 codeA = bitCode(points[0], bbox),
25362                 part = [],
25363                 i, a, b, codeB, lastCode;
25364
25365             if (!result) result = [];
25366
25367             for (i = 1; i < len; i++) {
25368                 a = points[i - 1];
25369                 b = points[i];
25370                 codeB = lastCode = bitCode(b, bbox);
25371
25372                 while (true) {
25373
25374                     if (!(codeA | codeB)) { // accept
25375                         part.push(a);
25376
25377                         if (codeB !== lastCode) { // segment went outside
25378                             part.push(b);
25379
25380                             if (i < len - 1) { // start a new line
25381                                 result.push(part);
25382                                 part = [];
25383                             }
25384                         } else if (i === len - 1) {
25385                             part.push(b);
25386                         }
25387                         break;
25388
25389                     } else if (codeA & codeB) { // trivial reject
25390                         break;
25391
25392                     } else if (codeA) { // a outside, intersect with clip edge
25393                         a = intersect$1(a, b, codeA, bbox);
25394                         codeA = bitCode(a, bbox);
25395
25396                     } else { // b outside
25397                         b = intersect$1(a, b, codeB, bbox);
25398                         codeB = bitCode(b, bbox);
25399                     }
25400                 }
25401
25402                 codeA = lastCode;
25403             }
25404
25405             if (part.length) result.push(part);
25406
25407             return result;
25408         }
25409
25410         // Sutherland-Hodgeman polygon clipping algorithm
25411
25412         function polygonclip(points, bbox) {
25413
25414             var result, edge, prev, prevInside, i, p, inside;
25415
25416             // clip against each side of the clip rectangle
25417             for (edge = 1; edge <= 8; edge *= 2) {
25418                 result = [];
25419                 prev = points[points.length - 1];
25420                 prevInside = !(bitCode(prev, bbox) & edge);
25421
25422                 for (i = 0; i < points.length; i++) {
25423                     p = points[i];
25424                     inside = !(bitCode(p, bbox) & edge);
25425
25426                     // if segment goes through the clip window, add an intersection
25427                     if (inside !== prevInside) result.push(intersect$1(prev, p, edge, bbox));
25428
25429                     if (inside) result.push(p); // add a point if it's inside
25430
25431                     prev = p;
25432                     prevInside = inside;
25433                 }
25434
25435                 points = result;
25436
25437                 if (!points.length) break;
25438             }
25439
25440             return result;
25441         }
25442
25443         // intersect a segment against one of the 4 lines that make up the bbox
25444
25445         function intersect$1(a, b, edge, bbox) {
25446             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
25447                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
25448                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
25449                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
25450                    null;
25451         }
25452
25453         // bit code reflects the point position relative to the bbox:
25454
25455         //         left  mid  right
25456         //    top  1001  1000  1010
25457         //    mid  0001  0000  0010
25458         // bottom  0101  0100  0110
25459
25460         function bitCode(p, bbox) {
25461             var code = 0;
25462
25463             if (p[0] < bbox[0]) code |= 1; // left
25464             else if (p[0] > bbox[2]) code |= 2; // right
25465
25466             if (p[1] < bbox[1]) code |= 4; // bottom
25467             else if (p[1] > bbox[3]) code |= 8; // top
25468
25469             return code;
25470         }
25471
25472         var whichPolygon_1 = whichPolygon;
25473
25474         function whichPolygon(data) {
25475             var bboxes = [];
25476             for (var i = 0; i < data.features.length; i++) {
25477                 var feature = data.features[i];
25478                 var coords = feature.geometry.coordinates;
25479
25480                 if (feature.geometry.type === 'Polygon') {
25481                     bboxes.push(treeItem(coords, feature.properties));
25482
25483                 } else if (feature.geometry.type === 'MultiPolygon') {
25484                     for (var j = 0; j < coords.length; j++) {
25485                         bboxes.push(treeItem(coords[j], feature.properties));
25486                     }
25487                 }
25488             }
25489
25490             var tree = rbush_1().load(bboxes);
25491
25492             function query(p, multi) {
25493                 var output = [],
25494                     result = tree.search({
25495                         minX: p[0],
25496                         minY: p[1],
25497                         maxX: p[0],
25498                         maxY: p[1]
25499                     });
25500                 for (var i = 0; i < result.length; i++) {
25501                     if (insidePolygon(result[i].coords, p)) {
25502                         if (multi)
25503                             output.push(result[i].props);
25504                         else
25505                             return result[i].props;
25506                     }
25507                 }
25508                 return multi && output.length ? output : null;
25509             }
25510
25511             query.tree = tree;
25512             query.bbox = function queryBBox(bbox) {
25513                 var output = [];
25514                 var result = tree.search({
25515                     minX: bbox[0],
25516                     minY: bbox[1],
25517                     maxX: bbox[2],
25518                     maxY: bbox[3]
25519                 });
25520                 for (var i = 0; i < result.length; i++) {
25521                     if (polygonIntersectsBBox(result[i].coords, bbox)) {
25522                         output.push(result[i].props);
25523                     }
25524                 }
25525                 return output;
25526             };
25527
25528             return query;
25529         }
25530
25531         function polygonIntersectsBBox(polygon, bbox) {
25532             var bboxCenter = [
25533                 (bbox[0] + bbox[2]) / 2,
25534                 (bbox[1] + bbox[3]) / 2
25535             ];
25536             if (insidePolygon(polygon, bboxCenter)) return true;
25537             for (var i = 0; i < polygon.length; i++) {
25538                 if (lineclip_1(polygon[i], bbox).length > 0) return true;
25539             }
25540             return false;
25541         }
25542
25543         // ray casting algorithm for detecting if point is in polygon
25544         function insidePolygon(rings, p) {
25545             var inside = false;
25546             for (var i = 0, len = rings.length; i < len; i++) {
25547                 var ring = rings[i];
25548                 for (var j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) {
25549                     if (rayIntersect(p, ring[j], ring[k])) inside = !inside;
25550                 }
25551             }
25552             return inside;
25553         }
25554
25555         function rayIntersect(p, p1, p2) {
25556             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]);
25557         }
25558
25559         function treeItem(coords, props) {
25560             var item = {
25561                 minX: Infinity,
25562                 minY: Infinity,
25563                 maxX: -Infinity,
25564                 maxY: -Infinity,
25565                 coords: coords,
25566                 props: props
25567             };
25568
25569             for (var i = 0; i < coords[0].length; i++) {
25570                 var p = coords[0][i];
25571                 item.minX = Math.min(item.minX, p[0]);
25572                 item.minY = Math.min(item.minY, p[1]);
25573                 item.maxX = Math.max(item.maxX, p[0]);
25574                 item.maxY = Math.max(item.maxY, p[1]);
25575             }
25576             return item;
25577         }
25578
25579         // index the osm-community-index
25580         var ociFeatureCollection = Object.values(features$3).map(function(feature) {
25581             // workaround for which-polygon: only supports `properties`, not `id`
25582             // https://github.com/mapbox/which-polygon/pull/6
25583             feature.properties = {
25584                 id: feature.id,
25585                 area: d3_geoArea(feature)   // also precompute areas
25586             };
25587             return feature;
25588         });
25589
25590
25591         var data = {
25592             community: {
25593                 features: features$3,
25594                 resources: resources,
25595                 query: whichPolygon_1({
25596                     type: 'FeatureCollection',
25597                     features: ociFeatureCollection
25598                 })
25599             },
25600             imagery: dataImagery,  //legacy
25601             presets: {
25602                 presets: presets,
25603                 defaults: defaults,
25604                 categories: categories,
25605                 fields: fields
25606             }
25607         };
25608
25609         // http://2ality.com/2015/01/es6-set-operations.html
25610
25611         // Difference (a \ b): create a set that contains those elements of set a that are not in set b.
25612         // This operation is also sometimes called minus (-).
25613         // var a = [1,2,3];
25614         // var b = [4,3,2];
25615         // utilArrayDifference(a, b)
25616         //   [1]
25617         // utilArrayDifference(b, a)
25618         //   [4]
25619         function utilArrayDifference(a, b) {
25620             var other = new Set(b);
25621             return Array.from(new Set(a))
25622                 .filter(function(v) { return !other.has(v); });
25623         }
25624
25625         // Intersection (a ∩ b): create a set that contains those elements of set a that are also in set b.
25626         // var a = [1,2,3];
25627         // var b = [4,3,2];
25628         // utilArrayIntersection(a, b)
25629         //   [2,3]
25630         function utilArrayIntersection(a, b) {
25631             var other = new Set(b);
25632             return Array.from(new Set(a))
25633                 .filter(function(v) { return other.has(v); });
25634         }
25635
25636         // Union (a ∪ b): create a set that contains the elements of both set a and set b.
25637         // var a = [1,2,3];
25638         // var b = [4,3,2];
25639         // utilArrayUnion(a, b)
25640         //   [1,2,3,4]
25641         function utilArrayUnion(a, b) {
25642             var result = new Set(a);
25643             b.forEach(function(v) { result.add(v); });
25644             return Array.from(result);
25645         }
25646
25647         // Returns an Array with all the duplicates removed
25648         // var a = [1,1,2,3,3];
25649         // utilArrayUniq(a)
25650         //   [1,2,3]
25651         function utilArrayUniq(a) {
25652             return Array.from(new Set(a));
25653         }
25654
25655
25656         // Splits array into chunks of given chunk size
25657         // var a = [1,2,3,4,5,6,7];
25658         // utilArrayChunk(a, 3);
25659         //   [[1,2,3],[4,5,6],[7]];
25660         function utilArrayChunk(a, chunkSize) {
25661             if (!chunkSize || chunkSize < 0) return [a.slice()];
25662
25663             var result = new Array(Math.ceil(a.length / chunkSize));
25664             return Array.from(result, function(item, i) {
25665                 return a.slice(i * chunkSize, i * chunkSize + chunkSize);
25666             });
25667         }
25668
25669
25670         // Flattens two level array into a single level
25671         // var a = [[1,2,3],[4,5,6],[7]];
25672         // utilArrayFlatten(a);
25673         //   [1,2,3,4,5,6,7];
25674         function utilArrayFlatten(a) {
25675             return a.reduce(function(acc, val) {
25676                 return acc.concat(val);
25677             }, []);
25678         }
25679
25680
25681         // Groups the items of the Array according to the given key
25682         // `key` can be passed as a property or as a key function
25683         //
25684         // var pets = [
25685         //     { type: 'Dog', name: 'Spot' },
25686         //     { type: 'Cat', name: 'Tiger' },
25687         //     { type: 'Dog', name: 'Rover' },
25688         //     { type: 'Cat', name: 'Leo' }
25689         // ];
25690         //
25691         // utilArrayGroupBy(pets, 'type')
25692         //   {
25693         //     'Dog': [{type: 'Dog', name: 'Spot'}, {type: 'Dog', name: 'Rover'}],
25694         //     'Cat': [{type: 'Cat', name: 'Tiger'}, {type: 'Cat', name: 'Leo'}]
25695         //   }
25696         //
25697         // utilArrayGroupBy(pets, function(item) { return item.name.length; })
25698         //   {
25699         //     3: [{type: 'Cat', name: 'Leo'}],
25700         //     4: [{type: 'Dog', name: 'Spot'}],
25701         //     5: [{type: 'Cat', name: 'Tiger'}, {type: 'Dog', name: 'Rover'}]
25702         //   }
25703         function utilArrayGroupBy(a, key) {
25704             return a.reduce(function(acc, item) {
25705                 var group = (typeof key === 'function') ? key(item) : item[key];
25706                 (acc[group] = acc[group] || []).push(item);
25707                 return acc;
25708             }, {});
25709         }
25710
25711
25712         // Returns an Array with all the duplicates removed
25713         // where uniqueness determined by the given key
25714         // `key` can be passed as a property or as a key function
25715         //
25716         // var pets = [
25717         //     { type: 'Dog', name: 'Spot' },
25718         //     { type: 'Cat', name: 'Tiger' },
25719         //     { type: 'Dog', name: 'Rover' },
25720         //     { type: 'Cat', name: 'Leo' }
25721         // ];
25722         //
25723         // utilArrayUniqBy(pets, 'type')
25724         //   [
25725         //     { type: 'Dog', name: 'Spot' },
25726         //     { type: 'Cat', name: 'Tiger' }
25727         //   ]
25728         //
25729         // utilArrayUniqBy(pets, function(item) { return item.name.length; })
25730         //   [
25731         //     { type: 'Dog', name: 'Spot' },
25732         //     { type: 'Cat', name: 'Tiger' },
25733         //     { type: 'Cat', name: 'Leo' }
25734         //   }
25735         function utilArrayUniqBy(a, key) {
25736             var seen = new Set();
25737             return a.reduce(function(acc, item) {
25738                 var val = (typeof key === 'function') ? key(item) : item[key];
25739                 if (val && !seen.has(val)) {
25740                     seen.add(val);
25741                     acc.push(item);
25742                 }
25743                 return acc;
25744             }, []);
25745         }
25746
25747         var remove$1 = removeDiacritics;
25748
25749         var replacementList = [
25750           {
25751             base: ' ',
25752             chars: "\u00A0",
25753           }, {
25754             base: '0',
25755             chars: "\u07C0",
25756           }, {
25757             base: 'A',
25758             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",
25759           }, {
25760             base: 'AA',
25761             chars: "\uA732",
25762           }, {
25763             base: 'AE',
25764             chars: "\u00C6\u01FC\u01E2",
25765           }, {
25766             base: 'AO',
25767             chars: "\uA734",
25768           }, {
25769             base: 'AU',
25770             chars: "\uA736",
25771           }, {
25772             base: 'AV',
25773             chars: "\uA738\uA73A",
25774           }, {
25775             base: 'AY',
25776             chars: "\uA73C",
25777           }, {
25778             base: 'B',
25779             chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181",
25780           }, {
25781             base: 'C',
25782             chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B",
25783           }, {
25784             base: 'D',
25785             chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779",
25786           }, {
25787             base: 'Dh',
25788             chars: "\u00D0",
25789           }, {
25790             base: 'DZ',
25791             chars: "\u01F1\u01C4",
25792           }, {
25793             base: 'Dz',
25794             chars: "\u01F2\u01C5",
25795           }, {
25796             base: 'E',
25797             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",
25798           }, {
25799             base: 'F',
25800             chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B",
25801           }, {
25802             base: 'G',
25803             chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262",
25804           }, {
25805             base: 'H',
25806             chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D",
25807           }, {
25808             base: 'I',
25809             chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197",
25810           }, {
25811             base: 'J',
25812             chars: "\u24BF\uFF2A\u0134\u0248\u0237",
25813           }, {
25814             base: 'K',
25815             chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2",
25816           }, {
25817             base: 'L',
25818             chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780",
25819           }, {
25820             base: 'LJ',
25821             chars: "\u01C7",
25822           }, {
25823             base: 'Lj',
25824             chars: "\u01C8",
25825           }, {
25826             base: 'M',
25827             chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB",
25828           }, {
25829             base: 'N',
25830             chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E",
25831           }, {
25832             base: 'NJ',
25833             chars: "\u01CA",
25834           }, {
25835             base: 'Nj',
25836             chars: "\u01CB",
25837           }, {
25838             base: 'O',
25839             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",
25840           }, {
25841             base: 'OE',
25842             chars: "\u0152",
25843           }, {
25844             base: 'OI',
25845             chars: "\u01A2",
25846           }, {
25847             base: 'OO',
25848             chars: "\uA74E",
25849           }, {
25850             base: 'OU',
25851             chars: "\u0222",
25852           }, {
25853             base: 'P',
25854             chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754",
25855           }, {
25856             base: 'Q',
25857             chars: "\u24C6\uFF31\uA756\uA758\u024A",
25858           }, {
25859             base: 'R',
25860             chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782",
25861           }, {
25862             base: 'S',
25863             chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784",
25864           }, {
25865             base: 'T',
25866             chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786",
25867           }, {
25868             base: 'Th',
25869             chars: "\u00DE",
25870           }, {
25871             base: 'TZ',
25872             chars: "\uA728",
25873           }, {
25874             base: 'U',
25875             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",
25876           }, {
25877             base: 'V',
25878             chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245",
25879           }, {
25880             base: 'VY',
25881             chars: "\uA760",
25882           }, {
25883             base: 'W',
25884             chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72",
25885           }, {
25886             base: 'X',
25887             chars: "\u24CD\uFF38\u1E8A\u1E8C",
25888           }, {
25889             base: 'Y',
25890             chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE",
25891           }, {
25892             base: 'Z',
25893             chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762",
25894           }, {
25895             base: 'a',
25896             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",
25897           }, {
25898             base: 'aa',
25899             chars: "\uA733",
25900           }, {
25901             base: 'ae',
25902             chars: "\u00E6\u01FD\u01E3",
25903           }, {
25904             base: 'ao',
25905             chars: "\uA735",
25906           }, {
25907             base: 'au',
25908             chars: "\uA737",
25909           }, {
25910             base: 'av',
25911             chars: "\uA739\uA73B",
25912           }, {
25913             base: 'ay',
25914             chars: "\uA73D",
25915           }, {
25916             base: 'b',
25917             chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182",
25918           }, {
25919             base: 'c',
25920             chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184",
25921           }, {
25922             base: 'd',
25923             chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA",
25924           }, {
25925             base: 'dh',
25926             chars: "\u00F0",
25927           }, {
25928             base: 'dz',
25929             chars: "\u01F3\u01C6",
25930           }, {
25931             base: 'e',
25932             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",
25933           }, {
25934             base: 'f',
25935             chars: "\u24D5\uFF46\u1E1F\u0192",
25936           }, {
25937             base: 'ff',
25938             chars: "\uFB00",
25939           }, {
25940             base: 'fi',
25941             chars: "\uFB01",
25942           }, {
25943             base: 'fl',
25944             chars: "\uFB02",
25945           }, {
25946             base: 'ffi',
25947             chars: "\uFB03",
25948           }, {
25949             base: 'ffl',
25950             chars: "\uFB04",
25951           }, {
25952             base: 'g',
25953             chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79",
25954           }, {
25955             base: 'h',
25956             chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265",
25957           }, {
25958             base: 'hv',
25959             chars: "\u0195",
25960           }, {
25961             base: 'i',
25962             chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131",
25963           }, {
25964             base: 'j',
25965             chars: "\u24D9\uFF4A\u0135\u01F0\u0249",
25966           }, {
25967             base: 'k',
25968             chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3",
25969           }, {
25970             base: 'l',
25971             chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D",
25972           }, {
25973             base: 'lj',
25974             chars: "\u01C9",
25975           }, {
25976             base: 'm',
25977             chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F",
25978           }, {
25979             base: 'n',
25980             chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509",
25981           }, {
25982             base: 'nj',
25983             chars: "\u01CC",
25984           }, {
25985             base: 'o',
25986             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",
25987           }, {
25988             base: 'oe',
25989             chars: "\u0153",
25990           }, {
25991             base: 'oi',
25992             chars: "\u01A3",
25993           }, {
25994             base: 'oo',
25995             chars: "\uA74F",
25996           }, {
25997             base: 'ou',
25998             chars: "\u0223",
25999           }, {
26000             base: 'p',
26001             chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1",
26002           }, {
26003             base: 'q',
26004             chars: "\u24E0\uFF51\u024B\uA757\uA759",
26005           }, {
26006             base: 'r',
26007             chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783",
26008           }, {
26009             base: 's',
26010             chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282",
26011           }, {
26012             base: 'ss',
26013             chars: "\xDF",
26014           }, {
26015             base: 't',
26016             chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787",
26017           }, {
26018             base: 'th',
26019             chars: "\u00FE",
26020           }, {
26021             base: 'tz',
26022             chars: "\uA729",
26023           }, {
26024             base: 'u',
26025             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",
26026           }, {
26027             base: 'v',
26028             chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C",
26029           }, {
26030             base: 'vy',
26031             chars: "\uA761",
26032           }, {
26033             base: 'w',
26034             chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73",
26035           }, {
26036             base: 'x',
26037             chars: "\u24E7\uFF58\u1E8B\u1E8D",
26038           }, {
26039             base: 'y',
26040             chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF",
26041           }, {
26042             base: 'z',
26043             chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763",
26044           }
26045         ];
26046
26047         var diacriticsMap = {};
26048         for (var i$1 = 0; i$1 < replacementList.length; i$1 += 1) {
26049           var chars = replacementList[i$1].chars;
26050           for (var j = 0; j < chars.length; j += 1) {
26051             diacriticsMap[chars[j]] = replacementList[i$1].base;
26052           }
26053         }
26054
26055         function removeDiacritics(str) {
26056           return str.replace(/[^\u0000-\u007e]/g, function(c) {
26057             return diacriticsMap[c] || c;
26058           });
26059         }
26060
26061         var replacementList_1 = replacementList;
26062         var diacriticsMap_1 = diacriticsMap;
26063
26064         var diacritics = {
26065                 remove: remove$1,
26066                 replacementList: replacementList_1,
26067                 diacriticsMap: diacriticsMap_1
26068         };
26069
26070         var isArabic_1 = createCommonjsModule(function (module, exports) {
26071         Object.defineProperty(exports, "__esModule", { value: true });
26072         var arabicBlocks = [
26073             [0x0600, 0x06FF],
26074             [0x0750, 0x077F],
26075             [0x08A0, 0x08FF],
26076             [0xFB50, 0xFDFF],
26077             [0xFE70, 0xFEFF],
26078             [0x10E60, 0x10E7F],
26079             [0x1EC70, 0x1ECBF],
26080             [0x1EE00, 0x1EEFF] // Mathematical Alphabetic symbols https://www.unicode.org/charts/PDF/U1EE00.pdf
26081         ];
26082         function isArabic(char) {
26083             if (char.length > 1) {
26084                 // allow the newer chars?
26085                 throw new Error('isArabic works on only one-character strings');
26086             }
26087             var code = char.charCodeAt(0);
26088             for (var i = 0; i < arabicBlocks.length; i++) {
26089                 var block = arabicBlocks[i];
26090                 if (code >= block[0] && code <= block[1]) {
26091                     return true;
26092                 }
26093             }
26094             return false;
26095         }
26096         exports.isArabic = isArabic;
26097         function isMath(char) {
26098             if (char.length > 2) {
26099                 // allow the newer chars?
26100                 throw new Error('isMath works on only one-character strings');
26101             }
26102             var code = char.charCodeAt(0);
26103             return ((code >= 0x660 && code <= 0x66C) || (code >= 0x6F0 && code <= 0x6F9));
26104         }
26105         exports.isMath = isMath;
26106         });
26107
26108         unwrapExports(isArabic_1);
26109         var isArabic_2 = isArabic_1.isArabic;
26110         var isArabic_3 = isArabic_1.isMath;
26111
26112         var unicodeArabic = createCommonjsModule(function (module, exports) {
26113         Object.defineProperty(exports, "__esModule", { value: true });
26114         var arabicReference = {
26115             "alef": {
26116                 "normal": [
26117                     "\u0627"
26118                 ],
26119                 "madda_above": {
26120                     "normal": [
26121                         "\u0627\u0653",
26122                         "\u0622"
26123                     ],
26124                     "isolated": "\uFE81",
26125                     "final": "\uFE82"
26126                 },
26127                 "hamza_above": {
26128                     "normal": [
26129                         "\u0627\u0654",
26130                         "\u0623"
26131                     ],
26132                     "isolated": "\uFE83",
26133                     "final": "\uFE84"
26134                 },
26135                 "hamza_below": {
26136                     "normal": [
26137                         "\u0627\u0655",
26138                         "\u0625"
26139                     ],
26140                     "isolated": "\uFE87",
26141                     "final": "\uFE88"
26142                 },
26143                 "wasla": {
26144                     "normal": "\u0671",
26145                     "isolated": "\uFB50",
26146                     "final": "\uFB51"
26147                 },
26148                 "wavy_hamza_above": [
26149                     "\u0672"
26150                 ],
26151                 "wavy_hamza_below": [
26152                     "\u0627\u065F",
26153                     "\u0673"
26154                 ],
26155                 "high_hamza": [
26156                     "\u0675",
26157                     "\u0627\u0674"
26158                 ],
26159                 "indic_two_above": [
26160                     "\u0773"
26161                 ],
26162                 "indic_three_above": [
26163                     "\u0774"
26164                 ],
26165                 "fathatan": {
26166                     "normal": [
26167                         "\u0627\u064B"
26168                     ],
26169                     "final": "\uFD3C",
26170                     "isolated": "\uFD3D"
26171                 },
26172                 "isolated": "\uFE8D",
26173                 "final": "\uFE8E"
26174             },
26175             "beh": {
26176                 "normal": [
26177                     "\u0628"
26178                 ],
26179                 "dotless": [
26180                     "\u066E"
26181                 ],
26182                 "three_dots_horizontally_below": [
26183                     "\u0750"
26184                 ],
26185                 "dot_below_three_dots_above": [
26186                     "\u0751"
26187                 ],
26188                 "three_dots_pointing_upwards_below": [
26189                     "\u0752"
26190                 ],
26191                 "three_dots_pointing_upwards_below_two_dots_above": [
26192                     "\u0753"
26193                 ],
26194                 "two_dots_below_dot_above": [
26195                     "\u0754"
26196                 ],
26197                 "inverted_small_v_below": [
26198                     "\u0755"
26199                 ],
26200                 "small_v": [
26201                     "\u0756"
26202                 ],
26203                 "small_v_below": [
26204                     "\u08A0"
26205                 ],
26206                 "hamza_above": [
26207                     "\u08A1"
26208                 ],
26209                 "small_meem_above": [
26210                     "\u08B6"
26211                 ],
26212                 "isolated": "\uFE8F",
26213                 "final": "\uFE90",
26214                 "initial": "\uFE91",
26215                 "medial": "\uFE92"
26216             },
26217             "teh marbuta": {
26218                 "normal": [
26219                     "\u0629"
26220                 ],
26221                 "isolated": "\uFE93",
26222                 "final": "\uFE94"
26223             },
26224             "teh": {
26225                 "normal": [
26226                     "\u062A"
26227                 ],
26228                 "ring": [
26229                     "\u067C"
26230                 ],
26231                 "three_dots_above_downwards": [
26232                     "\u067D"
26233                 ],
26234                 "small_teh_above": [
26235                     "\u08B8"
26236                 ],
26237                 "isolated": "\uFE95",
26238                 "final": "\uFE96",
26239                 "initial": "\uFE97",
26240                 "medial": "\uFE98"
26241             },
26242             "theh": {
26243                 "normal": [
26244                     "\u062B"
26245                 ],
26246                 "isolated": "\uFE99",
26247                 "final": "\uFE9A",
26248                 "initial": "\uFE9B",
26249                 "medial": "\uFE9C"
26250             },
26251             "jeem": {
26252                 "normal": [
26253                     "\u062C"
26254                 ],
26255                 "two_dots_above": [
26256                     "\u08A2"
26257                 ],
26258                 "isolated": "\uFE9D",
26259                 "final": "\uFE9E",
26260                 "initial": "\uFE9F",
26261                 "medial": "\uFEA0"
26262             },
26263             "hah": {
26264                 "normal": [
26265                     "\u062D"
26266                 ],
26267                 "hamza_above": [
26268                     "\u0681"
26269                 ],
26270                 "two_dots_vertical_above": [
26271                     "\u0682"
26272                 ],
26273                 "three_dots_above": [
26274                     "\u0685"
26275                 ],
26276                 "two_dots_above": [
26277                     "\u0757"
26278                 ],
26279                 "three_dots_pointing_upwards_below": [
26280                     "\u0758"
26281                 ],
26282                 "small_tah_below": [
26283                     "\u076E"
26284                 ],
26285                 "small_tah_two_dots": [
26286                     "\u076F"
26287                 ],
26288                 "small_tah_above": [
26289                     "\u0772"
26290                 ],
26291                 "indic_four_below": [
26292                     "\u077C"
26293                 ],
26294                 "isolated": "\uFEA1",
26295                 "final": "\uFEA2",
26296                 "initial": "\uFEA3",
26297                 "medial": "\uFEA4"
26298             },
26299             "khah": {
26300                 "normal": [
26301                     "\u062E"
26302                 ],
26303                 "isolated": "\uFEA5",
26304                 "final": "\uFEA6",
26305                 "initial": "\uFEA7",
26306                 "medial": "\uFEA8"
26307             },
26308             "dal": {
26309                 "normal": [
26310                     "\u062F"
26311                 ],
26312                 "ring": [
26313                     "\u0689"
26314                 ],
26315                 "dot_below": [
26316                     "\u068A"
26317                 ],
26318                 "dot_below_small_tah": [
26319                     "\u068B"
26320                 ],
26321                 "three_dots_above_downwards": [
26322                     "\u068F"
26323                 ],
26324                 "four_dots_above": [
26325                     "\u0690"
26326                 ],
26327                 "inverted_v": [
26328                     "\u06EE"
26329                 ],
26330                 "two_dots_vertically_below_small_tah": [
26331                     "\u0759"
26332                 ],
26333                 "inverted_small_v_below": [
26334                     "\u075A"
26335                 ],
26336                 "three_dots_below": [
26337                     "\u08AE"
26338                 ],
26339                 "isolated": "\uFEA9",
26340                 "final": "\uFEAA"
26341             },
26342             "thal": {
26343                 "normal": [
26344                     "\u0630"
26345                 ],
26346                 "isolated": "\uFEAB",
26347                 "final": "\uFEAC"
26348             },
26349             "reh": {
26350                 "normal": [
26351                     "\u0631"
26352                 ],
26353                 "small_v": [
26354                     "\u0692"
26355                 ],
26356                 "ring": [
26357                     "\u0693"
26358                 ],
26359                 "dot_below": [
26360                     "\u0694"
26361                 ],
26362                 "small_v_below": [
26363                     "\u0695"
26364                 ],
26365                 "dot_below_dot_above": [
26366                     "\u0696"
26367                 ],
26368                 "two_dots_above": [
26369                     "\u0697"
26370                 ],
26371                 "four_dots_above": [
26372                     "\u0699"
26373                 ],
26374                 "inverted_v": [
26375                     "\u06EF"
26376                 ],
26377                 "stroke": [
26378                     "\u075B"
26379                 ],
26380                 "two_dots_vertically_above": [
26381                     "\u076B"
26382                 ],
26383                 "hamza_above": [
26384                     "\u076C"
26385                 ],
26386                 "small_tah_two_dots": [
26387                     "\u0771"
26388                 ],
26389                 "loop": [
26390                     "\u08AA"
26391                 ],
26392                 "small_noon_above": [
26393                     "\u08B9"
26394                 ],
26395                 "isolated": "\uFEAD",
26396                 "final": "\uFEAE"
26397             },
26398             "zain": {
26399                 "normal": [
26400                     "\u0632"
26401                 ],
26402                 "inverted_v_above": [
26403                     "\u08B2"
26404                 ],
26405                 "isolated": "\uFEAF",
26406                 "final": "\uFEB0"
26407             },
26408             "seen": {
26409                 "normal": [
26410                     "\u0633"
26411                 ],
26412                 "dot_below_dot_above": [
26413                     "\u069A"
26414                 ],
26415                 "three_dots_below": [
26416                     "\u069B"
26417                 ],
26418                 "three_dots_below_three_dots_above": [
26419                     "\u069C"
26420                 ],
26421                 "four_dots_above": [
26422                     "\u075C"
26423                 ],
26424                 "two_dots_vertically_above": [
26425                     "\u076D"
26426                 ],
26427                 "small_tah_two_dots": [
26428                     "\u0770"
26429                 ],
26430                 "indic_four_above": [
26431                     "\u077D"
26432                 ],
26433                 "inverted_v": [
26434                     "\u077E"
26435                 ],
26436                 "isolated": "\uFEB1",
26437                 "final": "\uFEB2",
26438                 "initial": "\uFEB3",
26439                 "medial": "\uFEB4"
26440             },
26441             "sheen": {
26442                 "normal": [
26443                     "\u0634"
26444                 ],
26445                 "dot_below": [
26446                     "\u06FA"
26447                 ],
26448                 "isolated": "\uFEB5",
26449                 "final": "\uFEB6",
26450                 "initial": "\uFEB7",
26451                 "medial": "\uFEB8"
26452             },
26453             "sad": {
26454                 "normal": [
26455                     "\u0635"
26456                 ],
26457                 "two_dots_below": [
26458                     "\u069D"
26459                 ],
26460                 "three_dots_above": [
26461                     "\u069E"
26462                 ],
26463                 "three_dots_below": [
26464                     "\u08AF"
26465                 ],
26466                 "isolated": "\uFEB9",
26467                 "final": "\uFEBA",
26468                 "initial": "\uFEBB",
26469                 "medial": "\uFEBC"
26470             },
26471             "dad": {
26472                 "normal": [
26473                     "\u0636"
26474                 ],
26475                 "dot_below": [
26476                     "\u06FB"
26477                 ],
26478                 "isolated": "\uFEBD",
26479                 "final": "\uFEBE",
26480                 "initial": "\uFEBF",
26481                 "medial": "\uFEC0"
26482             },
26483             "tah": {
26484                 "normal": [
26485                     "\u0637"
26486                 ],
26487                 "three_dots_above": [
26488                     "\u069F"
26489                 ],
26490                 "two_dots_above": [
26491                     "\u08A3"
26492                 ],
26493                 "isolated": "\uFEC1",
26494                 "final": "\uFEC2",
26495                 "initial": "\uFEC3",
26496                 "medial": "\uFEC4"
26497             },
26498             "zah": {
26499                 "normal": [
26500                     "\u0638"
26501                 ],
26502                 "isolated": "\uFEC5",
26503                 "final": "\uFEC6",
26504                 "initial": "\uFEC7",
26505                 "medial": "\uFEC8"
26506             },
26507             "ain": {
26508                 "normal": [
26509                     "\u0639"
26510                 ],
26511                 "three_dots_above": [
26512                     "\u06A0"
26513                 ],
26514                 "two_dots_above": [
26515                     "\u075D"
26516                 ],
26517                 "three_dots_pointing_downwards_above": [
26518                     "\u075E"
26519                 ],
26520                 "two_dots_vertically_above": [
26521                     "\u075F"
26522                 ],
26523                 "three_dots_below": [
26524                     "\u08B3"
26525                 ],
26526                 "isolated": "\uFEC9",
26527                 "final": "\uFECA",
26528                 "initial": "\uFECB",
26529                 "medial": "\uFECC"
26530             },
26531             "ghain": {
26532                 "normal": [
26533                     "\u063A"
26534                 ],
26535                 "dot_below": [
26536                     "\u06FC"
26537                 ],
26538                 "isolated": "\uFECD",
26539                 "final": "\uFECE",
26540                 "initial": "\uFECF",
26541                 "medial": "\uFED0"
26542             },
26543             "feh": {
26544                 "normal": [
26545                     "\u0641"
26546                 ],
26547                 "dotless": [
26548                     "\u06A1"
26549                 ],
26550                 "dot_moved_below": [
26551                     "\u06A2"
26552                 ],
26553                 "dot_below": [
26554                     "\u06A3"
26555                 ],
26556                 "three_dots_below": [
26557                     "\u06A5"
26558                 ],
26559                 "two_dots_below": [
26560                     "\u0760"
26561                 ],
26562                 "three_dots_pointing_upwards_below": [
26563                     "\u0761"
26564                 ],
26565                 "dot_below_three_dots_above": [
26566                     "\u08A4"
26567                 ],
26568                 "isolated": "\uFED1",
26569                 "final": "\uFED2",
26570                 "initial": "\uFED3",
26571                 "medial": "\uFED4"
26572             },
26573             "qaf": {
26574                 "normal": [
26575                     "\u0642"
26576                 ],
26577                 "dotless": [
26578                     "\u066F"
26579                 ],
26580                 "dot_above": [
26581                     "\u06A7"
26582                 ],
26583                 "three_dots_above": [
26584                     "\u06A8"
26585                 ],
26586                 "dot_below": [
26587                     "\u08A5"
26588                 ],
26589                 "isolated": "\uFED5",
26590                 "final": "\uFED6",
26591                 "initial": "\uFED7",
26592                 "medial": "\uFED8"
26593             },
26594             "kaf": {
26595                 "normal": [
26596                     "\u0643"
26597                 ],
26598                 "swash": [
26599                     "\u06AA"
26600                 ],
26601                 "ring": [
26602                     "\u06AB"
26603                 ],
26604                 "dot_above": [
26605                     "\u06AC"
26606                 ],
26607                 "three_dots_below": [
26608                     "\u06AE"
26609                 ],
26610                 "two_dots_above": [
26611                     "\u077F"
26612                 ],
26613                 "dot_below": [
26614                     "\u08B4"
26615                 ],
26616                 "isolated": "\uFED9",
26617                 "final": "\uFEDA",
26618                 "initial": "\uFEDB",
26619                 "medial": "\uFEDC"
26620             },
26621             "lam": {
26622                 "normal": [
26623                     "\u0644"
26624                 ],
26625                 "small_v": [
26626                     "\u06B5"
26627                 ],
26628                 "dot_above": [
26629                     "\u06B6"
26630                 ],
26631                 "three_dots_above": [
26632                     "\u06B7"
26633                 ],
26634                 "three_dots_below": [
26635                     "\u06B8"
26636                 ],
26637                 "bar": [
26638                     "\u076A"
26639                 ],
26640                 "double_bar": [
26641                     "\u08A6"
26642                 ],
26643                 "isolated": "\uFEDD",
26644                 "final": "\uFEDE",
26645                 "initial": "\uFEDF",
26646                 "medial": "\uFEE0"
26647             },
26648             "meem": {
26649                 "normal": [
26650                     "\u0645"
26651                 ],
26652                 "dot_above": [
26653                     "\u0765"
26654                 ],
26655                 "dot_below": [
26656                     "\u0766"
26657                 ],
26658                 "three_dots_above": [
26659                     "\u08A7"
26660                 ],
26661                 "isolated": "\uFEE1",
26662                 "final": "\uFEE2",
26663                 "initial": "\uFEE3",
26664                 "medial": "\uFEE4"
26665             },
26666             "noon": {
26667                 "normal": [
26668                     "\u0646"
26669                 ],
26670                 "dot_below": [
26671                     "\u06B9"
26672                 ],
26673                 "ring": [
26674                     "\u06BC"
26675                 ],
26676                 "three_dots_above": [
26677                     "\u06BD"
26678                 ],
26679                 "two_dots_below": [
26680                     "\u0767"
26681                 ],
26682                 "small_tah": [
26683                     "\u0768"
26684                 ],
26685                 "small_v": [
26686                     "\u0769"
26687                 ],
26688                 "isolated": "\uFEE5",
26689                 "final": "\uFEE6",
26690                 "initial": "\uFEE7",
26691                 "medial": "\uFEE8"
26692             },
26693             "heh": {
26694                 "normal": [
26695                     "\u0647"
26696                 ],
26697                 "isolated": "\uFEE9",
26698                 "final": "\uFEEA",
26699                 "initial": "\uFEEB",
26700                 "medial": "\uFEEC"
26701             },
26702             "waw": {
26703                 "normal": [
26704                     "\u0648"
26705                 ],
26706                 "hamza_above": {
26707                     "normal": [
26708                         "\u0624",
26709                         "\u0648\u0654"
26710                     ],
26711                     "isolated": "\uFE85",
26712                     "final": "\uFE86"
26713                 },
26714                 "high_hamza": [
26715                     "\u0676",
26716                     "\u0648\u0674"
26717                 ],
26718                 "ring": [
26719                     "\u06C4"
26720                 ],
26721                 "two_dots_above": [
26722                     "\u06CA"
26723                 ],
26724                 "dot_above": [
26725                     "\u06CF"
26726                 ],
26727                 "indic_two_above": [
26728                     "\u0778"
26729                 ],
26730                 "indic_three_above": [
26731                     "\u0779"
26732                 ],
26733                 "dot_within": [
26734                     "\u08AB"
26735                 ],
26736                 "isolated": "\uFEED",
26737                 "final": "\uFEEE"
26738             },
26739             "alef_maksura": {
26740                 "normal": [
26741                     "\u0649"
26742                 ],
26743                 "hamza_above": [
26744                     "\u0626",
26745                     "\u064A\u0654"
26746                 ],
26747                 "initial": "\uFBE8",
26748                 "medial": "\uFBE9",
26749                 "isolated": "\uFEEF",
26750                 "final": "\uFEF0"
26751             },
26752             "yeh": {
26753                 "normal": [
26754                     "\u064A"
26755                 ],
26756                 "hamza_above": {
26757                     "normal": [
26758                         "\u0626",
26759                         "\u0649\u0654"
26760                     ],
26761                     "isolated": "\uFE89",
26762                     "final": "\uFE8A",
26763                     "initial": "\uFE8B",
26764                     "medial": "\uFE8C"
26765                 },
26766                 "two_dots_below_hamza_above": [
26767                     "\u08A8"
26768                 ],
26769                 "high_hamza": [
26770                     "\u0678",
26771                     "\u064A\u0674"
26772                 ],
26773                 "tail": [
26774                     "\u06CD"
26775                 ],
26776                 "small_v": [
26777                     "\u06CE"
26778                 ],
26779                 "three_dots_below": [
26780                     "\u06D1"
26781                 ],
26782                 "two_dots_below_dot_above": [
26783                     "\u08A9"
26784                 ],
26785                 "two_dots_below_small_noon_above": [
26786                     "\u08BA"
26787                 ],
26788                 "isolated": "\uFEF1",
26789                 "final": "\uFEF2",
26790                 "initial": "\uFEF3",
26791                 "medial": "\uFEF4"
26792             },
26793             "tteh": {
26794                 "normal": [
26795                     "\u0679"
26796                 ],
26797                 "isolated": "\uFB66",
26798                 "final": "\uFB67",
26799                 "initial": "\uFB68",
26800                 "medial": "\uFB69"
26801             },
26802             "tteheh": {
26803                 "normal": [
26804                     "\u067A"
26805                 ],
26806                 "isolated": "\uFB5E",
26807                 "final": "\uFB5F",
26808                 "initial": "\uFB60",
26809                 "medial": "\uFB61"
26810             },
26811             "beeh": {
26812                 "normal": [
26813                     "\u067B"
26814                 ],
26815                 "isolated": "\uFB52",
26816                 "final": "\uFB53",
26817                 "initial": "\uFB54",
26818                 "medial": "\uFB55"
26819             },
26820             "peh": {
26821                 "normal": [
26822                     "\u067E"
26823                 ],
26824                 "small_meem_above": [
26825                     "\u08B7"
26826                 ],
26827                 "isolated": "\uFB56",
26828                 "final": "\uFB57",
26829                 "initial": "\uFB58",
26830                 "medial": "\uFB59"
26831             },
26832             "teheh": {
26833                 "normal": [
26834                     "\u067F"
26835                 ],
26836                 "isolated": "\uFB62",
26837                 "final": "\uFB63",
26838                 "initial": "\uFB64",
26839                 "medial": "\uFB65"
26840             },
26841             "beheh": {
26842                 "normal": [
26843                     "\u0680"
26844                 ],
26845                 "isolated": "\uFB5A",
26846                 "final": "\uFB5B",
26847                 "initial": "\uFB5C",
26848                 "medial": "\uFB5D"
26849             },
26850             "nyeh": {
26851                 "normal": [
26852                     "\u0683"
26853                 ],
26854                 "isolated": "\uFB76",
26855                 "final": "\uFB77",
26856                 "initial": "\uFB78",
26857                 "medial": "\uFB79"
26858             },
26859             "dyeh": {
26860                 "normal": [
26861                     "\u0684"
26862                 ],
26863                 "isolated": "\uFB72",
26864                 "final": "\uFB73",
26865                 "initial": "\uFB74",
26866                 "medial": "\uFB75"
26867             },
26868             "tcheh": {
26869                 "normal": [
26870                     "\u0686"
26871                 ],
26872                 "dot_above": [
26873                     "\u06BF"
26874                 ],
26875                 "isolated": "\uFB7A",
26876                 "final": "\uFB7B",
26877                 "initial": "\uFB7C",
26878                 "medial": "\uFB7D"
26879             },
26880             "tcheheh": {
26881                 "normal": [
26882                     "\u0687"
26883                 ],
26884                 "isolated": "\uFB7E",
26885                 "final": "\uFB7F",
26886                 "initial": "\uFB80",
26887                 "medial": "\uFB81"
26888             },
26889             "ddal": {
26890                 "normal": [
26891                     "\u0688"
26892                 ],
26893                 "isolated": "\uFB88",
26894                 "final": "\uFB89"
26895             },
26896             "dahal": {
26897                 "normal": [
26898                     "\u068C"
26899                 ],
26900                 "isolated": "\uFB84",
26901                 "final": "\uFB85"
26902             },
26903             "ddahal": {
26904                 "normal": [
26905                     "\u068D"
26906                 ],
26907                 "isolated": "\uFB82",
26908                 "final": "\uFB83"
26909             },
26910             "dul": {
26911                 "normal": [
26912                     "\u068F",
26913                     "\u068E"
26914                 ],
26915                 "isolated": "\uFB86",
26916                 "final": "\uFB87"
26917             },
26918             "rreh": {
26919                 "normal": [
26920                     "\u0691"
26921                 ],
26922                 "isolated": "\uFB8C",
26923                 "final": "\uFB8D"
26924             },
26925             "jeh": {
26926                 "normal": [
26927                     "\u0698"
26928                 ],
26929                 "isolated": "\uFB8A",
26930                 "final": "\uFB8B"
26931             },
26932             "veh": {
26933                 "normal": [
26934                     "\u06A4"
26935                 ],
26936                 "isolated": "\uFB6A",
26937                 "final": "\uFB6B",
26938                 "initial": "\uFB6C",
26939                 "medial": "\uFB6D"
26940             },
26941             "peheh": {
26942                 "normal": [
26943                     "\u06A6"
26944                 ],
26945                 "isolated": "\uFB6E",
26946                 "final": "\uFB6F",
26947                 "initial": "\uFB70",
26948                 "medial": "\uFB71"
26949             },
26950             "keheh": {
26951                 "normal": [
26952                     "\u06A9"
26953                 ],
26954                 "dot_above": [
26955                     "\u0762"
26956                 ],
26957                 "three_dots_above": [
26958                     "\u0763"
26959                 ],
26960                 "three_dots_pointing_upwards_below": [
26961                     "\u0764"
26962                 ],
26963                 "isolated": "\uFB8E",
26964                 "final": "\uFB8F",
26965                 "initial": "\uFB90",
26966                 "medial": "\uFB91"
26967             },
26968             "ng": {
26969                 "normal": [
26970                     "\u06AD"
26971                 ],
26972                 "isolated": "\uFBD3",
26973                 "final": "\uFBD4",
26974                 "initial": "\uFBD5",
26975                 "medial": "\uFBD6"
26976             },
26977             "gaf": {
26978                 "normal": [
26979                     "\u06AF"
26980                 ],
26981                 "ring": [
26982                     "\u06B0"
26983                 ],
26984                 "two_dots_below": [
26985                     "\u06B2"
26986                 ],
26987                 "three_dots_above": [
26988                     "\u06B4"
26989                 ],
26990                 "inverted_stroke": [
26991                     "\u08B0"
26992                 ],
26993                 "isolated": "\uFB92",
26994                 "final": "\uFB93",
26995                 "initial": "\uFB94",
26996                 "medial": "\uFB95"
26997             },
26998             "ngoeh": {
26999                 "normal": [
27000                     "\u06B1"
27001                 ],
27002                 "isolated": "\uFB9A",
27003                 "final": "\uFB9B",
27004                 "initial": "\uFB9C",
27005                 "medial": "\uFB9D"
27006             },
27007             "gueh": {
27008                 "normal": [
27009                     "\u06B3"
27010                 ],
27011                 "isolated": "\uFB96",
27012                 "final": "\uFB97",
27013                 "initial": "\uFB98",
27014                 "medial": "\uFB99"
27015             },
27016             "noon ghunna": {
27017                 "normal": [
27018                     "\u06BA"
27019                 ],
27020                 "isolated": "\uFB9E",
27021                 "final": "\uFB9F"
27022             },
27023             "rnoon": {
27024                 "normal": [
27025                     "\u06BB"
27026                 ],
27027                 "isolated": "\uFBA0",
27028                 "final": "\uFBA1",
27029                 "initial": "\uFBA2",
27030                 "medial": "\uFBA3"
27031             },
27032             "heh doachashmee": {
27033                 "normal": [
27034                     "\u06BE"
27035                 ],
27036                 "isolated": "\uFBAA",
27037                 "final": "\uFBAB",
27038                 "initial": "\uFBAC",
27039                 "medial": "\uFBAD"
27040             },
27041             "heh goal": {
27042                 "normal": [
27043                     "\u06C1"
27044                 ],
27045                 "hamza_above": [
27046                     "\u06C1\u0654",
27047                     "\u06C2"
27048                 ],
27049                 "isolated": "\uFBA6",
27050                 "final": "\uFBA7",
27051                 "initial": "\uFBA8",
27052                 "medial": "\uFBA9"
27053             },
27054             "teh marbuta goal": {
27055                 "normal": [
27056                     "\u06C3"
27057                 ]
27058             },
27059             "kirghiz oe": {
27060                 "normal": [
27061                     "\u06C5"
27062                 ],
27063                 "isolated": "\uFBE0",
27064                 "final": "\uFBE1"
27065             },
27066             "oe": {
27067                 "normal": [
27068                     "\u06C6"
27069                 ],
27070                 "isolated": "\uFBD9",
27071                 "final": "\uFBDA"
27072             },
27073             "u": {
27074                 "normal": [
27075                     "\u06C7"
27076                 ],
27077                 "hamza_above": {
27078                     "normal": [
27079                         "\u0677",
27080                         "\u06C7\u0674"
27081                     ],
27082                     "isolated": "\uFBDD"
27083                 },
27084                 "isolated": "\uFBD7",
27085                 "final": "\uFBD8"
27086             },
27087             "yu": {
27088                 "normal": [
27089                     "\u06C8"
27090                 ],
27091                 "isolated": "\uFBDB",
27092                 "final": "\uFBDC"
27093             },
27094             "kirghiz yu": {
27095                 "normal": [
27096                     "\u06C9"
27097                 ],
27098                 "isolated": "\uFBE2",
27099                 "final": "\uFBE3"
27100             },
27101             "ve": {
27102                 "normal": [
27103                     "\u06CB"
27104                 ],
27105                 "isolated": "\uFBDE",
27106                 "final": "\uFBDF"
27107             },
27108             "farsi yeh": {
27109                 "normal": [
27110                     "\u06CC"
27111                 ],
27112                 "indic_two_above": [
27113                     "\u0775"
27114                 ],
27115                 "indic_three_above": [
27116                     "\u0776"
27117                 ],
27118                 "indic_four_above": [
27119                     "\u0777"
27120                 ],
27121                 "isolated": "\uFBFC",
27122                 "final": "\uFBFD",
27123                 "initial": "\uFBFE",
27124                 "medial": "\uFBFF"
27125             },
27126             "e": {
27127                 "normal": [
27128                     "\u06D0"
27129                 ],
27130                 "isolated": "\uFBE4",
27131                 "final": "\uFBE5",
27132                 "initial": "\uFBE6",
27133                 "medial": "\uFBE7"
27134             },
27135             "yeh barree": {
27136                 "normal": [
27137                     "\u06D2"
27138                 ],
27139                 "hamza_above": {
27140                     "normal": [
27141                         "\u06D2\u0654",
27142                         "\u06D3"
27143                     ],
27144                     "isolated": "\uFBB0",
27145                     "final": "\uFBB1"
27146                 },
27147                 "indic_two_above": [
27148                     "\u077A"
27149                 ],
27150                 "indic_three_above": [
27151                     "\u077B"
27152                 ],
27153                 "isolated": "\uFBAE",
27154                 "final": "\uFBAF"
27155             },
27156             "ae": {
27157                 "normal": [
27158                     "\u06D5"
27159                 ],
27160                 "isolated": "\u06D5",
27161                 "final": "\uFEEA",
27162                 "yeh_above": {
27163                     "normal": [
27164                         "\u06C0",
27165                         "\u06D5\u0654"
27166                     ],
27167                     "isolated": "\uFBA4",
27168                     "final": "\uFBA5"
27169                 }
27170             },
27171             "rohingya yeh": {
27172                 "normal": [
27173                     "\u08AC"
27174                 ]
27175             },
27176             "low alef": {
27177                 "normal": [
27178                     "\u08AD"
27179                 ]
27180             },
27181             "straight waw": {
27182                 "normal": [
27183                     "\u08B1"
27184                 ]
27185             },
27186             "african feh": {
27187                 "normal": [
27188                     "\u08BB"
27189                 ]
27190             },
27191             "african qaf": {
27192                 "normal": [
27193                     "\u08BC"
27194                 ]
27195             },
27196             "african noon": {
27197                 "normal": [
27198                     "\u08BD"
27199                 ]
27200             }
27201         };
27202         exports.default = arabicReference;
27203         });
27204
27205         unwrapExports(unicodeArabic);
27206
27207         var unicodeLigatures = createCommonjsModule(function (module, exports) {
27208         Object.defineProperty(exports, "__esModule", { value: true });
27209         var ligatureReference = {
27210             "\u0626\u0627": {
27211                 "isolated": "\uFBEA",
27212                 "final": "\uFBEB"
27213             },
27214             "\u0626\u06D5": {
27215                 "isolated": "\uFBEC",
27216                 "final": "\uFBED"
27217             },
27218             "\u0626\u0648": {
27219                 "isolated": "\uFBEE",
27220                 "final": "\uFBEF"
27221             },
27222             "\u0626\u06C7": {
27223                 "isolated": "\uFBF0",
27224                 "final": "\uFBF1"
27225             },
27226             "\u0626\u06C6": {
27227                 "isolated": "\uFBF2",
27228                 "final": "\uFBF3"
27229             },
27230             "\u0626\u06C8": {
27231                 "isolated": "\uFBF4",
27232                 "final": "\uFBF5"
27233             },
27234             "\u0626\u06D0": {
27235                 "isolated": "\uFBF6",
27236                 "final": "\uFBF7",
27237                 "initial": "\uFBF8"
27238             },
27239             "\u0626\u0649": {
27240                 "uighur_kirghiz": {
27241                     "isolated": "\uFBF9",
27242                     "final": "\uFBFA",
27243                     "initial": "\uFBFB"
27244                 },
27245                 "isolated": "\uFC03",
27246                 "final": "\uFC68"
27247             },
27248             "\u0626\u062C": {
27249                 "isolated": "\uFC00",
27250                 "initial": "\uFC97"
27251             },
27252             "\u0626\u062D": {
27253                 "isolated": "\uFC01",
27254                 "initial": "\uFC98"
27255             },
27256             "\u0626\u0645": {
27257                 "isolated": "\uFC02",
27258                 "final": "\uFC66",
27259                 "initial": "\uFC9A",
27260                 "medial": "\uFCDF"
27261             },
27262             "\u0626\u064A": {
27263                 "isolated": "\uFC04",
27264                 "final": "\uFC69"
27265             },
27266             "\u0628\u062C": {
27267                 "isolated": "\uFC05",
27268                 "initial": "\uFC9C"
27269             },
27270             "\u0628\u062D": {
27271                 "isolated": "\uFC06",
27272                 "initial": "\uFC9D"
27273             },
27274             "\u0628\u062E": {
27275                 "isolated": "\uFC07",
27276                 "initial": "\uFC9E"
27277             },
27278             "\u0628\u0645": {
27279                 "isolated": "\uFC08",
27280                 "final": "\uFC6C",
27281                 "initial": "\uFC9F",
27282                 "medial": "\uFCE1"
27283             },
27284             "\u0628\u0649": {
27285                 "isolated": "\uFC09",
27286                 "final": "\uFC6E"
27287             },
27288             "\u0628\u064A": {
27289                 "isolated": "\uFC0A",
27290                 "final": "\uFC6F"
27291             },
27292             "\u062A\u062C": {
27293                 "isolated": "\uFC0B",
27294                 "initial": "\uFCA1"
27295             },
27296             "\u062A\u062D": {
27297                 "isolated": "\uFC0C",
27298                 "initial": "\uFCA2"
27299             },
27300             "\u062A\u062E": {
27301                 "isolated": "\uFC0D",
27302                 "initial": "\uFCA3"
27303             },
27304             "\u062A\u0645": {
27305                 "isolated": "\uFC0E",
27306                 "final": "\uFC72",
27307                 "initial": "\uFCA4",
27308                 "medial": "\uFCE3"
27309             },
27310             "\u062A\u0649": {
27311                 "isolated": "\uFC0F",
27312                 "final": "\uFC74"
27313             },
27314             "\u062A\u064A": {
27315                 "isolated": "\uFC10",
27316                 "final": "\uFC75"
27317             },
27318             "\u062B\u062C": {
27319                 "isolated": "\uFC11"
27320             },
27321             "\u062B\u0645": {
27322                 "isolated": "\uFC12",
27323                 "final": "\uFC78",
27324                 "initial": "\uFCA6",
27325                 "medial": "\uFCE5"
27326             },
27327             "\u062B\u0649": {
27328                 "isolated": "\uFC13",
27329                 "final": "\uFC7A"
27330             },
27331             "\u062B\u0648": {
27332                 "isolated": "\uFC14"
27333             },
27334             "\u062C\u062D": {
27335                 "isolated": "\uFC15",
27336                 "initial": "\uFCA7"
27337             },
27338             "\u062C\u0645": {
27339                 "isolated": "\uFC16",
27340                 "initial": "\uFCA8"
27341             },
27342             "\u062D\u062C": {
27343                 "isolated": "\uFC17",
27344                 "initial": "\uFCA9"
27345             },
27346             "\u062D\u0645": {
27347                 "isolated": "\uFC18",
27348                 "initial": "\uFCAA"
27349             },
27350             "\u062E\u062C": {
27351                 "isolated": "\uFC19",
27352                 "initial": "\uFCAB"
27353             },
27354             "\u062E\u062D": {
27355                 "isolated": "\uFC1A"
27356             },
27357             "\u062E\u0645": {
27358                 "isolated": "\uFC1B",
27359                 "initial": "\uFCAC"
27360             },
27361             "\u0633\u062C": {
27362                 "isolated": "\uFC1C",
27363                 "initial": "\uFCAD",
27364                 "medial": "\uFD34"
27365             },
27366             "\u0633\u062D": {
27367                 "isolated": "\uFC1D",
27368                 "initial": "\uFCAE",
27369                 "medial": "\uFD35"
27370             },
27371             "\u0633\u062E": {
27372                 "isolated": "\uFC1E",
27373                 "initial": "\uFCAF",
27374                 "medial": "\uFD36"
27375             },
27376             "\u0633\u0645": {
27377                 "isolated": "\uFC1F",
27378                 "initial": "\uFCB0",
27379                 "medial": "\uFCE7"
27380             },
27381             "\u0635\u062D": {
27382                 "isolated": "\uFC20",
27383                 "initial": "\uFCB1"
27384             },
27385             "\u0635\u0645": {
27386                 "isolated": "\uFC21",
27387                 "initial": "\uFCB3"
27388             },
27389             "\u0636\u062C": {
27390                 "isolated": "\uFC22",
27391                 "initial": "\uFCB4"
27392             },
27393             "\u0636\u062D": {
27394                 "isolated": "\uFC23",
27395                 "initial": "\uFCB5"
27396             },
27397             "\u0636\u062E": {
27398                 "isolated": "\uFC24",
27399                 "initial": "\uFCB6"
27400             },
27401             "\u0636\u0645": {
27402                 "isolated": "\uFC25",
27403                 "initial": "\uFCB7"
27404             },
27405             "\u0637\u062D": {
27406                 "isolated": "\uFC26",
27407                 "initial": "\uFCB8"
27408             },
27409             "\u0637\u0645": {
27410                 "isolated": "\uFC27",
27411                 "initial": "\uFD33",
27412                 "medial": "\uFD3A"
27413             },
27414             "\u0638\u0645": {
27415                 "isolated": "\uFC28",
27416                 "initial": "\uFCB9",
27417                 "medial": "\uFD3B"
27418             },
27419             "\u0639\u062C": {
27420                 "isolated": "\uFC29",
27421                 "initial": "\uFCBA"
27422             },
27423             "\u0639\u0645": {
27424                 "isolated": "\uFC2A",
27425                 "initial": "\uFCBB"
27426             },
27427             "\u063A\u062C": {
27428                 "isolated": "\uFC2B",
27429                 "initial": "\uFCBC"
27430             },
27431             "\u063A\u0645": {
27432                 "isolated": "\uFC2C",
27433                 "initial": "\uFCBD"
27434             },
27435             "\u0641\u062C": {
27436                 "isolated": "\uFC2D",
27437                 "initial": "\uFCBE"
27438             },
27439             "\u0641\u062D": {
27440                 "isolated": "\uFC2E",
27441                 "initial": "\uFCBF"
27442             },
27443             "\u0641\u062E": {
27444                 "isolated": "\uFC2F",
27445                 "initial": "\uFCC0"
27446             },
27447             "\u0641\u0645": {
27448                 "isolated": "\uFC30",
27449                 "initial": "\uFCC1"
27450             },
27451             "\u0641\u0649": {
27452                 "isolated": "\uFC31",
27453                 "final": "\uFC7C"
27454             },
27455             "\u0641\u064A": {
27456                 "isolated": "\uFC32",
27457                 "final": "\uFC7D"
27458             },
27459             "\u0642\u062D": {
27460                 "isolated": "\uFC33",
27461                 "initial": "\uFCC2"
27462             },
27463             "\u0642\u0645": {
27464                 "isolated": "\uFC34",
27465                 "initial": "\uFCC3"
27466             },
27467             "\u0642\u0649": {
27468                 "isolated": "\uFC35",
27469                 "final": "\uFC7E"
27470             },
27471             "\u0642\u064A": {
27472                 "isolated": "\uFC36",
27473                 "final": "\uFC7F"
27474             },
27475             "\u0643\u0627": {
27476                 "isolated": "\uFC37",
27477                 "final": "\uFC80"
27478             },
27479             "\u0643\u062C": {
27480                 "isolated": "\uFC38",
27481                 "initial": "\uFCC4"
27482             },
27483             "\u0643\u062D": {
27484                 "isolated": "\uFC39",
27485                 "initial": "\uFCC5"
27486             },
27487             "\u0643\u062E": {
27488                 "isolated": "\uFC3A",
27489                 "initial": "\uFCC6"
27490             },
27491             "\u0643\u0644": {
27492                 "isolated": "\uFC3B",
27493                 "final": "\uFC81",
27494                 "initial": "\uFCC7",
27495                 "medial": "\uFCEB"
27496             },
27497             "\u0643\u0645": {
27498                 "isolated": "\uFC3C",
27499                 "final": "\uFC82",
27500                 "initial": "\uFCC8",
27501                 "medial": "\uFCEC"
27502             },
27503             "\u0643\u0649": {
27504                 "isolated": "\uFC3D",
27505                 "final": "\uFC83"
27506             },
27507             "\u0643\u064A": {
27508                 "isolated": "\uFC3E",
27509                 "final": "\uFC84"
27510             },
27511             "\u0644\u062C": {
27512                 "isolated": "\uFC3F",
27513                 "initial": "\uFCC9"
27514             },
27515             "\u0644\u062D": {
27516                 "isolated": "\uFC40",
27517                 "initial": "\uFCCA"
27518             },
27519             "\u0644\u062E": {
27520                 "isolated": "\uFC41",
27521                 "initial": "\uFCCB"
27522             },
27523             "\u0644\u0645": {
27524                 "isolated": "\uFC42",
27525                 "final": "\uFC85",
27526                 "initial": "\uFCCC",
27527                 "medial": "\uFCED"
27528             },
27529             "\u0644\u0649": {
27530                 "isolated": "\uFC43",
27531                 "final": "\uFC86"
27532             },
27533             "\u0644\u064A": {
27534                 "isolated": "\uFC44",
27535                 "final": "\uFC87"
27536             },
27537             "\u0645\u062C": {
27538                 "isolated": "\uFC45",
27539                 "initial": "\uFCCE"
27540             },
27541             "\u0645\u062D": {
27542                 "isolated": "\uFC46",
27543                 "initial": "\uFCCF"
27544             },
27545             "\u0645\u062E": {
27546                 "isolated": "\uFC47",
27547                 "initial": "\uFCD0"
27548             },
27549             "\u0645\u0645": {
27550                 "isolated": "\uFC48",
27551                 "final": "\uFC89",
27552                 "initial": "\uFCD1"
27553             },
27554             "\u0645\u0649": {
27555                 "isolated": "\uFC49"
27556             },
27557             "\u0645\u064A": {
27558                 "isolated": "\uFC4A"
27559             },
27560             "\u0646\u062C": {
27561                 "isolated": "\uFC4B",
27562                 "initial": "\uFCD2"
27563             },
27564             "\u0646\u062D": {
27565                 "isolated": "\uFC4C",
27566                 "initial": "\uFCD3"
27567             },
27568             "\u0646\u062E": {
27569                 "isolated": "\uFC4D",
27570                 "initial": "\uFCD4"
27571             },
27572             "\u0646\u0645": {
27573                 "isolated": "\uFC4E",
27574                 "final": "\uFC8C",
27575                 "initial": "\uFCD5",
27576                 "medial": "\uFCEE"
27577             },
27578             "\u0646\u0649": {
27579                 "isolated": "\uFC4F",
27580                 "final": "\uFC8E"
27581             },
27582             "\u0646\u064A": {
27583                 "isolated": "\uFC50",
27584                 "final": "\uFC8F"
27585             },
27586             "\u0647\u062C": {
27587                 "isolated": "\uFC51",
27588                 "initial": "\uFCD7"
27589             },
27590             "\u0647\u0645": {
27591                 "isolated": "\uFC52",
27592                 "initial": "\uFCD8"
27593             },
27594             "\u0647\u0649": {
27595                 "isolated": "\uFC53"
27596             },
27597             "\u0647\u064A": {
27598                 "isolated": "\uFC54"
27599             },
27600             "\u064A\u062C": {
27601                 "isolated": "\uFC55",
27602                 "initial": "\uFCDA"
27603             },
27604             "\u064A\u062D": {
27605                 "isolated": "\uFC56",
27606                 "initial": "\uFCDB"
27607             },
27608             "\u064A\u062E": {
27609                 "isolated": "\uFC57",
27610                 "initial": "\uFCDC"
27611             },
27612             "\u064A\u0645": {
27613                 "isolated": "\uFC58",
27614                 "final": "\uFC93",
27615                 "initial": "\uFCDD",
27616                 "medial": "\uFCF0"
27617             },
27618             "\u064A\u0649": {
27619                 "isolated": "\uFC59",
27620                 "final": "\uFC95"
27621             },
27622             "\u064A\u064A": {
27623                 "isolated": "\uFC5A",
27624                 "final": "\uFC96"
27625             },
27626             "\u0630\u0670": {
27627                 "isolated": "\uFC5B"
27628             },
27629             "\u0631\u0670": {
27630                 "isolated": "\uFC5C"
27631             },
27632             "\u0649\u0670": {
27633                 "isolated": "\uFC5D",
27634                 "final": "\uFC90"
27635             },
27636             "\u064C\u0651": {
27637                 "isolated": "\uFC5E"
27638             },
27639             "\u064D\u0651": {
27640                 "isolated": "\uFC5F"
27641             },
27642             "\u064E\u0651": {
27643                 "isolated": "\uFC60"
27644             },
27645             "\u064F\u0651": {
27646                 "isolated": "\uFC61"
27647             },
27648             "\u0650\u0651": {
27649                 "isolated": "\uFC62"
27650             },
27651             "\u0651\u0670": {
27652                 "isolated": "\uFC63"
27653             },
27654             "\u0626\u0631": {
27655                 "final": "\uFC64"
27656             },
27657             "\u0626\u0632": {
27658                 "final": "\uFC65"
27659             },
27660             "\u0626\u0646": {
27661                 "final": "\uFC67"
27662             },
27663             "\u0628\u0631": {
27664                 "final": "\uFC6A"
27665             },
27666             "\u0628\u0632": {
27667                 "final": "\uFC6B"
27668             },
27669             "\u0628\u0646": {
27670                 "final": "\uFC6D"
27671             },
27672             "\u062A\u0631": {
27673                 "final": "\uFC70"
27674             },
27675             "\u062A\u0632": {
27676                 "final": "\uFC71"
27677             },
27678             "\u062A\u0646": {
27679                 "final": "\uFC73"
27680             },
27681             "\u062B\u0631": {
27682                 "final": "\uFC76"
27683             },
27684             "\u062B\u0632": {
27685                 "final": "\uFC77"
27686             },
27687             "\u062B\u0646": {
27688                 "final": "\uFC79"
27689             },
27690             "\u062B\u064A": {
27691                 "final": "\uFC7B"
27692             },
27693             "\u0645\u0627": {
27694                 "final": "\uFC88"
27695             },
27696             "\u0646\u0631": {
27697                 "final": "\uFC8A"
27698             },
27699             "\u0646\u0632": {
27700                 "final": "\uFC8B"
27701             },
27702             "\u0646\u0646": {
27703                 "final": "\uFC8D"
27704             },
27705             "\u064A\u0631": {
27706                 "final": "\uFC91"
27707             },
27708             "\u064A\u0632": {
27709                 "final": "\uFC92"
27710             },
27711             "\u064A\u0646": {
27712                 "final": "\uFC94"
27713             },
27714             "\u0626\u062E": {
27715                 "initial": "\uFC99"
27716             },
27717             "\u0626\u0647": {
27718                 "initial": "\uFC9B",
27719                 "medial": "\uFCE0"
27720             },
27721             "\u0628\u0647": {
27722                 "initial": "\uFCA0",
27723                 "medial": "\uFCE2"
27724             },
27725             "\u062A\u0647": {
27726                 "initial": "\uFCA5",
27727                 "medial": "\uFCE4"
27728             },
27729             "\u0635\u062E": {
27730                 "initial": "\uFCB2"
27731             },
27732             "\u0644\u0647": {
27733                 "initial": "\uFCCD"
27734             },
27735             "\u0646\u0647": {
27736                 "initial": "\uFCD6",
27737                 "medial": "\uFCEF"
27738             },
27739             "\u0647\u0670": {
27740                 "initial": "\uFCD9"
27741             },
27742             "\u064A\u0647": {
27743                 "initial": "\uFCDE",
27744                 "medial": "\uFCF1"
27745             },
27746             "\u062B\u0647": {
27747                 "medial": "\uFCE6"
27748             },
27749             "\u0633\u0647": {
27750                 "medial": "\uFCE8",
27751                 "initial": "\uFD31"
27752             },
27753             "\u0634\u0645": {
27754                 "medial": "\uFCE9",
27755                 "isolated": "\uFD0C",
27756                 "final": "\uFD28",
27757                 "initial": "\uFD30"
27758             },
27759             "\u0634\u0647": {
27760                 "medial": "\uFCEA",
27761                 "initial": "\uFD32"
27762             },
27763             "\u0640\u064E\u0651": {
27764                 "medial": "\uFCF2"
27765             },
27766             "\u0640\u064F\u0651": {
27767                 "medial": "\uFCF3"
27768             },
27769             "\u0640\u0650\u0651": {
27770                 "medial": "\uFCF4"
27771             },
27772             "\u0637\u0649": {
27773                 "isolated": "\uFCF5",
27774                 "final": "\uFD11"
27775             },
27776             "\u0637\u064A": {
27777                 "isolated": "\uFCF6",
27778                 "final": "\uFD12"
27779             },
27780             "\u0639\u0649": {
27781                 "isolated": "\uFCF7",
27782                 "final": "\uFD13"
27783             },
27784             "\u0639\u064A": {
27785                 "isolated": "\uFCF8",
27786                 "final": "\uFD14"
27787             },
27788             "\u063A\u0649": {
27789                 "isolated": "\uFCF9",
27790                 "final": "\uFD15"
27791             },
27792             "\u063A\u064A": {
27793                 "isolated": "\uFCFA",
27794                 "final": "\uFD16"
27795             },
27796             "\u0633\u0649": {
27797                 "isolated": "\uFCFB"
27798             },
27799             "\u0633\u064A": {
27800                 "isolated": "\uFCFC",
27801                 "final": "\uFD18"
27802             },
27803             "\u0634\u0649": {
27804                 "isolated": "\uFCFD",
27805                 "final": "\uFD19"
27806             },
27807             "\u0634\u064A": {
27808                 "isolated": "\uFCFE",
27809                 "final": "\uFD1A"
27810             },
27811             "\u062D\u0649": {
27812                 "isolated": "\uFCFF",
27813                 "final": "\uFD1B"
27814             },
27815             "\u062D\u064A": {
27816                 "isolated": "\uFD00",
27817                 "final": "\uFD1C"
27818             },
27819             "\u062C\u0649": {
27820                 "isolated": "\uFD01",
27821                 "final": "\uFD1D"
27822             },
27823             "\u062C\u064A": {
27824                 "isolated": "\uFD02",
27825                 "final": "\uFD1E"
27826             },
27827             "\u062E\u0649": {
27828                 "isolated": "\uFD03",
27829                 "final": "\uFD1F"
27830             },
27831             "\u062E\u064A": {
27832                 "isolated": "\uFD04",
27833                 "final": "\uFD20"
27834             },
27835             "\u0635\u0649": {
27836                 "isolated": "\uFD05",
27837                 "final": "\uFD21"
27838             },
27839             "\u0635\u064A": {
27840                 "isolated": "\uFD06",
27841                 "final": "\uFD22"
27842             },
27843             "\u0636\u0649": {
27844                 "isolated": "\uFD07",
27845                 "final": "\uFD23"
27846             },
27847             "\u0636\u064A": {
27848                 "isolated": "\uFD08",
27849                 "final": "\uFD24"
27850             },
27851             "\u0634\u062C": {
27852                 "isolated": "\uFD09",
27853                 "final": "\uFD25",
27854                 "initial": "\uFD2D",
27855                 "medial": "\uFD37"
27856             },
27857             "\u0634\u062D": {
27858                 "isolated": "\uFD0A",
27859                 "final": "\uFD26",
27860                 "initial": "\uFD2E",
27861                 "medial": "\uFD38"
27862             },
27863             "\u0634\u062E": {
27864                 "isolated": "\uFD0B",
27865                 "final": "\uFD27",
27866                 "initial": "\uFD2F",
27867                 "medial": "\uFD39"
27868             },
27869             "\u0634\u0631": {
27870                 "isolated": "\uFD0D",
27871                 "final": "\uFD29"
27872             },
27873             "\u0633\u0631": {
27874                 "isolated": "\uFD0E",
27875                 "final": "\uFD2A"
27876             },
27877             "\u0635\u0631": {
27878                 "isolated": "\uFD0F",
27879                 "final": "\uFD2B"
27880             },
27881             "\u0636\u0631": {
27882                 "isolated": "\uFD10",
27883                 "final": "\uFD2C"
27884             },
27885             "\u0633\u0639": {
27886                 "final": "\uFD17"
27887             },
27888             "\u062A\u062C\u0645": {
27889                 "initial": "\uFD50"
27890             },
27891             "\u062A\u062D\u062C": {
27892                 "final": "\uFD51",
27893                 "initial": "\uFD52"
27894             },
27895             "\u062A\u062D\u0645": {
27896                 "initial": "\uFD53"
27897             },
27898             "\u062A\u062E\u0645": {
27899                 "initial": "\uFD54"
27900             },
27901             "\u062A\u0645\u062C": {
27902                 "initial": "\uFD55"
27903             },
27904             "\u062A\u0645\u062D": {
27905                 "initial": "\uFD56"
27906             },
27907             "\u062A\u0645\u062E": {
27908                 "initial": "\uFD57"
27909             },
27910             "\u062C\u0645\u062D": {
27911                 "final": "\uFD58",
27912                 "initial": "\uFD59"
27913             },
27914             "\u062D\u0645\u064A": {
27915                 "final": "\uFD5A"
27916             },
27917             "\u062D\u0645\u0649": {
27918                 "final": "\uFD5B"
27919             },
27920             "\u0633\u062D\u062C": {
27921                 "initial": "\uFD5C"
27922             },
27923             "\u0633\u062C\u062D": {
27924                 "initial": "\uFD5D"
27925             },
27926             "\u0633\u062C\u0649": {
27927                 "final": "\uFD5E"
27928             },
27929             "\u0633\u0645\u062D": {
27930                 "final": "\uFD5F",
27931                 "initial": "\uFD60"
27932             },
27933             "\u0633\u0645\u062C": {
27934                 "initial": "\uFD61"
27935             },
27936             "\u0633\u0645\u0645": {
27937                 "final": "\uFD62",
27938                 "initial": "\uFD63"
27939             },
27940             "\u0635\u062D\u062D": {
27941                 "final": "\uFD64",
27942                 "initial": "\uFD65"
27943             },
27944             "\u0635\u0645\u0645": {
27945                 "final": "\uFD66",
27946                 "initial": "\uFDC5"
27947             },
27948             "\u0634\u062D\u0645": {
27949                 "final": "\uFD67",
27950                 "initial": "\uFD68"
27951             },
27952             "\u0634\u062C\u064A": {
27953                 "final": "\uFD69"
27954             },
27955             "\u0634\u0645\u062E": {
27956                 "final": "\uFD6A",
27957                 "initial": "\uFD6B"
27958             },
27959             "\u0634\u0645\u0645": {
27960                 "final": "\uFD6C",
27961                 "initial": "\uFD6D"
27962             },
27963             "\u0636\u062D\u0649": {
27964                 "final": "\uFD6E"
27965             },
27966             "\u0636\u062E\u0645": {
27967                 "final": "\uFD6F",
27968                 "initial": "\uFD70"
27969             },
27970             "\u0636\u0645\u062D": {
27971                 "final": "\uFD71"
27972             },
27973             "\u0637\u0645\u062D": {
27974                 "initial": "\uFD72"
27975             },
27976             "\u0637\u0645\u0645": {
27977                 "initial": "\uFD73"
27978             },
27979             "\u0637\u0645\u064A": {
27980                 "final": "\uFD74"
27981             },
27982             "\u0639\u062C\u0645": {
27983                 "final": "\uFD75",
27984                 "initial": "\uFDC4"
27985             },
27986             "\u0639\u0645\u0645": {
27987                 "final": "\uFD76",
27988                 "initial": "\uFD77"
27989             },
27990             "\u0639\u0645\u0649": {
27991                 "final": "\uFD78"
27992             },
27993             "\u063A\u0645\u0645": {
27994                 "final": "\uFD79"
27995             },
27996             "\u063A\u0645\u064A": {
27997                 "final": "\uFD7A"
27998             },
27999             "\u063A\u0645\u0649": {
28000                 "final": "\uFD7B"
28001             },
28002             "\u0641\u062E\u0645": {
28003                 "final": "\uFD7C",
28004                 "initial": "\uFD7D"
28005             },
28006             "\u0642\u0645\u062D": {
28007                 "final": "\uFD7E",
28008                 "initial": "\uFDB4"
28009             },
28010             "\u0642\u0645\u0645": {
28011                 "final": "\uFD7F"
28012             },
28013             "\u0644\u062D\u0645": {
28014                 "final": "\uFD80",
28015                 "initial": "\uFDB5"
28016             },
28017             "\u0644\u062D\u064A": {
28018                 "final": "\uFD81"
28019             },
28020             "\u0644\u062D\u0649": {
28021                 "final": "\uFD82"
28022             },
28023             "\u0644\u062C\u062C": {
28024                 "initial": "\uFD83",
28025                 "final": "\uFD84"
28026             },
28027             "\u0644\u062E\u0645": {
28028                 "final": "\uFD85",
28029                 "initial": "\uFD86"
28030             },
28031             "\u0644\u0645\u062D": {
28032                 "final": "\uFD87",
28033                 "initial": "\uFD88"
28034             },
28035             "\u0645\u062D\u062C": {
28036                 "initial": "\uFD89"
28037             },
28038             "\u0645\u062D\u0645": {
28039                 "initial": "\uFD8A"
28040             },
28041             "\u0645\u062D\u064A": {
28042                 "final": "\uFD8B"
28043             },
28044             "\u0645\u062C\u062D": {
28045                 "initial": "\uFD8C"
28046             },
28047             "\u0645\u062C\u0645": {
28048                 "initial": "\uFD8D"
28049             },
28050             "\u0645\u062E\u062C": {
28051                 "initial": "\uFD8E"
28052             },
28053             "\u0645\u062E\u0645": {
28054                 "initial": "\uFD8F"
28055             },
28056             "\u0645\u062C\u062E": {
28057                 "initial": "\uFD92"
28058             },
28059             "\u0647\u0645\u062C": {
28060                 "initial": "\uFD93"
28061             },
28062             "\u0647\u0645\u0645": {
28063                 "initial": "\uFD94"
28064             },
28065             "\u0646\u062D\u0645": {
28066                 "initial": "\uFD95"
28067             },
28068             "\u0646\u062D\u0649": {
28069                 "final": "\uFD96"
28070             },
28071             "\u0646\u062C\u0645": {
28072                 "final": "\uFD97",
28073                 "initial": "\uFD98"
28074             },
28075             "\u0646\u062C\u0649": {
28076                 "final": "\uFD99"
28077             },
28078             "\u0646\u0645\u064A": {
28079                 "final": "\uFD9A"
28080             },
28081             "\u0646\u0645\u0649": {
28082                 "final": "\uFD9B"
28083             },
28084             "\u064A\u0645\u0645": {
28085                 "final": "\uFD9C",
28086                 "initial": "\uFD9D"
28087             },
28088             "\u0628\u062E\u064A": {
28089                 "final": "\uFD9E"
28090             },
28091             "\u062A\u062C\u064A": {
28092                 "final": "\uFD9F"
28093             },
28094             "\u062A\u062C\u0649": {
28095                 "final": "\uFDA0"
28096             },
28097             "\u062A\u062E\u064A": {
28098                 "final": "\uFDA1"
28099             },
28100             "\u062A\u062E\u0649": {
28101                 "final": "\uFDA2"
28102             },
28103             "\u062A\u0645\u064A": {
28104                 "final": "\uFDA3"
28105             },
28106             "\u062A\u0645\u0649": {
28107                 "final": "\uFDA4"
28108             },
28109             "\u062C\u0645\u064A": {
28110                 "final": "\uFDA5"
28111             },
28112             "\u062C\u062D\u0649": {
28113                 "final": "\uFDA6"
28114             },
28115             "\u062C\u0645\u0649": {
28116                 "final": "\uFDA7"
28117             },
28118             "\u0633\u062E\u0649": {
28119                 "final": "\uFDA8"
28120             },
28121             "\u0635\u062D\u064A": {
28122                 "final": "\uFDA9"
28123             },
28124             "\u0634\u062D\u064A": {
28125                 "final": "\uFDAA"
28126             },
28127             "\u0636\u062D\u064A": {
28128                 "final": "\uFDAB"
28129             },
28130             "\u0644\u062C\u064A": {
28131                 "final": "\uFDAC"
28132             },
28133             "\u0644\u0645\u064A": {
28134                 "final": "\uFDAD"
28135             },
28136             "\u064A\u062D\u064A": {
28137                 "final": "\uFDAE"
28138             },
28139             "\u064A\u062C\u064A": {
28140                 "final": "\uFDAF"
28141             },
28142             "\u064A\u0645\u064A": {
28143                 "final": "\uFDB0"
28144             },
28145             "\u0645\u0645\u064A": {
28146                 "final": "\uFDB1"
28147             },
28148             "\u0642\u0645\u064A": {
28149                 "final": "\uFDB2"
28150             },
28151             "\u0646\u062D\u064A": {
28152                 "final": "\uFDB3"
28153             },
28154             "\u0639\u0645\u064A": {
28155                 "final": "\uFDB6"
28156             },
28157             "\u0643\u0645\u064A": {
28158                 "final": "\uFDB7"
28159             },
28160             "\u0646\u062C\u062D": {
28161                 "initial": "\uFDB8",
28162                 "final": "\uFDBD"
28163             },
28164             "\u0645\u062E\u064A": {
28165                 "final": "\uFDB9"
28166             },
28167             "\u0644\u062C\u0645": {
28168                 "initial": "\uFDBA",
28169                 "final": "\uFDBC"
28170             },
28171             "\u0643\u0645\u0645": {
28172                 "final": "\uFDBB",
28173                 "initial": "\uFDC3"
28174             },
28175             "\u062C\u062D\u064A": {
28176                 "final": "\uFDBE"
28177             },
28178             "\u062D\u062C\u064A": {
28179                 "final": "\uFDBF"
28180             },
28181             "\u0645\u062C\u064A": {
28182                 "final": "\uFDC0"
28183             },
28184             "\u0641\u0645\u064A": {
28185                 "final": "\uFDC1"
28186             },
28187             "\u0628\u062D\u064A": {
28188                 "final": "\uFDC2"
28189             },
28190             "\u0633\u062E\u064A": {
28191                 "final": "\uFDC6"
28192             },
28193             "\u0646\u062C\u064A": {
28194                 "final": "\uFDC7"
28195             },
28196             "\u0644\u0622": {
28197                 "isolated": "\uFEF5",
28198                 "final": "\uFEF6"
28199             },
28200             "\u0644\u0623": {
28201                 "isolated": "\uFEF7",
28202                 "final": "\uFEF8"
28203             },
28204             "\u0644\u0625": {
28205                 "isolated": "\uFEF9",
28206                 "final": "\uFEFA"
28207             },
28208             "\u0644\u0627": {
28209                 "isolated": "\uFEFB",
28210                 "final": "\uFEFC"
28211             },
28212             "words": {
28213                 "\u0635\u0644\u06D2": "\uFDF0",
28214                 "\u0642\u0644\u06D2": "\uFDF1",
28215                 "\u0627\u0644\u0644\u0647": "\uFDF2",
28216                 "\u0627\u0643\u0628\u0631": "\uFDF3",
28217                 "\u0645\u062D\u0645\u062F": "\uFDF4",
28218                 "\u0635\u0644\u0639\u0645": "\uFDF5",
28219                 "\u0631\u0633\u0648\u0644": "\uFDF6",
28220                 "\u0639\u0644\u064A\u0647": "\uFDF7",
28221                 "\u0648\u0633\u0644\u0645": "\uFDF8",
28222                 "\u0635\u0644\u0649": "\uFDF9",
28223                 "\u0635\u0644\u0649\u0627\u0644\u0644\u0647\u0639\u0644\u064A\u0647\u0648\u0633\u0644\u0645": "\uFDFA",
28224                 "\u062C\u0644\u062C\u0644\u0627\u0644\u0647": "\uFDFB",
28225                 "\u0631\u06CC\u0627\u0644": "\uFDFC"
28226             }
28227         };
28228         exports.default = ligatureReference;
28229         });
28230
28231         unwrapExports(unicodeLigatures);
28232
28233         var reference = createCommonjsModule(function (module, exports) {
28234         Object.defineProperty(exports, "__esModule", { value: true });
28235
28236
28237         var letterList = Object.keys(unicodeArabic.default);
28238         exports.letterList = letterList;
28239         var ligatureList = Object.keys(unicodeLigatures.default);
28240         exports.ligatureList = ligatureList;
28241         var ligatureWordList = Object.keys(unicodeLigatures.default.words);
28242         exports.ligatureWordList = ligatureWordList;
28243         var lams = '\u0644\u06B5\u06B6\u06B7\u06B8';
28244         exports.lams = lams;
28245         var alefs = '\u0627\u0622\u0623\u0625\u0671\u0672\u0673\u0675\u0773\u0774';
28246         exports.alefs = alefs;
28247         // for (var l = 1; l < lams.length; l++) {
28248         //   console.log('-');
28249         //   for (var a = 0; a < alefs.length; a++) {
28250         //     console.log(a + ': ' + lams[l] + alefs[a]);
28251         //   }
28252         // }
28253         var tashkeel = '\u0605\u0640\u0670\u0674\u06DF\u06E7\u06E8';
28254         exports.tashkeel = tashkeel;
28255         function addToTashkeel(start, finish) {
28256             for (var i = start; i <= finish; i++) {
28257                 exports.tashkeel = tashkeel += String.fromCharCode(i);
28258             }
28259         }
28260         addToTashkeel(0x0610, 0x061A);
28261         addToTashkeel(0x064B, 0x065F);
28262         addToTashkeel(0x06D6, 0x06DC);
28263         addToTashkeel(0x06E0, 0x06E4);
28264         addToTashkeel(0x06EA, 0x06ED);
28265         addToTashkeel(0x08D3, 0x08E1);
28266         addToTashkeel(0x08E3, 0x08FF);
28267         addToTashkeel(0xFE70, 0xFE7F);
28268         var lineBreakers = '\u0627\u0629\u0648\u06C0\u06CF\u06FD\u06FE\u076B\u076C\u0771\u0773\u0774\u0778\u0779\u08E2\u08B1\u08B2\u08B9';
28269         exports.lineBreakers = lineBreakers;
28270         function addToLineBreakers(start, finish) {
28271             for (var i = start; i <= finish; i++) {
28272                 exports.lineBreakers = lineBreakers += String.fromCharCode(i);
28273             }
28274         }
28275         addToLineBreakers(0x0600, 0x061F); // it's OK to include tashkeel in this range as it is ignored
28276         addToLineBreakers(0x0621, 0x0625);
28277         addToLineBreakers(0x062F, 0x0632);
28278         addToLineBreakers(0x0660, 0x066D); // numerals, math
28279         addToLineBreakers(0x0671, 0x0677);
28280         addToLineBreakers(0x0688, 0x0699);
28281         addToLineBreakers(0x06C3, 0x06CB);
28282         addToLineBreakers(0x06D2, 0x06F9);
28283         addToLineBreakers(0x0759, 0x075B);
28284         addToLineBreakers(0x08AA, 0x08AE);
28285         addToLineBreakers(0xFB50, 0xFDFD); // presentation forms look like they could connect, but never do
28286         // Presentation Forms A includes diacritics but they are meant to stand alone
28287         addToLineBreakers(0xFE80, 0xFEFC); // presentation forms look like they could connect, but never do
28288         // numerals, math
28289         addToLineBreakers(0x10E60, 0x10E7F);
28290         addToLineBreakers(0x1EC70, 0x1ECBF);
28291         addToLineBreakers(0x1EE00, 0x1EEFF);
28292         });
28293
28294         unwrapExports(reference);
28295         var reference_1 = reference.letterList;
28296         var reference_2 = reference.ligatureList;
28297         var reference_3 = reference.ligatureWordList;
28298         var reference_4 = reference.lams;
28299         var reference_5 = reference.alefs;
28300         var reference_6 = reference.tashkeel;
28301         var reference_7 = reference.lineBreakers;
28302
28303         var GlyphSplitter_1 = createCommonjsModule(function (module, exports) {
28304         Object.defineProperty(exports, "__esModule", { value: true });
28305
28306
28307         function GlyphSplitter(word) {
28308             var letters = [];
28309             var lastLetter = '';
28310             word.split('').forEach(function (letter) {
28311                 if (isArabic_1.isArabic(letter)) {
28312                     if (reference.tashkeel.indexOf(letter) > -1) {
28313                         letters[letters.length - 1] += letter;
28314                     }
28315                     else if (lastLetter.length && ((reference.lams.indexOf(lastLetter) === 0 && reference.alefs.indexOf(letter) > -1) || (reference.lams.indexOf(lastLetter) > 0 && reference.alefs.indexOf(letter) === 0))) {
28316                         // valid LA forms
28317                         letters[letters.length - 1] += letter;
28318                     }
28319                     else {
28320                         letters.push(letter);
28321                     }
28322                 }
28323                 else {
28324                     letters.push(letter);
28325                 }
28326                 if (reference.tashkeel.indexOf(letter) === -1) {
28327                     lastLetter = letter;
28328                 }
28329             });
28330             return letters;
28331         }
28332         exports.GlyphSplitter = GlyphSplitter;
28333         });
28334
28335         unwrapExports(GlyphSplitter_1);
28336         var GlyphSplitter_2 = GlyphSplitter_1.GlyphSplitter;
28337
28338         var BaselineSplitter_1 = createCommonjsModule(function (module, exports) {
28339         Object.defineProperty(exports, "__esModule", { value: true });
28340
28341
28342         function BaselineSplitter(word) {
28343             var letters = [];
28344             var lastLetter = '';
28345             word.split('').forEach(function (letter) {
28346                 if (isArabic_1.isArabic(letter) && isArabic_1.isArabic(lastLetter)) {
28347                     if (lastLetter.length && reference.tashkeel.indexOf(letter) > -1) {
28348                         letters[letters.length - 1] += letter;
28349                     }
28350                     else if (reference.lineBreakers.indexOf(lastLetter) > -1) {
28351                         letters.push(letter);
28352                     }
28353                     else {
28354                         letters[letters.length - 1] += letter;
28355                     }
28356                 }
28357                 else {
28358                     letters.push(letter);
28359                 }
28360                 if (reference.tashkeel.indexOf(letter) === -1) {
28361                     // don't allow tashkeel to hide line break
28362                     lastLetter = letter;
28363                 }
28364             });
28365             return letters;
28366         }
28367         exports.BaselineSplitter = BaselineSplitter;
28368         });
28369
28370         unwrapExports(BaselineSplitter_1);
28371         var BaselineSplitter_2 = BaselineSplitter_1.BaselineSplitter;
28372
28373         var Normalization = createCommonjsModule(function (module, exports) {
28374         Object.defineProperty(exports, "__esModule", { value: true });
28375
28376
28377
28378
28379         function Normal(word, breakPresentationForm) {
28380             // default is to turn initial/isolated/medial/final presentation form to generic
28381             if (typeof breakPresentationForm === 'undefined') {
28382                 breakPresentationForm = true;
28383             }
28384             var returnable = '';
28385             word.split('').forEach(function (letter) {
28386                 if (!isArabic_1.isArabic(letter)) {
28387                     returnable += letter;
28388                     return;
28389                 }
28390                 for (var w = 0; w < reference.letterList.length; w++) {
28391                     // ok so we are checking this potential lettertron
28392                     var letterForms = unicodeArabic.default[reference.letterList[w]];
28393                     var versions = Object.keys(letterForms);
28394                     for (var v = 0; v < versions.length; v++) {
28395                         var localVersion = letterForms[versions[v]];
28396                         if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28397                             // look at this embedded object
28398                             var embeddedForms = Object.keys(localVersion);
28399                             for (var ef = 0; ef < embeddedForms.length; ef++) {
28400                                 var form = localVersion[embeddedForms[ef]];
28401                                 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28402                                     // match
28403                                     // console.log('embedded match');
28404                                     if (form === letter) {
28405                                         // match exact
28406                                         if (breakPresentationForm && localVersion['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(embeddedForms[ef]) > -1) {
28407                                             // replace presentation form
28408                                             // console.log('keeping normal form of the letter');
28409                                             if (typeof localVersion['normal'] === 'object') {
28410                                                 returnable += localVersion['normal'][0];
28411                                             }
28412                                             else {
28413                                                 returnable += localVersion['normal'];
28414                                             }
28415                                             return;
28416                                         }
28417                                         // console.log('keeping this letter');
28418                                         returnable += letter;
28419                                         return;
28420                                     }
28421                                     else if (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1) {
28422                                         // match
28423                                         returnable += form[0];
28424                                         // console.log('added the first letter from the same array');
28425                                         return;
28426                                     }
28427                                 }
28428                             }
28429                         }
28430                         else if (localVersion === letter) {
28431                             // match exact
28432                             if (breakPresentationForm && letterForms['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(versions[v]) > -1) {
28433                                 // replace presentation form
28434                                 // console.log('keeping normal form of the letter');
28435                                 if (typeof letterForms['normal'] === 'object') {
28436                                     returnable += letterForms['normal'][0];
28437                                 }
28438                                 else {
28439                                     returnable += letterForms['normal'];
28440                                 }
28441                                 return;
28442                             }
28443                             // console.log('keeping this letter');
28444                             returnable += letter;
28445                             return;
28446                         }
28447                         else if (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1) {
28448                             // match
28449                             returnable += localVersion[0];
28450                             // console.log('added the first letter from the same array');
28451                             return;
28452                         }
28453                     }
28454                 }
28455                 // try ligatures
28456                 for (var v2 = 0; v2 < reference.ligatureList.length; v2++) {
28457                     var normalForm = reference.ligatureList[v2];
28458                     if (normalForm !== 'words') {
28459                         var ligForms = Object.keys(unicodeLigatures.default[normalForm]);
28460                         for (var f = 0; f < ligForms.length; f++) {
28461                             if (unicodeLigatures.default[normalForm][ligForms[f]] === letter) {
28462                                 returnable += normalForm;
28463                                 return;
28464                             }
28465                         }
28466                     }
28467                 }
28468                 // try words ligatures
28469                 for (var v3 = 0; v3 < reference.ligatureWordList.length; v3++) {
28470                     var normalForm = reference.ligatureWordList[v3];
28471                     if (unicodeLigatures.default.words[normalForm] === letter) {
28472                         returnable += normalForm;
28473                         return;
28474                     }
28475                 }
28476                 returnable += letter;
28477                 // console.log('kept the letter')
28478             });
28479             return returnable;
28480         }
28481         exports.Normal = Normal;
28482         });
28483
28484         unwrapExports(Normalization);
28485         var Normalization_1 = Normalization.Normal;
28486
28487         var CharShaper_1 = createCommonjsModule(function (module, exports) {
28488         Object.defineProperty(exports, "__esModule", { value: true });
28489
28490
28491
28492         function CharShaper(letter, form) {
28493             if (!isArabic_1.isArabic(letter)) {
28494                 // fail not Arabic
28495                 throw new Error('Not Arabic');
28496             }
28497             if (letter === "\u0621") {
28498                 // hamza alone
28499                 return "\u0621";
28500             }
28501             for (var w = 0; w < reference.letterList.length; w++) {
28502                 // ok so we are checking this potential lettertron
28503                 var letterForms = unicodeArabic.default[reference.letterList[w]];
28504                 var versions = Object.keys(letterForms);
28505                 for (var v = 0; v < versions.length; v++) {
28506                     var localVersion = letterForms[versions[v]];
28507                     if ((localVersion === letter) ||
28508                         (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28509                         if (versions.indexOf(form) > -1) {
28510                             return letterForms[form];
28511                         }
28512                     }
28513                     else if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28514                         // check embedded
28515                         var embeddedVersions = Object.keys(localVersion);
28516                         for (var ev = 0; ev < embeddedVersions.length; ev++) {
28517                             if ((localVersion[embeddedVersions[ev]] === letter) ||
28518                                 (typeof localVersion[embeddedVersions[ev]] === 'object' && localVersion[embeddedVersions[ev]].indexOf && localVersion[embeddedVersions[ev]].indexOf(letter) > -1)) {
28519                                 if (embeddedVersions.indexOf(form) > -1) {
28520                                     return localVersion[form];
28521                                 }
28522                             }
28523                         }
28524                     }
28525                 }
28526             }
28527         }
28528         exports.CharShaper = CharShaper;
28529         });
28530
28531         unwrapExports(CharShaper_1);
28532         var CharShaper_2 = CharShaper_1.CharShaper;
28533
28534         var WordShaper_1 = createCommonjsModule(function (module, exports) {
28535         Object.defineProperty(exports, "__esModule", { value: true });
28536
28537
28538
28539
28540         function WordShaper(word) {
28541             var state = 'initial';
28542             var output = '';
28543             for (var w = 0; w < word.length; w++) {
28544                 var nextLetter = ' ';
28545                 for (var nxw = w + 1; nxw < word.length; nxw++) {
28546                     if (!isArabic_1.isArabic(word[nxw])) {
28547                         break;
28548                     }
28549                     if (reference.tashkeel.indexOf(word[nxw]) === -1) {
28550                         nextLetter = word[nxw];
28551                         break;
28552                     }
28553                 }
28554                 if (!isArabic_1.isArabic(word[w]) || isArabic_1.isMath(word[w])) {
28555                     // space or other non-Arabic
28556                     output += word[w];
28557                     state = 'initial';
28558                 }
28559                 else if (reference.tashkeel.indexOf(word[w]) > -1) {
28560                     // tashkeel - add without changing state
28561                     output += word[w];
28562                 }
28563                 else if ((nextLetter === ' ') // last Arabic letter in this word
28564                     || (reference.lineBreakers.indexOf(word[w]) > -1)) { // the current letter is known to break lines
28565                     output += CharShaper_1.CharShaper(word[w], state === 'initial' ? 'isolated' : 'final');
28566                     state = 'initial';
28567                 }
28568                 else if (reference.lams.indexOf(word[w]) > -1 && reference.alefs.indexOf(nextLetter) > -1) {
28569                     // LA letters - advance an additional letter after this
28570                     output += unicodeLigatures.default[word[w] + nextLetter][(state === 'initial' ? 'isolated' : 'final')];
28571                     while (word[w] !== nextLetter) {
28572                         w++;
28573                     }
28574                     state = 'initial';
28575                 }
28576                 else {
28577                     output += CharShaper_1.CharShaper(word[w], state);
28578                     state = 'medial';
28579                 }
28580             }
28581             return output;
28582         }
28583         exports.WordShaper = WordShaper;
28584         });
28585
28586         unwrapExports(WordShaper_1);
28587         var WordShaper_2 = WordShaper_1.WordShaper;
28588
28589         var ParentLetter_1 = createCommonjsModule(function (module, exports) {
28590         Object.defineProperty(exports, "__esModule", { value: true });
28591
28592
28593
28594         function ParentLetter(letter) {
28595             if (!isArabic_1.isArabic(letter)) {
28596                 throw new Error('Not an Arabic letter');
28597             }
28598             for (var w = 0; w < reference.letterList.length; w++) {
28599                 // ok so we are checking this potential lettertron
28600                 var letterForms = unicodeArabic.default[reference.letterList[w]];
28601                 var versions = Object.keys(letterForms);
28602                 for (var v = 0; v < versions.length; v++) {
28603                     var localVersion = letterForms[versions[v]];
28604                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28605                         // look at this embedded object
28606                         var embeddedForms = Object.keys(localVersion);
28607                         for (var ef = 0; ef < embeddedForms.length; ef++) {
28608                             var form = localVersion[embeddedForms[ef]];
28609                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28610                                 // match
28611                                 return localVersion;
28612                             }
28613                         }
28614                     }
28615                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28616                         // match
28617                         return letterForms;
28618                     }
28619                 }
28620                 return null;
28621             }
28622         }
28623         exports.ParentLetter = ParentLetter;
28624         function GrandparentLetter(letter) {
28625             if (!isArabic_1.isArabic(letter)) {
28626                 throw new Error('Not an Arabic letter');
28627             }
28628             for (var w = 0; w < reference.letterList.length; w++) {
28629                 // ok so we are checking this potential lettertron
28630                 var letterForms = unicodeArabic.default[reference.letterList[w]];
28631                 var versions = Object.keys(letterForms);
28632                 for (var v = 0; v < versions.length; v++) {
28633                     var localVersion = letterForms[versions[v]];
28634                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28635                         // look at this embedded object
28636                         var embeddedForms = Object.keys(localVersion);
28637                         for (var ef = 0; ef < embeddedForms.length; ef++) {
28638                             var form = localVersion[embeddedForms[ef]];
28639                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28640                                 // match
28641                                 return letterForms;
28642                             }
28643                         }
28644                     }
28645                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28646                         // match
28647                         return letterForms;
28648                     }
28649                 }
28650                 return null;
28651             }
28652         }
28653         exports.GrandparentLetter = GrandparentLetter;
28654         });
28655
28656         unwrapExports(ParentLetter_1);
28657         var ParentLetter_2 = ParentLetter_1.ParentLetter;
28658         var ParentLetter_3 = ParentLetter_1.GrandparentLetter;
28659
28660         var lib$1 = createCommonjsModule(function (module, exports) {
28661         Object.defineProperty(exports, "__esModule", { value: true });
28662
28663         exports.isArabic = isArabic_1.isArabic;
28664
28665         exports.GlyphSplitter = GlyphSplitter_1.GlyphSplitter;
28666
28667         exports.BaselineSplitter = BaselineSplitter_1.BaselineSplitter;
28668
28669         exports.Normal = Normalization.Normal;
28670
28671         exports.CharShaper = CharShaper_1.CharShaper;
28672
28673         exports.WordShaper = WordShaper_1.WordShaper;
28674
28675         exports.ParentLetter = ParentLetter_1.ParentLetter;
28676         exports.GrandparentLetter = ParentLetter_1.GrandparentLetter;
28677         });
28678
28679         unwrapExports(lib$1);
28680         var lib_1 = lib$1.isArabic;
28681         var lib_2 = lib$1.GlyphSplitter;
28682         var lib_3 = lib$1.BaselineSplitter;
28683         var lib_4 = lib$1.Normal;
28684         var lib_5 = lib$1.CharShaper;
28685         var lib_6 = lib$1.WordShaper;
28686         var lib_7 = lib$1.ParentLetter;
28687         var lib_8 = lib$1.GrandparentLetter;
28688
28689         // see https://github.com/openstreetmap/iD/pull/3707
28690
28691         var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0780-\u07BF]/;
28692
28693         function fixRTLTextForSvg(inputText) {
28694             var ret = '', rtlBuffer = [];
28695             var arabicRegex = /[\u0600-\u06FF]/g;
28696             var arabicMath = /[\u0660-\u066C]+/g;
28697             var thaanaVowel = /[\u07A6-\u07B0]/;
28698             var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
28699
28700             if (!arabicRegex.test(inputText)) {
28701                 // Hebrew or Thaana RTL script
28702                 for (var n = 0; n < inputText.length; n++) {
28703                     var c = inputText[n];
28704                     if ((thaanaVowel.test(c) || hebrewSign.test(c)) && rtlBuffer.length) {
28705                         rtlBuffer[rtlBuffer.length - 1] += c;
28706                     } else if (rtlRegex.test(c)) {
28707                         rtlBuffer.push(c);
28708                     } else if (c === ' ' && rtlBuffer.length) {
28709                         // whitespace within RTL text
28710                         rtlBuffer = [rtlBuffer.reverse().join('') + ' '];
28711                     } else {
28712                         // non-RTL character
28713                         ret += rtlBuffer.reverse().join('') + c;
28714                         rtlBuffer = [];
28715                     }
28716                 }
28717                 ret += rtlBuffer.reverse().join('');
28718                 return ret;
28719             } else {
28720                 var label = lib_6(inputText).split('').reverse().join('');
28721                 // prevent Arabic numbers from being reversed
28722                 var numericSwaps = label.match(arabicMath) || [];
28723                 for (var i = 0; i < numericSwaps.length; i++) {
28724                     if (numericSwaps[i].length > 1) {
28725                         label = label.replace(numericSwaps[i], numericSwaps[i].split('').reverse().join(''));
28726                     }
28727                 }
28728                 return label;
28729             }
28730         }
28731
28732         var translations = Object.create(null);
28733
28734         var currentLocale = 'en';
28735         var textDirection = 'ltr';
28736         var languageNames = {};
28737         var scriptNames = {};
28738
28739         function setLocale(val) {
28740             if (translations[val] !== undefined) {
28741                 currentLocale = val;
28742             } else if (translations[val.split('-')[0]]) {
28743                 currentLocale = val.split('-')[0];
28744             }
28745         }
28746
28747         function addTranslation(id, value) {
28748             translations[id] = value;
28749         }
28750
28751         /**
28752          * Given a string identifier, try to find that string in the current
28753          * language, and return it.  This function will be called recursively
28754          * with locale `en` if a string can not be found in the requested language.
28755          *
28756          * @param {string}   s   string identifier
28757          * @param {object?}  o   object of token replacements and default string
28758          * @param {string?}  loc locale to use
28759          * @returns {string?} locale string
28760          */
28761         function t(s, o, loc) {
28762             loc = loc || currentLocale;
28763
28764             var path = s
28765                 .split('.')
28766                 .map(function (s) { return s.replace(/<TX_DOT>/g, '.'); })
28767                 .reverse();
28768
28769             var rep = translations[loc];
28770
28771             while (rep !== undefined && path.length) {
28772                 rep = rep[path.pop()];
28773             }
28774
28775             if (rep !== undefined) {
28776                 if (o) {
28777                     for (var k in o) {
28778                         var variable = '{' + k + '}';
28779                         var re = new RegExp(variable, 'g'); // check globally for variables
28780                         rep = rep.replace(re, o[k]);
28781                     }
28782                 }
28783                 return rep;
28784             }
28785
28786             if (loc !== 'en') {
28787                 return t(s, o, 'en');
28788             }
28789
28790             if (o && 'default' in o) {
28791                 return o.default;
28792             }
28793
28794             var missing = 'Missing ' + loc + ' translation: ' + s;
28795             if (typeof console !== 'undefined') console.error(missing); // eslint-disable-line
28796
28797             return missing;
28798         }
28799
28800         /**
28801          * Given string 'ltr' or 'rtl', save that setting
28802          *
28803          * @param {string} dir ltr or rtl
28804          */
28805
28806         function setTextDirection(dir) {
28807             textDirection = dir;
28808         }
28809
28810         function setLanguageNames(obj) {
28811             languageNames = obj;
28812         }
28813
28814         function setScriptNames(obj) {
28815             scriptNames = obj;
28816         }
28817
28818         function languageName(code, options) {
28819             if (languageNames[code]) { // name in locale langauge
28820
28821                 // e.g. German
28822                 return languageNames[code];
28823             }
28824             // sometimes we only want the local name
28825             if (options && options.localOnly) return null;
28826
28827             var langInfo = dataLanguages[code];
28828
28829             if (langInfo) {
28830                 if (langInfo.nativeName) { // name in native language
28831
28832                     // e.g. Deutsch (de)
28833                     return t('translate.language_and_code', { language: langInfo.nativeName, code: code });
28834
28835                 } else if (langInfo.base && langInfo.script) {
28836
28837                     var base = langInfo.base; // the code of the langauge this is based on
28838
28839                     if (languageNames[base]) { // base language name in locale langauge
28840                         var scriptCode = langInfo.script;
28841                         var script = scriptNames[scriptCode] || scriptCode;
28842
28843                         // e.g. Serbian (Cyrillic)
28844                         return t('translate.language_and_code', { language: languageNames[base], code: script });
28845
28846                     } else if (dataLanguages[base] && dataLanguages[base].nativeName) {
28847
28848                         // e.g. српски (sr-Cyrl)
28849                         return t('translate.language_and_code', { language: dataLanguages[base].nativeName, code: code });
28850                     }
28851                 }
28852             }
28853             return code; // if not found, use the code
28854         }
28855
28856         var detected;
28857
28858         function utilDetect(force) {
28859             if (detected && !force) return detected;
28860             detected = {};
28861
28862             var ua = navigator.userAgent,
28863                 m = null,
28864                 q = utilStringQs(window.location.hash.substring(1));
28865
28866             m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);   // Edge
28867             if (m !== null) {
28868                 detected.browser = m[1];
28869                 detected.version = m[2];
28870             }
28871             if (!detected.browser) {
28872                 m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);   // IE11
28873                 if (m !== null) {
28874                     detected.browser = 'msie';
28875                     detected.version = m[1];
28876                 }
28877             }
28878             if (!detected.browser) {
28879                 m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);   // Opera 15+
28880                 if (m !== null) {
28881                     detected.browser = 'Opera';
28882                     detected.version = m[2];
28883                 }
28884             }
28885             if (!detected.browser) {
28886                 m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
28887                 if (m !== null) {
28888                     detected.browser = m[1];
28889                     detected.version = m[2];
28890                     m = ua.match(/version\/([\.\d]+)/i);
28891                     if (m !== null) detected.version = m[1];
28892                 }
28893             }
28894             if (!detected.browser) {
28895                 detected.browser = navigator.appName;
28896                 detected.version = navigator.appVersion;
28897             }
28898
28899             // keep major.minor version only..
28900             detected.version = detected.version.split(/\W/).slice(0,2).join('.');
28901
28902             if (detected.browser.toLowerCase() === 'msie') {
28903                 detected.ie = true;
28904                 detected.browser = 'Internet Explorer';
28905                 detected.support = parseFloat(detected.version) >= 11;
28906             } else {
28907                 detected.ie = false;
28908                 detected.support = true;
28909             }
28910
28911             // Added due to incomplete svg style support. See #715
28912             detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
28913
28914             // Set locale based on url param (format 'en-US') or browser lang (default)
28915             if (q.hasOwnProperty('locale')) {
28916                 detected.locale = q.locale;
28917                 detected.language = q.locale.split('-')[0];
28918             } else {
28919                 detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
28920                 detected.language = detected.locale.split('-')[0];
28921
28922                 // Search `navigator.languages` for a better locale. Prefer the first language,
28923                 // unless the second language is a culture-specific version of the first one, see #3842
28924                 if (navigator.languages && navigator.languages.length > 0) {
28925                     var code0 = navigator.languages[0],
28926                         parts0 = code0.split('-');
28927
28928                     detected.locale = code0;
28929                     detected.language = parts0[0];
28930
28931                     if (navigator.languages.length > 1 && parts0.length === 1) {
28932                         var code1 = navigator.languages[1],
28933                             parts1 = code1.split('-');
28934
28935                         if (parts1[0] === parts0[0]) {
28936                             detected.locale = code1;
28937                         }
28938                     }
28939                 }
28940             }
28941
28942             // Loaded locale is stored in currentLocale
28943             // return that instead (except in the situation where 'en' might override 'en-US')
28944             var loadedLocale = currentLocale || 'en';
28945             if (loadedLocale !== 'en') {
28946                 detected.locale = loadedLocale;
28947                 detected.language = detected.locale.split('-')[0];
28948             }
28949
28950             // detect text direction
28951             var lang = dataLocales[detected.locale] || dataLocales[detected.language];
28952             if ((lang && lang.rtl) || (q.rtl === 'true')) {
28953                 detected.textDirection = 'rtl';
28954             } else {
28955                 detected.textDirection = 'ltr';
28956             }
28957             setTextDirection(detected.textDirection);
28958             setLanguageNames((lang && lang.languageNames) || {});
28959             setScriptNames((lang && lang.scriptNames) || {});
28960
28961             // detect host
28962             var loc = window.top.location;
28963             var origin = loc.origin;
28964             if (!origin) {  // for unpatched IE11
28965                 origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
28966             }
28967
28968             detected.host = origin + loc.pathname;
28969
28970             detected.filedrop = (window.FileReader && 'ondrop' in window);
28971
28972             detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
28973
28974             detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
28975
28976             function nav(x) {
28977                 return navigator.userAgent.indexOf(x) !== -1;
28978             }
28979
28980             if (nav('Win')) {
28981                 detected.os = 'win';
28982                 detected.platform = 'Windows';
28983             }
28984             else if (nav('Mac')) {
28985                 detected.os = 'mac';
28986                 detected.platform = 'Macintosh';
28987             }
28988             else if (nav('X11') || nav('Linux')) {
28989                 detected.os = 'linux';
28990                 detected.platform = 'Linux';
28991             }
28992             else {
28993                 detected.os = 'win';
28994                 detected.platform = 'Unknown';
28995             }
28996
28997             return detected;
28998         }
28999
29000         function utilTagText(entity) {
29001             var obj = (entity && entity.tags) || {};
29002             return Object.keys(obj)
29003                 .map(function(k) { return k + '=' + obj[k]; })
29004                 .join(', ');
29005         }
29006
29007
29008         function utilTagDiff(oldTags, newTags) {
29009             var tagDiff = [];
29010             var keys = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
29011             keys.forEach(function(k) {
29012                 var oldVal = oldTags[k];
29013                 var newVal = newTags[k];
29014
29015                 if (oldVal && (!newVal || newVal !== oldVal)) {
29016                     tagDiff.push({
29017                         type: '-',
29018                         key: k,
29019                         oldVal: oldVal,
29020                         newVal: newVal,
29021                         display: '- ' + k + '=' + oldVal
29022                     });
29023                 }
29024                 if (newVal && (!oldVal || newVal !== oldVal)) {
29025                     tagDiff.push({
29026                         type: '+',
29027                         key: k,
29028                         oldVal: oldVal,
29029                         newVal: newVal,
29030                         display: '+ ' + k + '=' + newVal
29031                     });
29032                 }
29033             });
29034             return tagDiff;
29035         }
29036
29037
29038         function utilEntitySelector(ids) {
29039             return ids.length ? '.' + ids.join(',.') : 'nothing';
29040         }
29041
29042
29043         // returns an selector to select entity ids for:
29044         //  - entityIDs passed in
29045         //  - shallow descendant entityIDs for any of those entities that are relations
29046         function utilEntityOrMemberSelector(ids, graph) {
29047             var seen = new Set(ids);
29048             ids.forEach(collectShallowDescendants);
29049             return utilEntitySelector(Array.from(seen));
29050
29051             function collectShallowDescendants(id) {
29052                 var entity = graph.hasEntity(id);
29053                 if (!entity || entity.type !== 'relation') return;
29054
29055                 entity.members
29056                     .map(function(member) { return member.id; })
29057                     .forEach(function(id) { seen.add(id); });
29058             }
29059         }
29060
29061
29062         // returns an selector to select entity ids for:
29063         //  - entityIDs passed in
29064         //  - deep descendant entityIDs for any of those entities that are relations
29065         function utilEntityOrDeepMemberSelector(ids, graph) {
29066             var seen = new Set();
29067             ids.forEach(collectDeepDescendants);
29068             return utilEntitySelector(Array.from(seen));
29069
29070             function collectDeepDescendants(id) {
29071                 if (seen.has(id)) return;
29072                 seen.add(id);
29073
29074                 var entity = graph.hasEntity(id);
29075                 if (!entity || entity.type !== 'relation') return;
29076
29077                 entity.members
29078                     .map(function(member) { return member.id; })
29079                     .forEach(collectDeepDescendants);   // recurse
29080             }
29081         }
29082
29083
29084         // Adds or removes highlight styling for the specified entities
29085         function utilHighlightEntities(ids, highlighted, context) {
29086             context.surface()
29087                 .selectAll(utilEntityOrDeepMemberSelector(ids, context.graph()))
29088                 .classed('highlighted', highlighted);
29089         }
29090
29091
29092         // returns an Array that is the union of:
29093         //  - nodes for any nodeIDs passed in
29094         //  - child nodes of any wayIDs passed in
29095         //  - descendant member and child nodes of relationIDs passed in
29096         function utilGetAllNodes(ids, graph) {
29097             var seen = new Set();
29098             var nodes = new Set();
29099
29100             ids.forEach(collectNodes);
29101             return Array.from(nodes);
29102
29103             function collectNodes(id) {
29104                 if (seen.has(id)) return;
29105                 seen.add(id);
29106
29107                 var entity = graph.hasEntity(id);
29108                 if (!entity) return;
29109
29110                 if (entity.type === 'node') {
29111                     nodes.add(entity);
29112                 } else if (entity.type === 'way') {
29113                     entity.nodes.forEach(collectNodes);
29114                 } else {
29115                     entity.members
29116                         .map(function(member) { return member.id; })
29117                         .forEach(collectNodes);   // recurse
29118                 }
29119             }
29120         }
29121
29122
29123         function utilDisplayName(entity) {
29124             var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0];
29125             var name = entity.tags[localizedNameKey] || entity.tags.name || '';
29126             var network = entity.tags.cycle_network || entity.tags.network;
29127
29128             if (!name && entity.tags.ref) {
29129                 name = entity.tags.ref;
29130                 if (network) {
29131                     name = network + ' ' + name;
29132                 }
29133             }
29134
29135             return name;
29136         }
29137
29138
29139         function utilDisplayNameForPath(entity) {
29140             var name = utilDisplayName(entity);
29141             var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1;
29142
29143             if (!isFirefox && name && rtlRegex.test(name)) {
29144                 name = fixRTLTextForSvg(name);
29145             }
29146
29147             return name;
29148         }
29149
29150
29151         function utilDisplayType(id) {
29152             return {
29153                 n: t('inspector.node'),
29154                 w: t('inspector.way'),
29155                 r: t('inspector.relation')
29156             }[id.charAt(0)];
29157         }
29158
29159
29160         function utilDisplayLabel(entity, context) {
29161             var displayName = utilDisplayName(entity);
29162             if (displayName) {
29163                 // use the display name if there is one
29164                 return displayName;
29165             }
29166             var preset = utilPreset(entity, context);
29167             if (preset && preset.name()) {
29168                 // use the preset name if there is a match
29169                 return preset.name();
29170             }
29171             // fallback to the display type (node/way/relation)
29172             return utilDisplayType(entity.id);
29173         }
29174
29175
29176         function utilPreset(entity, context) {
29177             return context.presets().match(entity, context.graph());
29178         }
29179
29180
29181         function utilEntityRoot(entityType) {
29182             return {
29183                 node: 'n',
29184                 way: 'w',
29185                 relation: 'r'
29186             }[entityType];
29187         }
29188
29189
29190         function utilStringQs(str) {
29191             return str.split('&').reduce(function(obj, pair){
29192                 var parts = pair.split('=');
29193                 if (parts.length === 2) {
29194                     obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]);
29195                 }
29196                 return obj;
29197             }, {});
29198         }
29199
29200
29201         function utilQsString(obj, noencode) {
29202             // encode everything except special characters used in certain hash parameters:
29203             // "/" in map states, ":", ",", {" and "}" in background
29204             function softEncode(s) {
29205                 return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
29206             }
29207
29208             return Object.keys(obj).sort().map(function(key) {
29209                 return encodeURIComponent(key) + '=' + (
29210                     noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
29211             }).join('&');
29212         }
29213
29214
29215         function utilPrefixDOMProperty(property) {
29216             var prefixes = ['webkit', 'ms', 'moz', 'o'];
29217             var i = -1;
29218             var n = prefixes.length;
29219             var s = document.body;
29220
29221             if (property in s)
29222                 return property;
29223
29224             property = property.substr(0, 1).toUpperCase() + property.substr(1);
29225
29226             while (++i < n) {
29227                 if (prefixes[i] + property in s) {
29228                     return prefixes[i] + property;
29229                 }
29230             }
29231
29232             return false;
29233         }
29234
29235
29236         function utilPrefixCSSProperty(property) {
29237             var prefixes = ['webkit', 'ms', 'Moz', 'O'];
29238             var i = -1;
29239             var n = prefixes.length;
29240             var s = document.body.style;
29241
29242             if (property.toLowerCase() in s) {
29243                 return property.toLowerCase();
29244             }
29245
29246             while (++i < n) {
29247                 if (prefixes[i] + property in s) {
29248                     return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase();
29249                 }
29250             }
29251
29252             return false;
29253         }
29254
29255
29256         var transformProperty;
29257         function utilSetTransform(el, x, y, scale) {
29258             var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform');
29259             var translate = utilDetect().opera ? 'translate('   + x + 'px,' + y + 'px)'
29260                 : 'translate3d(' + x + 'px,' + y + 'px,0)';
29261             return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : ''));
29262         }
29263
29264
29265         // Calculates Levenshtein distance between two strings
29266         // see:  https://en.wikipedia.org/wiki/Levenshtein_distance
29267         // first converts the strings to lowercase and replaces diacritic marks with ascii equivalents.
29268         function utilEditDistance(a, b) {
29269             a = remove$1(a.toLowerCase());
29270             b = remove$1(b.toLowerCase());
29271             if (a.length === 0) return b.length;
29272             if (b.length === 0) return a.length;
29273             var matrix = [];
29274             for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; }
29275             for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
29276             for (i = 1; i <= b.length; i++) {
29277                 for (j = 1; j <= a.length; j++) {
29278                     if (b.charAt(i-1) === a.charAt(j-1)) {
29279                         matrix[i][j] = matrix[i-1][j-1];
29280                     } else {
29281                         matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
29282                             Math.min(matrix[i][j-1] + 1, // insertion
29283                             matrix[i-1][j] + 1)); // deletion
29284                     }
29285                 }
29286             }
29287             return matrix[b.length][a.length];
29288         }
29289
29290
29291         // a d3.mouse-alike which
29292         // 1. Only works on HTML elements, not SVG
29293         // 2. Does not cause style recalculation
29294         function utilFastMouse(container) {
29295             var rect = container.getBoundingClientRect();
29296             var rectLeft = rect.left;
29297             var rectTop = rect.top;
29298             var clientLeft = +container.clientLeft;
29299             var clientTop = +container.clientTop;
29300
29301             if (textDirection === 'rtl') {
29302                 rectLeft = 0;
29303             }
29304             return function(e) {
29305                 return [
29306                     e.clientX - rectLeft - clientLeft,
29307                     e.clientY - rectTop - clientTop];
29308             };
29309         }
29310
29311
29312         function utilAsyncMap(inputs, func, callback) {
29313             var remaining = inputs.length;
29314             var results = [];
29315             var errors = [];
29316
29317             inputs.forEach(function(d, i) {
29318                 func(d, function done(err, data) {
29319                     errors[i] = err;
29320                     results[i] = data;
29321                     remaining--;
29322                     if (!remaining) callback(errors, results);
29323                 });
29324             });
29325         }
29326
29327
29328         // wraps an index to an interval [0..length-1]
29329         function utilWrap(index, length) {
29330             if (index < 0) {
29331                 index += Math.ceil(-index/length)*length;
29332             }
29333             return index % length;
29334         }
29335
29336
29337         /**
29338          * a replacement for functor
29339          *
29340          * @param {*} value any value
29341          * @returns {Function} a function that returns that value or the value if it's a function
29342          */
29343         function utilFunctor(value) {
29344             if (typeof value === 'function') return value;
29345             return function() {
29346                 return value;
29347             };
29348         }
29349
29350
29351         function utilNoAuto(selection) {
29352             var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea');
29353
29354             return selection
29355                 // assign 'new-password' even for non-password fields to prevent browsers (Chrome) ignoring 'off'
29356                 .attr('autocomplete', 'new-password')
29357                 .attr('autocorrect', 'off')
29358                 .attr('autocapitalize', 'off')
29359                 .attr('spellcheck', isText ? 'true' : 'false');
29360         }
29361
29362
29363         // https://stackoverflow.com/questions/194846/is-there-any-kind-of-hash-code-function-in-javascript
29364         // https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
29365         function utilHashcode(str) {
29366             var hash = 0;
29367             if (str.length === 0) {
29368                 return hash;
29369             }
29370             for (var i = 0; i < str.length; i++) {
29371                 var char = str.charCodeAt(i);
29372                 hash = ((hash << 5) - hash) + char;
29373                 hash = hash & hash; // Convert to 32bit integer
29374             }
29375             return hash;
29376         }
29377
29378         function utilCleanTags(tags) {
29379             var out = {};
29380             for (var k in tags) {
29381                 if (!k) continue;
29382                 var v = tags[k];
29383                 if (v !== undefined) {
29384                     out[k] = cleanValue(k, v);
29385                 }
29386             }
29387
29388             return out;
29389
29390
29391             function cleanValue(k, v) {
29392                 function keepSpaces(k) {
29393                     return /_hours|_times|:conditional$/.test(k);
29394                 }
29395
29396                 function skip(k) {
29397                     return /^(description|note|fixme)$/.test(k);
29398                 }
29399
29400                 if (skip(k)) return v;
29401
29402                 var cleaned = v
29403                     .split(';')
29404                     .map(function(s) { return s.trim(); })
29405                     .join(keepSpaces(k) ? '; ' : ';');
29406
29407                 // The code below is not intended to validate websites and emails.
29408                 // It is only intended to prevent obvious copy-paste errors. (#2323)
29409                 // clean website- and email-like tags
29410                 if (k.indexOf('website') !== -1 ||
29411                     k.indexOf('email') !== -1 ||
29412                     cleaned.indexOf('http') === 0) {
29413                     cleaned = cleaned
29414                         .replace(/[\u200B-\u200F\uFEFF]/g, '');  // strip LRM and other zero width chars
29415
29416                 }
29417
29418                 return cleaned;
29419             }
29420         }
29421
29422         // Like selection.property('value', ...), but avoids no-op value sets,
29423         // which can result in layout/repaint thrashing in some situations.
29424         function utilGetSetValue(selection, value) {
29425             function d3_selection_value(value) {
29426                 function valueNull() {
29427                     delete this.value;
29428                 }
29429
29430                 function valueConstant() {
29431                     if (this.value !== value) {
29432                         this.value = value;
29433                     }
29434                 }
29435
29436                 function valueFunction() {
29437                     var x = value.apply(this, arguments);
29438                     if (x == null) {
29439                         delete this.value;
29440                     } else if (this.value !== x) {
29441                         this.value = x;
29442                     }
29443                 }
29444
29445                 return value == null
29446                     ? valueNull : (typeof value === 'function'
29447                     ? valueFunction : valueConstant);
29448             }
29449
29450             if (arguments.length === 1) {
29451                 return selection.property('value');
29452             }
29453
29454             return selection.each(d3_selection_value(value));
29455         }
29456
29457         function utilKeybinding(namespace) {
29458             var _keybindings = {};
29459
29460
29461             function testBindings(isCapturing) {
29462                 var didMatch = false;
29463                 var bindings = Object.keys(_keybindings).map(function(id) { return _keybindings[id]; });
29464                 var i, binding;
29465
29466                 // Most key shortcuts will accept either lower or uppercase ('h' or 'H'),
29467                 // so we don't strictly match on the shift key, but we prioritize
29468                 // shifted keybindings first, and fallback to unshifted only if no match.
29469                 // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z')
29470
29471                 // priority match shifted keybindings first
29472                 for (i = 0; i < bindings.length; i++) {
29473                     binding = bindings[i];
29474                     if (!binding.event.modifiers.shiftKey) continue;  // no shift
29475                     if (!!binding.capture !== isCapturing) continue;
29476                     if (matches(binding, true)) {
29477                         binding.callback();
29478                         didMatch = true;
29479                     }
29480                 }
29481
29482                 // then unshifted keybindings
29483                 if (didMatch) return;
29484                 for (i = 0; i < bindings.length; i++) {
29485                     binding = bindings[i];
29486                     if (binding.event.modifiers.shiftKey) continue;   // shift
29487                     if (!!binding.capture !== isCapturing) continue;
29488                     if (matches(binding, false)) {
29489                         binding.callback();
29490                     }
29491                 }
29492
29493
29494                 function matches(binding, testShift) {
29495                     var event$1 = event;
29496                     var isMatch = false;
29497                     var tryKeyCode = true;
29498
29499                     // Prefer a match on `KeyboardEvent.key`
29500                     if (event$1.key !== undefined) {
29501                         tryKeyCode = (event$1.key.charCodeAt(0) > 255);  // outside ISO-Latin-1
29502                         isMatch = true;
29503
29504                         if (binding.event.key === undefined) {
29505                             isMatch = false;
29506                         } else if (Array.isArray(binding.event.key)) {
29507                             if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$1.key.toLowerCase()) === -1)
29508                                 isMatch = false;
29509                         } else {
29510                             if (event$1.key.toLowerCase() !== binding.event.key.toLowerCase())
29511                                 isMatch = false;
29512                         }
29513                     }
29514
29515                     // Fallback match on `KeyboardEvent.keyCode`, can happen if:
29516                     // - browser doesn't support `KeyboardEvent.key`
29517                     // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?)
29518                     if (!isMatch && tryKeyCode) {
29519                         isMatch = (event$1.keyCode === binding.event.keyCode);
29520                     }
29521
29522                     if (!isMatch) return false;
29523
29524                     // test modifier keys
29525                     if (!(event$1.ctrlKey && event$1.altKey)) {  // if both are set, assume AltGr and skip it - #4096
29526                         if (event$1.ctrlKey !== binding.event.modifiers.ctrlKey) return false;
29527                         if (event$1.altKey !== binding.event.modifiers.altKey) return false;
29528                     }
29529                     if (event$1.metaKey !== binding.event.modifiers.metaKey) return false;
29530                     if (testShift && event$1.shiftKey !== binding.event.modifiers.shiftKey) return false;
29531
29532                     return true;
29533                 }
29534             }
29535
29536
29537             function capture() {
29538                 testBindings(true);
29539             }
29540
29541
29542             function bubble() {
29543                 var tagName = d3_select(event.target).node().tagName;
29544                 if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
29545                     return;
29546                 }
29547                 testBindings(false);
29548             }
29549
29550
29551             function keybinding(selection) {
29552                 selection = selection || d3_select(document);
29553                 selection.on('keydown.capture.' + namespace, capture, true);
29554                 selection.on('keydown.bubble.' + namespace, bubble, false);
29555                 return keybinding;
29556             }
29557
29558             // was: keybinding.off()
29559             keybinding.unbind = function(selection) {
29560                 _keybindings = [];
29561                 selection = selection || d3_select(document);
29562                 selection.on('keydown.capture.' + namespace, null);
29563                 selection.on('keydown.bubble.' + namespace, null);
29564                 return keybinding;
29565             };
29566
29567
29568             keybinding.clear = function() {
29569                 _keybindings = {};
29570                 return keybinding;
29571             };
29572
29573
29574             // Remove one or more keycode bindings.
29575             keybinding.off = function(codes, capture) {
29576                 var arr = utilArrayUniq([].concat(codes));
29577
29578                 for (var i = 0; i < arr.length; i++) {
29579                     var id = arr[i] + (capture ? '-capture' : '-bubble');
29580                     delete _keybindings[id];
29581                 }
29582                 return keybinding;
29583             };
29584
29585
29586             // Add one or more keycode bindings.
29587             keybinding.on = function(codes, callback, capture) {
29588                 if (typeof callback !== 'function') {
29589                     return keybinding.off(codes, capture);
29590                 }
29591
29592                 var arr = utilArrayUniq([].concat(codes));
29593
29594                 for (var i = 0; i < arr.length; i++) {
29595                     var id = arr[i] + (capture ? '-capture' : '-bubble');
29596                     var binding = {
29597                         id: id,
29598                         capture: capture,
29599                         callback: callback,
29600                         event: {
29601                             key: undefined,  // preferred
29602                             keyCode: 0,      // fallback
29603                             modifiers: {
29604                                 shiftKey: false,
29605                                 ctrlKey: false,
29606                                 altKey: false,
29607                                 metaKey: false
29608                             }
29609                         }
29610                     };
29611
29612                     if (_keybindings[id]) {
29613                         console.warn('warning: duplicate keybinding for "' + id + '"'); // eslint-disable-line no-console
29614                     }
29615
29616                     _keybindings[id] = binding;
29617
29618                     var matches = arr[i].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
29619                     for (var j = 0; j < matches.length; j++) {
29620                         // Normalise matching errors
29621                         if (matches[j] === '++') matches[j] = '+';
29622
29623                         if (matches[j] in utilKeybinding.modifierCodes) {
29624                             var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j]]];
29625                             binding.event.modifiers[prop] = true;
29626                         } else {
29627                             binding.event.key = utilKeybinding.keys[matches[j]] || matches[j];
29628                             if (matches[j] in utilKeybinding.keyCodes) {
29629                                 binding.event.keyCode = utilKeybinding.keyCodes[matches[j]];
29630                             }
29631                         }
29632                     }
29633                 }
29634
29635                 return keybinding;
29636             };
29637
29638
29639             return keybinding;
29640         }
29641
29642
29643         /*
29644          * See https://github.com/keithamus/jwerty
29645          */
29646
29647         utilKeybinding.modifierCodes = {
29648             // Shift key, ⇧
29649             '⇧': 16, shift: 16,
29650             // CTRL key, on Mac: ⌃
29651             '⌃': 17, ctrl: 17,
29652             // ALT key, on Mac: ⌥ (Alt)
29653             '⌥': 18, alt: 18, option: 18,
29654             // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
29655             '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91
29656         };
29657
29658         utilKeybinding.modifierProperties = {
29659             16: 'shiftKey',
29660             17: 'ctrlKey',
29661             18: 'altKey',
29662             91: 'metaKey'
29663         };
29664
29665         utilKeybinding.keys = {
29666             // Backspace key, on Mac: ⌫ (Backspace)
29667             '⌫': 'Backspace', backspace: 'Backspace',
29668             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
29669             '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab',
29670             // Return key, ↩
29671             '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter',
29672             // Pause/Break key
29673             'pause': 'Pause', 'pause-break': 'Pause',
29674             // Caps Lock key, ⇪
29675             '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock',
29676             // Escape key, on Mac: ⎋, on Windows: Esc
29677             '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'],
29678             // Space key
29679             space: [' ', 'Spacebar'],
29680             // Page-Up key, or pgup, on Mac: ↖
29681             '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp',
29682             // Page-Down key, or pgdown, on Mac: ↘
29683             '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown',
29684             // END key, on Mac: ⇟
29685             '⇟': 'End', end: 'End',
29686             // HOME key, on Mac: ⇞
29687             '⇞': 'Home', home: 'Home',
29688             // Insert key, or ins
29689             ins: 'Insert', insert: 'Insert',
29690             // Delete key, on Mac: ⌦ (Delete)
29691             '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'],
29692             // Left Arrow Key, or ←
29693             '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'],
29694             // Up Arrow Key, or ↑
29695             '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'],
29696             // Right Arrow Key, or →
29697             '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'],
29698             // Up Arrow Key, or ↓
29699             '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'],
29700             // odities, stuff for backward compatibility (browsers and code):
29701             // Num-Multiply, or *
29702             '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'],
29703             // Num-Plus or +
29704             '+': ['+', 'Add'], 'plus': ['+', 'Add'],
29705             // Num-Subtract, or -
29706             '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'],
29707             // Semicolon
29708             semicolon: ';',
29709             // = or equals
29710             equals: '=',
29711             // Comma, or ,
29712             comma: ',',
29713             // Period, or ., or full-stop
29714             period: '.', 'full-stop': '.',
29715             // Slash, or /, or forward-slash
29716             slash: '/', 'forward-slash': '/',
29717             // Tick, or `, or back-quote
29718             tick: '`', 'back-quote': '`',
29719             // Open bracket, or [
29720             'open-bracket': '[',
29721             // Back slash, or \
29722             'back-slash': '\\',
29723             // Close backet, or ]
29724             'close-bracket': ']',
29725             // Apostrophe, or Quote, or '
29726             quote: '\'', apostrophe: '\'',
29727             // NUMPAD 0-9
29728             'num-0': '0',
29729             'num-1': '1',
29730             'num-2': '2',
29731             'num-3': '3',
29732             'num-4': '4',
29733             'num-5': '5',
29734             'num-6': '6',
29735             'num-7': '7',
29736             'num-8': '8',
29737             'num-9': '9',
29738             // F1-F25
29739             f1: 'F1',
29740             f2: 'F2',
29741             f3: 'F3',
29742             f4: 'F4',
29743             f5: 'F5',
29744             f6: 'F6',
29745             f7: 'F7',
29746             f8: 'F8',
29747             f9: 'F9',
29748             f10: 'F10',
29749             f11: 'F11',
29750             f12: 'F12',
29751             f13: 'F13',
29752             f14: 'F14',
29753             f15: 'F15',
29754             f16: 'F16',
29755             f17: 'F17',
29756             f18: 'F18',
29757             f19: 'F19',
29758             f20: 'F20',
29759             f21: 'F21',
29760             f22: 'F22',
29761             f23: 'F23',
29762             f24: 'F24',
29763             f25: 'F25'
29764         };
29765
29766         utilKeybinding.keyCodes = {
29767             // Backspace key, on Mac: ⌫ (Backspace)
29768             '⌫': 8, backspace: 8,
29769             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
29770             '⇥': 9, '⇆': 9, tab: 9,
29771             // Return key, ↩
29772             '↩': 13, 'return': 13, enter: 13, '⌅': 13,
29773             // Pause/Break key
29774             'pause': 19, 'pause-break': 19,
29775             // Caps Lock key, ⇪
29776             '⇪': 20, caps: 20, 'caps-lock': 20,
29777             // Escape key, on Mac: ⎋, on Windows: Esc
29778             '⎋': 27, escape: 27, esc: 27,
29779             // Space key
29780             space: 32,
29781             // Page-Up key, or pgup, on Mac: ↖
29782             '↖': 33, pgup: 33, 'page-up': 33,
29783             // Page-Down key, or pgdown, on Mac: ↘
29784             '↘': 34, pgdown: 34, 'page-down': 34,
29785             // END key, on Mac: ⇟
29786             '⇟': 35, end: 35,
29787             // HOME key, on Mac: ⇞
29788             '⇞': 36, home: 36,
29789             // Insert key, or ins
29790             ins: 45, insert: 45,
29791             // Delete key, on Mac: ⌦ (Delete)
29792             '⌦': 46, del: 46, 'delete': 46,
29793             // Left Arrow Key, or ←
29794             '←': 37, left: 37, 'arrow-left': 37,
29795             // Up Arrow Key, or ↑
29796             '↑': 38, up: 38, 'arrow-up': 38,
29797             // Right Arrow Key, or →
29798             '→': 39, right: 39, 'arrow-right': 39,
29799             // Up Arrow Key, or ↓
29800             '↓': 40, down: 40, 'arrow-down': 40,
29801             // odities, printing characters that come out wrong:
29802             // Firefox Equals
29803             'ffequals': 61,
29804             // Num-Multiply, or *
29805             '*': 106, star: 106, asterisk: 106, multiply: 106,
29806             // Num-Plus or +
29807             '+': 107, 'plus': 107,
29808             // Num-Subtract, or -
29809             '-': 109, subtract: 109,
29810             // Firefox Plus
29811             'ffplus': 171,
29812             // Firefox Minus
29813             'ffminus': 173,
29814             // Semicolon
29815             ';': 186, semicolon: 186,
29816             // = or equals
29817             '=': 187, 'equals': 187,
29818             // Comma, or ,
29819             ',': 188, comma: 188,
29820             // Dash / Underscore key
29821             'dash': 189,
29822             // Period, or ., or full-stop
29823             '.': 190, period: 190, 'full-stop': 190,
29824             // Slash, or /, or forward-slash
29825             '/': 191, slash: 191, 'forward-slash': 191,
29826             // Tick, or `, or back-quote
29827             '`': 192, tick: 192, 'back-quote': 192,
29828             // Open bracket, or [
29829             '[': 219, 'open-bracket': 219,
29830             // Back slash, or \
29831             '\\': 220, 'back-slash': 220,
29832             // Close backet, or ]
29833             ']': 221, 'close-bracket': 221,
29834             // Apostrophe, or Quote, or '
29835             '\'': 222, quote: 222, apostrophe: 222
29836         };
29837
29838         // NUMPAD 0-9
29839         var i$2 = 95, n = 0;
29840         while (++i$2 < 106) {
29841             utilKeybinding.keyCodes['num-' + n] = i$2;
29842             ++n;
29843         }
29844
29845         // 0-9
29846         i$2 = 47; n = 0;
29847         while (++i$2 < 58) {
29848             utilKeybinding.keyCodes[n] = i$2;
29849             ++n;
29850         }
29851
29852         // F1-F25
29853         i$2 = 111; n = 1;
29854         while (++i$2 < 136) {
29855             utilKeybinding.keyCodes['f' + n] = i$2;
29856             ++n;
29857         }
29858
29859         // a-z
29860         i$2 = 64;
29861         while (++i$2 < 91) {
29862             utilKeybinding.keyCodes[String.fromCharCode(i$2).toLowerCase()] = i$2;
29863         }
29864
29865         function utilObjectOmit(obj, omitKeys) {
29866             return Object.keys(obj).reduce(function(result, key) {
29867                 if (omitKeys.indexOf(key) === -1) {
29868                     result[key] = obj[key];  // keep
29869                 }
29870                 return result;
29871             }, {});
29872         }
29873
29874         // Copies a variable number of methods from source to target.
29875         function utilRebind(target, source) {
29876             var i = 1, n = arguments.length, method;
29877             while (++i < n) {
29878                 target[method = arguments[i]] = d3_rebind(target, source, source[method]);
29879             }
29880             return target;
29881         }
29882
29883         // Method is assumed to be a standard D3 getter-setter:
29884         // If passed with no arguments, gets the value.
29885         // If passed with arguments, sets the value and returns the target.
29886         function d3_rebind(target, source, method) {
29887             return function() {
29888                 var value = method.apply(source, arguments);
29889                 return value === source ? target : value;
29890             };
29891         }
29892
29893         // A per-domain session mutex backed by a cookie and dead man's
29894         // switch. If the session crashes, the mutex will auto-release
29895         // after 5 seconds.
29896
29897         // This accepts a string and returns an object that complies with utilSessionMutexType
29898         function utilSessionMutex(name) {
29899             var mutex = {};
29900             var intervalID;
29901
29902             function renew() {
29903                 var expires = new Date();
29904                 expires.setSeconds(expires.getSeconds() + 5);
29905                 document.cookie = name + '=1; expires=' + expires.toUTCString();
29906             }
29907
29908             mutex.lock = function () {
29909                 if (intervalID) return true;
29910                 var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1');
29911                 if (cookie) return false;
29912                 renew();
29913                 intervalID = window.setInterval(renew, 4000);
29914                 return true;
29915             };
29916
29917             mutex.unlock = function () {
29918                 if (!intervalID) return;
29919                 document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';
29920                 clearInterval(intervalID);
29921                 intervalID = null;
29922             };
29923
29924             mutex.locked = function () {
29925                 return !!intervalID;
29926             };
29927
29928             return mutex;
29929         }
29930
29931         function utilTiler() {
29932             var _size = [256, 256];
29933             var _scale = 256;
29934             var _tileSize = 256;
29935             var _zoomExtent = [0, 20];
29936             var _translate = [_size[0] / 2, _size[1] / 2];
29937             var _margin = 0;
29938             var _skipNullIsland = false;
29939
29940
29941             function clamp(num, min, max) {
29942                 return Math.max(min, Math.min(num, max));
29943             }
29944
29945
29946             function nearNullIsland(tile) {
29947                 var x = tile[0];
29948                 var y = tile[1];
29949                 var z = tile[2];
29950                 if (z >= 7) {
29951                     var center = Math.pow(2, z - 1);
29952                     var width = Math.pow(2, z - 6);
29953                     var min = center - (width / 2);
29954                     var max = center + (width / 2) - 1;
29955                     return x >= min && x <= max && y >= min && y <= max;
29956                 }
29957                 return false;
29958             }
29959
29960
29961             function tiler() {
29962                 var z = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
29963                 var z0 = clamp(Math.round(z), _zoomExtent[0], _zoomExtent[1]);
29964                 var tileMin = 0;
29965                 var tileMax = Math.pow(2, z0) - 1;
29966                 var log2ts = Math.log(_tileSize) * Math.LOG2E;
29967                 var k = Math.pow(2, z - z0 + log2ts);
29968                 var origin = [
29969                     (_translate[0] - _scale / 2) / k,
29970                     (_translate[1] - _scale / 2) / k
29971                 ];
29972
29973                 var cols = d3_range(
29974                     clamp(Math.floor(-origin[0]) - _margin,               tileMin, tileMax + 1),
29975                     clamp(Math.ceil(_size[0] / k - origin[0]) + _margin,  tileMin, tileMax + 1)
29976                 );
29977                 var rows = d3_range(
29978                     clamp(Math.floor(-origin[1]) - _margin,               tileMin, tileMax + 1),
29979                     clamp(Math.ceil(_size[1] / k - origin[1]) + _margin,  tileMin, tileMax + 1)
29980                 );
29981
29982                 var tiles = [];
29983                 for (var i = 0; i < rows.length; i++) {
29984                     var y = rows[i];
29985                     for (var j = 0; j < cols.length; j++) {
29986                         var x = cols[j];
29987
29988                         if (i >= _margin && i <= rows.length - _margin &&
29989                             j >= _margin && j <= cols.length - _margin) {
29990                             tiles.unshift([x, y, z0]);  // tiles in view at beginning
29991                         } else {
29992                             tiles.push([x, y, z0]);     // tiles in margin at the end
29993                         }
29994                     }
29995                 }
29996
29997                 tiles.translate = origin;
29998                 tiles.scale = k;
29999
30000                 return tiles;
30001             }
30002
30003
30004             /**
30005              * getTiles() returns an array of tiles that cover the map view
30006              */
30007             tiler.getTiles = function(projection) {
30008                 var origin = [
30009                     projection.scale() * Math.PI - projection.translate()[0],
30010                     projection.scale() * Math.PI - projection.translate()[1]
30011                 ];
30012
30013                 this
30014                     .size(projection.clipExtent()[1])
30015                     .scale(projection.scale() * 2 * Math.PI)
30016                     .translate(projection.translate());
30017
30018                 var tiles = tiler();
30019                 var ts = tiles.scale;
30020
30021                 return tiles
30022                     .map(function(tile) {
30023                         if (_skipNullIsland && nearNullIsland(tile)) {
30024                             return false;
30025                         }
30026                         var x = tile[0] * ts - origin[0];
30027                         var y = tile[1] * ts - origin[1];
30028                         return {
30029                             id: tile.toString(),
30030                             xyz: tile,
30031                             extent: geoExtent(
30032                                 projection.invert([x, y + ts]),
30033                                 projection.invert([x + ts, y])
30034                             )
30035                         };
30036                     }).filter(Boolean);
30037             };
30038
30039
30040             /**
30041              * getGeoJSON() returns a FeatureCollection for debugging tiles
30042              */
30043             tiler.getGeoJSON = function(projection) {
30044                 var features = tiler.getTiles(projection).map(function(tile) {
30045                     return {
30046                         type: 'Feature',
30047                         properties: {
30048                             id: tile.id,
30049                             name: tile.id
30050                         },
30051                         geometry: {
30052                             type: 'Polygon',
30053                             coordinates: [ tile.extent.polygon() ]
30054                         }
30055                     };
30056                 });
30057
30058                 return {
30059                     type: 'FeatureCollection',
30060                     features: features
30061                 };
30062             };
30063
30064
30065             tiler.tileSize = function(val) {
30066                 if (!arguments.length) return _tileSize;
30067                 _tileSize = val;
30068                 return tiler;
30069             };
30070
30071
30072             tiler.zoomExtent = function(val) {
30073                 if (!arguments.length) return _zoomExtent;
30074                 _zoomExtent = val;
30075                 return tiler;
30076             };
30077
30078
30079             tiler.size = function(val) {
30080                 if (!arguments.length) return _size;
30081                 _size = val;
30082                 return tiler;
30083             };
30084
30085
30086             tiler.scale = function(val) {
30087                 if (!arguments.length) return _scale;
30088                 _scale = val;
30089                 return tiler;
30090             };
30091
30092
30093             tiler.translate = function(val) {
30094                 if (!arguments.length) return _translate;
30095                 _translate = val;
30096                 return tiler;
30097             };
30098
30099
30100             // number to extend the rows/columns beyond those covering the viewport
30101             tiler.margin = function(val) {
30102                 if (!arguments.length) return _margin;
30103                 _margin = +val;
30104                 return tiler;
30105             };
30106
30107
30108             tiler.skipNullIsland = function(val) {
30109                 if (!arguments.length) return _skipNullIsland;
30110                 _skipNullIsland = val;
30111                 return tiler;
30112             };
30113
30114
30115             return tiler;
30116         }
30117
30118         function utilTriggerEvent(target, type) {
30119             target.each(function() {
30120                 var evt = document.createEvent('HTMLEvents');
30121                 evt.initEvent(type, true, true);
30122                 this.dispatchEvent(evt);
30123             });
30124         }
30125
30126         function osmEntity(attrs) {
30127             // For prototypal inheritance.
30128             if (this instanceof osmEntity) return;
30129
30130             // Create the appropriate subtype.
30131             if (attrs && attrs.type) {
30132                 return osmEntity[attrs.type].apply(this, arguments);
30133             } else if (attrs && attrs.id) {
30134                 return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
30135             }
30136
30137             // Initialize a generic Entity (used only in tests).
30138             return (new osmEntity()).initialize(arguments);
30139         }
30140
30141
30142         osmEntity.id = function(type) {
30143             return osmEntity.id.fromOSM(type, osmEntity.id.next[type]--);
30144         };
30145
30146
30147         osmEntity.id.next = {
30148             changeset: -1, node: -1, way: -1, relation: -1
30149         };
30150
30151
30152         osmEntity.id.fromOSM = function(type, id) {
30153             return type[0] + id;
30154         };
30155
30156
30157         osmEntity.id.toOSM = function(id) {
30158             return id.slice(1);
30159         };
30160
30161
30162         osmEntity.id.type = function(id) {
30163             return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]];
30164         };
30165
30166
30167         // A function suitable for use as the second argument to d3.selection#data().
30168         osmEntity.key = function(entity) {
30169             return entity.id + 'v' + (entity.v || 0);
30170         };
30171
30172         var _deprecatedTagValuesByKey;
30173
30174         osmEntity.deprecatedTagValuesByKey = function() {
30175             if (!_deprecatedTagValuesByKey) {
30176                 _deprecatedTagValuesByKey = {};
30177                 dataDeprecated.forEach(function(d) {
30178                     var oldKeys = Object.keys(d.old);
30179                     if (oldKeys.length === 1) {
30180                         var oldKey = oldKeys[0];
30181                         var oldValue = d.old[oldKey];
30182                         if (oldValue !== '*') {
30183                             if (!_deprecatedTagValuesByKey[oldKey]) {
30184                                 _deprecatedTagValuesByKey[oldKey] = [oldValue];
30185                             } else {
30186                                 _deprecatedTagValuesByKey[oldKey].push(oldValue);
30187                             }
30188                         }
30189                     }
30190                 });
30191             }
30192             return _deprecatedTagValuesByKey;
30193         };
30194
30195
30196         osmEntity.prototype = {
30197
30198             tags: {},
30199
30200
30201             initialize: function(sources) {
30202                 for (var i = 0; i < sources.length; ++i) {
30203                     var source = sources[i];
30204                     for (var prop in source) {
30205                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
30206                             if (source[prop] === undefined) {
30207                                 delete this[prop];
30208                             } else {
30209                                 this[prop] = source[prop];
30210                             }
30211                         }
30212                     }
30213                 }
30214
30215                 if (!this.id && this.type) {
30216                     this.id = osmEntity.id(this.type);
30217                 }
30218                 if (!this.hasOwnProperty('visible')) {
30219                     this.visible = true;
30220                 }
30221
30222                 return this;
30223             },
30224
30225
30226             copy: function(resolver, copies) {
30227                 if (copies[this.id])
30228                     return copies[this.id];
30229
30230                 var copy = osmEntity(this, { id: undefined, user: undefined, version: undefined });
30231                 copies[this.id] = copy;
30232
30233                 return copy;
30234             },
30235
30236
30237             osmId: function() {
30238                 return osmEntity.id.toOSM(this.id);
30239             },
30240
30241
30242             isNew: function() {
30243                 return this.osmId() < 0;
30244             },
30245
30246
30247             update: function(attrs) {
30248                 return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
30249             },
30250
30251
30252             mergeTags: function(tags) {
30253                 var merged = Object.assign({}, this.tags);   // shallow copy
30254                 var changed = false;
30255                 for (var k in tags) {
30256                     var t1 = merged[k];
30257                     var t2 = tags[k];
30258                     if (!t1) {
30259                         changed = true;
30260                         merged[k] = t2;
30261                     } else if (t1 !== t2) {
30262                         changed = true;
30263                         merged[k] = utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
30264                     }
30265                 }
30266                 return changed ? this.update({ tags: merged }) : this;
30267             },
30268
30269
30270             intersects: function(extent, resolver) {
30271                 return this.extent(resolver).intersects(extent);
30272             },
30273
30274
30275             hasNonGeometryTags: function() {
30276                 return Object.keys(this.tags).some(function(k) { return k !== 'area'; });
30277             },
30278
30279             hasParentRelations: function(resolver) {
30280                 return resolver.parentRelations(this).length > 0;
30281             },
30282
30283             hasInterestingTags: function() {
30284                 return Object.keys(this.tags).some(osmIsInterestingTag);
30285             },
30286
30287             hasWikidata: function() {
30288                 return !!this.tags.wikidata || !!this.tags['brand:wikidata'];
30289             },
30290
30291             isHighwayIntersection: function() {
30292                 return false;
30293             },
30294
30295             isDegenerate: function() {
30296                 return true;
30297             },
30298
30299             deprecatedTags: function() {
30300                 var tags = this.tags;
30301
30302                 // if there are no tags, none can be deprecated
30303                 if (Object.keys(tags).length === 0) return [];
30304
30305                 var deprecated = [];
30306                 dataDeprecated.forEach(function(d) {
30307                     var matchesDeprecatedTags = Object.keys(d.old).every(function(key) {
30308                         if (!tags[key]) return false;
30309                         if (d.old[key] === '*') return true;
30310
30311                         var vals = tags[key].split(';').filter(Boolean);
30312                         if (vals.length === 0) {
30313                             return false;
30314                         } else if (vals.length > 1) {
30315                             return vals.indexOf(d.old[key]) !== -1;
30316                         } else {
30317                             if (tags[key] === d.old[key]) {
30318                                 if (d.old[key] === d.replace[key]) {
30319                                     return !Object.keys(d.replace).every(function(key) {
30320                                         return tags[key] === d.replace[key];
30321                                     });
30322                                 } else {
30323                                     return true;
30324                                 }
30325                             }
30326                         }
30327                         return false;
30328                     });
30329                     if (matchesDeprecatedTags) {
30330                         deprecated.push(d);
30331                     }
30332                 });
30333
30334                 return deprecated;
30335             }
30336         };
30337
30338         function osmLanes(entity) {
30339             if (entity.type !== 'way') return null;
30340             if (!entity.tags.highway) return null;
30341
30342             var tags = entity.tags;
30343             var isOneWay = entity.isOneWay();
30344             var laneCount = getLaneCount(tags, isOneWay);
30345             var maxspeed = parseMaxspeed(tags);
30346
30347             var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
30348             var forward = laneDirections.forward;
30349             var backward = laneDirections.backward;
30350             var bothways = laneDirections.bothways;
30351
30352             // parse the piped string 'x|y|z' format
30353             var turnLanes = {};
30354             turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']);
30355             turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']);
30356             turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']);
30357
30358             var maxspeedLanes = {};
30359             maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed);
30360             maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed);
30361             maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed);
30362
30363             var psvLanes = {};
30364             psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']);
30365             psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']);
30366             psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']);
30367
30368             var busLanes = {};
30369             busLanes.unspecified = parseMiscLanes(tags['bus:lanes']);
30370             busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']);
30371             busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']);
30372
30373             var taxiLanes = {};
30374             taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']);
30375             taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']);
30376             taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']);
30377
30378             var hovLanes = {};
30379             hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']);
30380             hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']);
30381             hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']);
30382
30383             var hgvLanes = {};
30384             hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']);
30385             hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']);
30386             hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']);
30387
30388             var bicyclewayLanes = {};
30389             bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']);
30390             bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']);
30391             bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']);
30392
30393             var lanesObj = {
30394                 forward: [],
30395                 backward: [],
30396                 unspecified: []
30397             };
30398
30399             // map forward/backward/unspecified of each lane type to lanesObj
30400             mapToLanesObj(lanesObj, turnLanes, 'turnLane');
30401             mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed');
30402             mapToLanesObj(lanesObj, psvLanes, 'psv');
30403             mapToLanesObj(lanesObj, busLanes, 'bus');
30404             mapToLanesObj(lanesObj, taxiLanes, 'taxi');
30405             mapToLanesObj(lanesObj, hovLanes, 'hov');
30406             mapToLanesObj(lanesObj, hgvLanes, 'hgv');
30407             mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway');
30408
30409             return {
30410                 metadata: {
30411                     count: laneCount,
30412                     oneway: isOneWay,
30413                     forward: forward,
30414                     backward: backward,
30415                     bothways: bothways,
30416                     turnLanes: turnLanes,
30417                     maxspeed: maxspeed,
30418                     maxspeedLanes: maxspeedLanes,
30419                     psvLanes: psvLanes,
30420                     busLanes: busLanes,
30421                     taxiLanes: taxiLanes,
30422                     hovLanes: hovLanes,
30423                     hgvLanes: hgvLanes,
30424                     bicyclewayLanes: bicyclewayLanes
30425                 },
30426                 lanes: lanesObj
30427             };
30428         }
30429
30430
30431         function getLaneCount(tags, isOneWay) {
30432             var count;
30433             if (tags.lanes) {
30434                 count = parseInt(tags.lanes, 10);
30435                 if (count > 0) {
30436                     return count;
30437                 }
30438             }
30439
30440
30441             switch (tags.highway) {
30442                 case 'trunk':
30443                 case 'motorway':
30444                     count = isOneWay ? 2 : 4;
30445                     break;
30446                 default:
30447                     count = isOneWay ? 1 : 2;
30448                     break;
30449             }
30450
30451             return count;
30452         }
30453
30454
30455         function parseMaxspeed(tags) {
30456             var maxspeed = tags.maxspeed;
30457             if (!maxspeed) return;
30458
30459             var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
30460             if (!maxspeedRegex.test(maxspeed)) return;
30461
30462             return parseInt(maxspeed, 10);
30463         }
30464
30465
30466         function parseLaneDirections(tags, isOneWay, laneCount) {
30467             var forward = parseInt(tags['lanes:forward'], 10);
30468             var backward = parseInt(tags['lanes:backward'], 10);
30469             var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0;
30470
30471             if (parseInt(tags.oneway, 10) === -1) {
30472                 forward = 0;
30473                 bothways = 0;
30474                 backward = laneCount;
30475             }
30476             else if (isOneWay) {
30477                 forward = laneCount;
30478                 bothways = 0;
30479                 backward = 0;
30480             }
30481             else if (isNaN(forward) && isNaN(backward)) {
30482                 backward = Math.floor((laneCount - bothways) / 2);
30483                 forward = laneCount - bothways - backward;
30484             }
30485             else if (isNaN(forward)) {
30486                 if (backward > laneCount - bothways) {
30487                     backward = laneCount - bothways;
30488                 }
30489                 forward = laneCount - bothways - backward;
30490             }
30491             else if (isNaN(backward)) {
30492                 if (forward > laneCount - bothways) {
30493                     forward = laneCount - bothways;
30494                 }
30495                 backward = laneCount - bothways - forward;
30496             }
30497             return {
30498                 forward: forward,
30499                 backward: backward,
30500                 bothways: bothways
30501             };
30502         }
30503
30504
30505         function parseTurnLanes(tag){
30506             if (!tag) return;
30507
30508             var validValues = [
30509                 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right',
30510                 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none'
30511             ];
30512
30513             return tag.split('|')
30514                 .map(function (s) {
30515                     if (s === '') s = 'none';
30516                     return s.split(';')
30517                         .map(function (d) {
30518                             return validValues.indexOf(d) === -1 ? 'unknown': d;
30519                         });
30520                 });
30521         }
30522
30523
30524         function parseMaxspeedLanes(tag, maxspeed) {
30525             if (!tag) return;
30526
30527             return tag.split('|')
30528                 .map(function (s) {
30529                     if (s === 'none') return s;
30530                     var m = parseInt(s, 10);
30531                     if (s === '' || m === maxspeed) return null;
30532                     return isNaN(m) ? 'unknown': m;
30533                 });
30534         }
30535
30536
30537         function parseMiscLanes(tag) {
30538             if (!tag) return;
30539
30540             var validValues = [
30541                 'yes', 'no', 'designated'
30542             ];
30543
30544             return tag.split('|')
30545                 .map(function (s) {
30546                     if (s === '') s = 'no';
30547                     return validValues.indexOf(s) === -1 ? 'unknown': s;
30548                 });
30549         }
30550
30551
30552         function parseBicycleWay(tag) {
30553             if (!tag) return;
30554
30555             var validValues = [
30556                 'yes', 'no', 'designated', 'lane'
30557             ];
30558
30559             return tag.split('|')
30560                 .map(function (s) {
30561                     if (s === '') s = 'no';
30562                     return validValues.indexOf(s) === -1 ? 'unknown': s;
30563                 });
30564         }
30565
30566
30567         function mapToLanesObj(lanesObj, data, key) {
30568             if (data.forward) data.forward.forEach(function(l, i) {
30569                 if (!lanesObj.forward[i]) lanesObj.forward[i] = {};
30570                 lanesObj.forward[i][key] = l;
30571             });
30572             if (data.backward) data.backward.forEach(function(l, i) {
30573                 if (!lanesObj.backward[i]) lanesObj.backward[i] = {};
30574                 lanesObj.backward[i][key] = l;
30575             });
30576             if (data.unspecified) data.unspecified.forEach(function(l, i) {
30577                 if (!lanesObj.unspecified[i]) lanesObj.unspecified[i] = {};
30578                 lanesObj.unspecified[i][key] = l;
30579             });
30580         }
30581
30582         function osmWay() {
30583             if (!(this instanceof osmWay)) {
30584                 return (new osmWay()).initialize(arguments);
30585             } else if (arguments.length) {
30586                 this.initialize(arguments);
30587             }
30588         }
30589
30590
30591         osmEntity.way = osmWay;
30592
30593         osmWay.prototype = Object.create(osmEntity.prototype);
30594
30595
30596         Object.assign(osmWay.prototype, {
30597             type: 'way',
30598             nodes: [],
30599
30600
30601             copy: function(resolver, copies) {
30602                 if (copies[this.id]) return copies[this.id];
30603
30604                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
30605
30606                 var nodes = this.nodes.map(function(id) {
30607                     return resolver.entity(id).copy(resolver, copies).id;
30608                 });
30609
30610                 copy = copy.update({ nodes: nodes });
30611                 copies[this.id] = copy;
30612
30613                 return copy;
30614             },
30615
30616
30617             extent: function(resolver) {
30618                 return resolver.transient(this, 'extent', function() {
30619                     var extent = geoExtent();
30620                     for (var i = 0; i < this.nodes.length; i++) {
30621                         var node = resolver.hasEntity(this.nodes[i]);
30622                         if (node) {
30623                             extent._extend(node.extent());
30624                         }
30625                     }
30626                     return extent;
30627                 });
30628             },
30629
30630
30631             first: function() {
30632                 return this.nodes[0];
30633             },
30634
30635
30636             last: function() {
30637                 return this.nodes[this.nodes.length - 1];
30638             },
30639
30640
30641             contains: function(node) {
30642                 return this.nodes.indexOf(node) >= 0;
30643             },
30644
30645
30646             affix: function(node) {
30647                 if (this.nodes[0] === node) return 'prefix';
30648                 if (this.nodes[this.nodes.length - 1] === node) return 'suffix';
30649             },
30650
30651
30652             layer: function() {
30653                 // explicit layer tag, clamp between -10, 10..
30654                 if (isFinite(this.tags.layer)) {
30655                     return Math.max(-10, Math.min(+(this.tags.layer), 10));
30656                 }
30657
30658                 // implied layer tag..
30659                 if (this.tags.covered === 'yes') return -1;
30660                 if (this.tags.location === 'overground') return 1;
30661                 if (this.tags.location === 'underground') return -1;
30662                 if (this.tags.location === 'underwater') return -10;
30663
30664                 if (this.tags.power === 'line') return 10;
30665                 if (this.tags.power === 'minor_line') return 10;
30666                 if (this.tags.aerialway) return 10;
30667                 if (this.tags.bridge) return 1;
30668                 if (this.tags.cutting) return -1;
30669                 if (this.tags.tunnel) return -1;
30670                 if (this.tags.waterway) return -1;
30671                 if (this.tags.man_made === 'pipeline') return -10;
30672                 if (this.tags.boundary) return -10;
30673                 return 0;
30674             },
30675
30676
30677             isOneWay: function() {
30678                 // explicit oneway tag..
30679                 var values = {
30680                     'yes': true,
30681                     '1': true,
30682                     '-1': true,
30683                     'reversible': true,
30684                     'alternating': true,
30685                     'no': false,
30686                     '0': false
30687                 };
30688                 if (values[this.tags.oneway] !== undefined) {
30689                     return values[this.tags.oneway];
30690                 }
30691
30692                 // implied oneway tag..
30693                 for (var key in this.tags) {
30694                     if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key]))
30695                         return true;
30696                 }
30697                 return false;
30698             },
30699
30700             // Some identifier for tag that implies that this way is "sided",
30701             // i.e. the right side is the 'inside' (e.g. the right side of a
30702             // natural=cliff is lower).
30703             sidednessIdentifier: function() {
30704                 for (var key in this.tags) {
30705                     var value = this.tags[key];
30706                     if (key in osmRightSideIsInsideTags && (value in osmRightSideIsInsideTags[key])) {
30707                         if (osmRightSideIsInsideTags[key][value] === true) {
30708                             return key;
30709                         } else {
30710                             // if the map's value is something other than a
30711                             // literal true, we should use it so we can
30712                             // special case some keys (e.g. natural=coastline
30713                             // is handled differently to other naturals).
30714                             return osmRightSideIsInsideTags[key][value];
30715                         }
30716                     }
30717                 }
30718
30719                 return null;
30720             },
30721
30722             isSided: function() {
30723                 if (this.tags.two_sided === 'yes') {
30724                     return false;
30725                 }
30726
30727                 return this.sidednessIdentifier() !== null;
30728             },
30729
30730             lanes: function() {
30731                 return osmLanes(this);
30732             },
30733
30734
30735             isClosed: function() {
30736                 return this.nodes.length > 1 && this.first() === this.last();
30737             },
30738
30739
30740             isConvex: function(resolver) {
30741                 if (!this.isClosed() || this.isDegenerate()) return null;
30742
30743                 var nodes = utilArrayUniq(resolver.childNodes(this));
30744                 var coords = nodes.map(function(n) { return n.loc; });
30745                 var curr = 0;
30746                 var prev = 0;
30747
30748                 for (var i = 0; i < coords.length; i++) {
30749                     var o = coords[(i+1) % coords.length];
30750                     var a = coords[i];
30751                     var b = coords[(i+2) % coords.length];
30752                     var res = geoVecCross(a, b, o);
30753
30754                     curr = (res > 0) ? 1 : (res < 0) ? -1 : 0;
30755                     if (curr === 0) {
30756                         continue;
30757                     } else if (prev && curr !== prev) {
30758                         return false;
30759                     }
30760                     prev = curr;
30761                 }
30762                 return true;
30763             },
30764
30765             // returns an object with the tag that implies this is an area, if any
30766             tagSuggestingArea: function() {
30767                 if (this.tags.area === 'yes') return { area: 'yes' };
30768                 if (this.tags.area === 'no') return null;
30769
30770                 // `highway` and `railway` are typically linear features, but there
30771                 // are a few exceptions that should be treated as areas, even in the
30772                 // absence of a proper `area=yes` or `areaKeys` tag.. see #4194
30773                 var lineKeys = {
30774                     highway: {
30775                         rest_area: true,
30776                         services: true
30777                     },
30778                     railway: {
30779                         roundhouse: true,
30780                         station: true,
30781                         traverser: true,
30782                         turntable: true,
30783                         wash: true
30784                     }
30785                 };
30786                 var returnTags = {};
30787                 for (var key in this.tags) {
30788                     if (key in osmAreaKeys && !(this.tags[key] in osmAreaKeys[key])) {
30789                         returnTags[key] = this.tags[key];
30790                         return returnTags;
30791                     }
30792                     if (key in lineKeys && this.tags[key] in lineKeys[key]) {
30793                         returnTags[key] = this.tags[key];
30794                         return returnTags;
30795                     }
30796                 }
30797                 return null;
30798             },
30799
30800             isArea: function() {
30801                 if (this.tags.area === 'yes')
30802                     return true;
30803                 if (!this.isClosed() || this.tags.area === 'no')
30804                     return false;
30805                 return this.tagSuggestingArea() !== null;
30806             },
30807
30808
30809             isDegenerate: function() {
30810                 return (new Set(this.nodes).size < (this.isArea() ? 3 : 2));
30811             },
30812
30813
30814             areAdjacent: function(n1, n2) {
30815                 for (var i = 0; i < this.nodes.length; i++) {
30816                     if (this.nodes[i] === n1) {
30817                         if (this.nodes[i - 1] === n2) return true;
30818                         if (this.nodes[i + 1] === n2) return true;
30819                     }
30820                 }
30821                 return false;
30822             },
30823
30824
30825             geometry: function(graph) {
30826                 return graph.transient(this, 'geometry', function() {
30827                     return this.isArea() ? 'area' : 'line';
30828                 });
30829             },
30830
30831
30832             // If this way is not closed, append the beginning node to the end of the nodelist to close it.
30833             close: function() {
30834                 if (this.isClosed() || !this.nodes.length) return this;
30835
30836                 var nodes = this.nodes.slice();
30837                 nodes = nodes.filter(noRepeatNodes);
30838                 nodes.push(nodes[0]);
30839                 return this.update({ nodes: nodes });
30840             },
30841
30842
30843             // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
30844             unclose: function() {
30845                 if (!this.isClosed()) return this;
30846
30847                 var nodes = this.nodes.slice();
30848                 var connector = this.first();
30849                 var i = nodes.length - 1;
30850
30851                 // remove trailing connectors..
30852                 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30853                     nodes.splice(i, 1);
30854                     i = nodes.length - 1;
30855                 }
30856
30857                 nodes = nodes.filter(noRepeatNodes);
30858                 return this.update({ nodes: nodes });
30859             },
30860
30861
30862             // Adds a node (id) in front of the node which is currently at position index.
30863             // If index is undefined, the node will be added to the end of the way for linear ways,
30864             //   or just before the final connecting node for circular ways.
30865             // Consecutive duplicates are eliminated including existing ones.
30866             // Circularity is always preserved when adding a node.
30867             addNode: function(id, index) {
30868                 var nodes = this.nodes.slice();
30869                 var isClosed = this.isClosed();
30870                 var max = isClosed ? nodes.length - 1 : nodes.length;
30871
30872                 if (index === undefined) {
30873                     index = max;
30874                 }
30875
30876                 if (index < 0 || index > max) {
30877                     throw new RangeError('index ' + index + ' out of range 0..' + max);
30878                 }
30879
30880                 // If this is a closed way, remove all connector nodes except the first one
30881                 // (there may be duplicates) and adjust index if necessary..
30882                 if (isClosed) {
30883                     var connector = this.first();
30884
30885                     // leading connectors..
30886                     var i = 1;
30887                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
30888                         nodes.splice(i, 1);
30889                         if (index > i) index--;
30890                     }
30891
30892                     // trailing connectors..
30893                     i = nodes.length - 1;
30894                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30895                         nodes.splice(i, 1);
30896                         if (index > i) index--;
30897                         i = nodes.length - 1;
30898                     }
30899                 }
30900
30901                 nodes.splice(index, 0, id);
30902                 nodes = nodes.filter(noRepeatNodes);
30903
30904                 // If the way was closed before, append a connector node to keep it closed..
30905                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30906                     nodes.push(nodes[0]);
30907                 }
30908
30909                 return this.update({ nodes: nodes });
30910             },
30911
30912
30913             // Replaces the node which is currently at position index with the given node (id).
30914             // Consecutive duplicates are eliminated including existing ones.
30915             // Circularity is preserved when updating a node.
30916             updateNode: function(id, index) {
30917                 var nodes = this.nodes.slice();
30918                 var isClosed = this.isClosed();
30919                 var max = nodes.length - 1;
30920
30921                 if (index === undefined || index < 0 || index > max) {
30922                     throw new RangeError('index ' + index + ' out of range 0..' + max);
30923                 }
30924
30925                 // If this is a closed way, remove all connector nodes except the first one
30926                 // (there may be duplicates) and adjust index if necessary..
30927                 if (isClosed) {
30928                     var connector = this.first();
30929
30930                     // leading connectors..
30931                     var i = 1;
30932                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
30933                         nodes.splice(i, 1);
30934                         if (index > i) index--;
30935                     }
30936
30937                     // trailing connectors..
30938                     i = nodes.length - 1;
30939                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30940                         nodes.splice(i, 1);
30941                         if (index === i) index = 0;  // update leading connector instead
30942                         i = nodes.length - 1;
30943                     }
30944                 }
30945
30946                 nodes.splice(index, 1, id);
30947                 nodes = nodes.filter(noRepeatNodes);
30948
30949                 // If the way was closed before, append a connector node to keep it closed..
30950                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30951                     nodes.push(nodes[0]);
30952                 }
30953
30954                 return this.update({nodes: nodes});
30955             },
30956
30957
30958             // Replaces each occurrence of node id needle with replacement.
30959             // Consecutive duplicates are eliminated including existing ones.
30960             // Circularity is preserved.
30961             replaceNode: function(needleID, replacementID) {
30962                 var nodes = this.nodes.slice();
30963                 var isClosed = this.isClosed();
30964
30965                 for (var i = 0; i < nodes.length; i++) {
30966                     if (nodes[i] === needleID) {
30967                         nodes[i] = replacementID;
30968                     }
30969                 }
30970
30971                 nodes = nodes.filter(noRepeatNodes);
30972
30973                 // If the way was closed before, append a connector node to keep it closed..
30974                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30975                     nodes.push(nodes[0]);
30976                 }
30977
30978                 return this.update({nodes: nodes});
30979             },
30980
30981
30982             // Removes each occurrence of node id.
30983             // Consecutive duplicates are eliminated including existing ones.
30984             // Circularity is preserved.
30985             removeNode: function(id) {
30986                 var nodes = this.nodes.slice();
30987                 var isClosed = this.isClosed();
30988
30989                 nodes = nodes
30990                     .filter(function(node) { return node !== id; })
30991                     .filter(noRepeatNodes);
30992
30993                 // If the way was closed before, append a connector node to keep it closed..
30994                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30995                     nodes.push(nodes[0]);
30996                 }
30997
30998                 return this.update({nodes: nodes});
30999             },
31000
31001
31002             asJXON: function(changeset_id) {
31003                 var r = {
31004                     way: {
31005                         '@id': this.osmId(),
31006                         '@version': this.version || 0,
31007                         nd: this.nodes.map(function(id) {
31008                             return { keyAttributes: { ref: osmEntity.id.toOSM(id) } };
31009                         }, this),
31010                         tag: Object.keys(this.tags).map(function(k) {
31011                             return { keyAttributes: { k: k, v: this.tags[k] } };
31012                         }, this)
31013                     }
31014                 };
31015                 if (changeset_id) {
31016                     r.way['@changeset'] = changeset_id;
31017                 }
31018                 return r;
31019             },
31020
31021
31022             asGeoJSON: function(resolver) {
31023                 return resolver.transient(this, 'GeoJSON', function() {
31024                     var coordinates = resolver.childNodes(this)
31025                         .map(function(n) { return n.loc; });
31026
31027                     if (this.isArea() && this.isClosed()) {
31028                         return {
31029                             type: 'Polygon',
31030                             coordinates: [coordinates]
31031                         };
31032                     } else {
31033                         return {
31034                             type: 'LineString',
31035                             coordinates: coordinates
31036                         };
31037                     }
31038                 });
31039             },
31040
31041
31042             area: function(resolver) {
31043                 return resolver.transient(this, 'area', function() {
31044                     var nodes = resolver.childNodes(this);
31045
31046                     var json = {
31047                         type: 'Polygon',
31048                         coordinates: [ nodes.map(function(n) { return n.loc; }) ]
31049                     };
31050
31051                     if (!this.isClosed() && nodes.length) {
31052                         json.coordinates[0].push(nodes[0].loc);
31053                     }
31054
31055                     var area = d3_geoArea(json);
31056
31057                     // Heuristic for detecting counterclockwise winding order. Assumes
31058                     // that OpenStreetMap polygons are not hemisphere-spanning.
31059                     if (area > 2 * Math.PI) {
31060                         json.coordinates[0] = json.coordinates[0].reverse();
31061                         area = d3_geoArea(json);
31062                     }
31063
31064                     return isNaN(area) ? 0 : area;
31065                 });
31066             }
31067         });
31068
31069
31070         // Filter function to eliminate consecutive duplicates.
31071         function noRepeatNodes(node, i, arr) {
31072             return i === 0 || node !== arr[i - 1];
31073         }
31074
31075         // "Old" multipolyons, previously known as "simple" multipolygons, are as follows:
31076         //
31077         // 1. Relation tagged with `type=multipolygon` and no interesting tags.
31078         // 2. One and only one member with the `outer` role. Must be a way with interesting tags.
31079         // 3. No members without a role.
31080         //
31081         // Old multipolygons are no longer recommended but are still rendered as areas by iD.
31082
31083         function osmOldMultipolygonOuterMemberOfRelation(entity, graph) {
31084             if (entity.type !== 'relation' ||
31085                 !entity.isMultipolygon()
31086                 || Object.keys(entity.tags).filter(osmIsInterestingTag).length > 1) {
31087                 return false;
31088             }
31089
31090             var outerMember;
31091             for (var memberIndex in entity.members) {
31092                 var member = entity.members[memberIndex];
31093                 if (!member.role || member.role === 'outer') {
31094                     if (outerMember) return false;
31095                     if (member.type !== 'way') return false;
31096                     if (!graph.hasEntity(member.id)) return false;
31097
31098                     outerMember = graph.entity(member.id);
31099
31100                     if (Object.keys(outerMember.tags).filter(osmIsInterestingTag).length === 0) {
31101                         return false;
31102                     }
31103                 }
31104             }
31105
31106             return outerMember;
31107         }
31108
31109         // For fixing up rendering of multipolygons with tags on the outer member.
31110         // https://github.com/openstreetmap/iD/issues/613
31111         function osmIsOldMultipolygonOuterMember(entity, graph) {
31112             if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0)
31113                 return false;
31114
31115             var parents = graph.parentRelations(entity);
31116             if (parents.length !== 1)
31117                 return false;
31118
31119             var parent = parents[0];
31120             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
31121                 return false;
31122
31123             var members = parent.members, member;
31124             for (var i = 0; i < members.length; i++) {
31125                 member = members[i];
31126                 if (member.id === entity.id && member.role && member.role !== 'outer')
31127                     return false; // Not outer member
31128                 if (member.id !== entity.id && (!member.role || member.role === 'outer'))
31129                     return false; // Not a simple multipolygon
31130             }
31131
31132             return parent;
31133         }
31134
31135
31136         function osmOldMultipolygonOuterMember(entity, graph) {
31137             if (entity.type !== 'way')
31138                 return false;
31139
31140             var parents = graph.parentRelations(entity);
31141             if (parents.length !== 1)
31142                 return false;
31143
31144             var parent = parents[0];
31145             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
31146                 return false;
31147
31148             var members = parent.members, member, outerMember;
31149             for (var i = 0; i < members.length; i++) {
31150                 member = members[i];
31151                 if (!member.role || member.role === 'outer') {
31152                     if (outerMember)
31153                         return false; // Not a simple multipolygon
31154                     outerMember = member;
31155                 }
31156             }
31157
31158             if (!outerMember)
31159                 return false;
31160
31161             var outerEntity = graph.hasEntity(outerMember.id);
31162             if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length)
31163                 return false;
31164
31165             return outerEntity;
31166         }
31167
31168
31169         // Join `toJoin` array into sequences of connecting ways.
31170
31171         // Segments which share identical start/end nodes will, as much as possible,
31172         // be connected with each other.
31173         //
31174         // The return value is a nested array. Each constituent array contains elements
31175         // of `toJoin` which have been determined to connect.
31176         //
31177         // Each consitituent array also has a `nodes` property whose value is an
31178         // ordered array of member nodes, with appropriate order reversal and
31179         // start/end coordinate de-duplication.
31180         //
31181         // Members of `toJoin` must have, at minimum, `type` and `id` properties.
31182         // Thus either an array of `osmWay`s or a relation member array may be used.
31183         //
31184         // If an member is an `osmWay`, its tags and childnodes may be reversed via
31185         // `actionReverse` in the output.
31186         //
31187         // The returned sequences array also has an `actions` array property, containing
31188         // any reversal actions that should be applied to the graph, should the calling
31189         // code attempt to actually join the given ways.
31190         //
31191         // Incomplete members (those for which `graph.hasEntity(element.id)` returns
31192         // false) and non-way members are ignored.
31193         //
31194         function osmJoinWays(toJoin, graph) {
31195             function resolve(member) {
31196                 return graph.childNodes(graph.entity(member.id));
31197             }
31198
31199             function reverse(item) {
31200                 var action = actionReverse(item.id, { reverseOneway: true });
31201                 sequences.actions.push(action);
31202                 return (item instanceof osmWay) ? action(graph).entity(item.id) : item;
31203             }
31204
31205             // make a copy containing only the items to join
31206             toJoin = toJoin.filter(function(member) {
31207                 return member.type === 'way' && graph.hasEntity(member.id);
31208             });
31209
31210             // Are the things we are joining relation members or `osmWays`?
31211             // If `osmWays`, skip the "prefer a forward path" code below (see #4872)
31212             var i;
31213             var joinAsMembers = true;
31214             for (i = 0; i < toJoin.length; i++) {
31215                 if (toJoin[i] instanceof osmWay) {
31216                     joinAsMembers = false;
31217                     break;
31218                 }
31219             }
31220
31221             var sequences = [];
31222             sequences.actions = [];
31223
31224             while (toJoin.length) {
31225                 // start a new sequence
31226                 var item = toJoin.shift();
31227                 var currWays = [item];
31228                 var currNodes = resolve(item).slice();
31229                 var doneSequence = false;
31230
31231                 // add to it
31232                 while (toJoin.length && !doneSequence) {
31233                     var start = currNodes[0];
31234                     var end = currNodes[currNodes.length - 1];
31235                     var fn = null;
31236                     var nodes = null;
31237
31238                     // Find the next way/member to join.
31239                     for (i = 0; i < toJoin.length; i++) {
31240                         item = toJoin[i];
31241                         nodes = resolve(item);
31242
31243                         // (for member ordering only, not way ordering - see #4872)
31244                         // Strongly prefer to generate a forward path that preserves the order
31245                         // of the members array. For multipolygons and most relations, member
31246                         // order does not matter - but for routes, it does. (see #4589)
31247                         // If we started this sequence backwards (i.e. next member way attaches to
31248                         // the start node and not the end node), reverse the initial way before continuing.
31249                         if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end &&
31250                             (nodes[nodes.length - 1] === start || nodes[0] === start)
31251                         ) {
31252                             currWays[0] = reverse(currWays[0]);
31253                             currNodes.reverse();
31254                             start = currNodes[0];
31255                             end = currNodes[currNodes.length - 1];
31256                         }
31257
31258                         if (nodes[0] === end) {
31259                             fn = currNodes.push;               // join to end
31260                             nodes = nodes.slice(1);
31261                             break;
31262                         } else if (nodes[nodes.length - 1] === end) {
31263                             fn = currNodes.push;               // join to end
31264                             nodes = nodes.slice(0, -1).reverse();
31265                             item = reverse(item);
31266                             break;
31267                         } else if (nodes[nodes.length - 1] === start) {
31268                             fn = currNodes.unshift;            // join to beginning
31269                             nodes = nodes.slice(0, -1);
31270                             break;
31271                         } else if (nodes[0] === start) {
31272                             fn = currNodes.unshift;            // join to beginning
31273                             nodes = nodes.slice(1).reverse();
31274                             item = reverse(item);
31275                             break;
31276                         } else {
31277                             fn = nodes = null;
31278                         }
31279                     }
31280
31281                     if (!nodes) {     // couldn't find a joinable way/member
31282                         doneSequence = true;
31283                         break;
31284                     }
31285
31286                     fn.apply(currWays, [item]);
31287                     fn.apply(currNodes, nodes);
31288
31289                     toJoin.splice(i, 1);
31290                 }
31291
31292                 currWays.nodes = currNodes;
31293                 sequences.push(currWays);
31294             }
31295
31296             return sequences;
31297         }
31298
31299         function actionAddMember(relationId, member, memberIndex, insertPair) {
31300
31301             return function action(graph) {
31302                 var relation = graph.entity(relationId);
31303
31304                 // There are some special rules for Public Transport v2 routes.
31305                 var isPTv2 = /stop|platform/.test(member.role);
31306
31307                 if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) {
31308                     // Try to perform sensible inserts based on how the ways join together
31309                     graph = addWayMember(relation, graph);
31310                 } else {
31311                     // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
31312                     // Stops and Platforms for PTv2 should be ordered first.
31313                     // hack: We do not currently have the ability to place them in the exactly correct order.
31314                     if (isPTv2 && isNaN(memberIndex)) {
31315                         memberIndex = 0;
31316                     }
31317
31318                     graph = graph.replace(relation.addMember(member, memberIndex));
31319                 }
31320
31321                 return graph;
31322             };
31323
31324
31325             // Add a way member into the relation "wherever it makes sense".
31326             // In this situation we were not supplied a memberIndex.
31327             function addWayMember(relation, graph) {
31328                 var groups, tempWay, item, i, j, k;
31329
31330                 // remove PTv2 stops and platforms before doing anything.
31331                 var PTv2members = [];
31332                 var members = [];
31333                 for (i = 0; i < relation.members.length; i++) {
31334                     var m = relation.members[i];
31335                     if (/stop|platform/.test(m.role)) {
31336                         PTv2members.push(m);
31337                     } else {
31338                         members.push(m);
31339                     }
31340                 }
31341                 relation = relation.update({ members: members });
31342
31343
31344                 if (insertPair) {
31345                     // We're adding a member that must stay paired with an existing member.
31346                     // (This feature is used by `actionSplit`)
31347                     //
31348                     // This is tricky because the members may exist multiple times in the
31349                     // member list, and with different A-B/B-A ordering and different roles.
31350                     // (e.g. a bus route that loops out and back - #4589).
31351                     //
31352                     // Replace the existing member with a temporary way,
31353                     // so that `osmJoinWays` can treat the pair like a single way.
31354                     tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes });
31355                     graph = graph.replace(tempWay);
31356                     var tempMember = { id: tempWay.id, type: 'way', role: member.role };
31357                     var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true);
31358                     groups = utilArrayGroupBy(tempRelation.members, 'type');
31359                     groups.way = groups.way || [];
31360
31361                 } else {
31362                     // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it.
31363                     groups = utilArrayGroupBy(relation.members, 'type');
31364                     groups.way = groups.way || [];
31365                     groups.way.push(member);
31366                 }
31367
31368                 members = withIndex(groups.way);
31369                 var joined = osmJoinWays(members, graph);
31370
31371                 // `joined` might not contain all of the way members,
31372                 // But will contain only the completed (downloaded) members
31373                 for (i = 0; i < joined.length; i++) {
31374                     var segment = joined[i];
31375                     var nodes = segment.nodes.slice();
31376                     var startIndex = segment[0].index;
31377
31378                     // j = array index in `members` where this segment starts
31379                     for (j = 0; j < members.length; j++) {
31380                         if (members[j].index === startIndex) {
31381                             break;
31382                         }
31383                     }
31384
31385                     // k = each member in segment
31386                     for (k = 0; k < segment.length; k++) {
31387                         item = segment[k];
31388                         var way = graph.entity(item.id);
31389
31390                         // If this is a paired item, generate members in correct order and role
31391                         if (tempWay && item.id === tempWay.id) {
31392                             if (nodes[0].id === insertPair.nodes[0]) {
31393                                 item.pair = [
31394                                     { id: insertPair.originalID, type: 'way', role: item.role },
31395                                     { id: insertPair.insertedID, type: 'way', role: item.role }
31396                                 ];
31397                             } else {
31398                                 item.pair = [
31399                                     { id: insertPair.insertedID, type: 'way', role: item.role },
31400                                     { id: insertPair.originalID, type: 'way', role: item.role }
31401                                 ];
31402                             }
31403                         }
31404
31405                         // reorder `members` if necessary
31406                         if (k > 0) {
31407                             if (j+k >= members.length || item.index !== members[j+k].index) {
31408                                 moveMember(members, item.index, j+k);
31409                             }
31410                         }
31411
31412                         nodes.splice(0, way.nodes.length - 1);
31413                     }
31414                 }
31415
31416                 if (tempWay) {
31417                     graph = graph.remove(tempWay);
31418                 }
31419
31420                 // Final pass: skip dead items, split pairs, remove index properties
31421                 var wayMembers = [];
31422                 for (i = 0; i < members.length; i++) {
31423                     item = members[i];
31424                     if (item.index === -1) continue;
31425
31426                     if (item.pair) {
31427                         wayMembers.push(item.pair[0]);
31428                         wayMembers.push(item.pair[1]);
31429                     } else {
31430                         wayMembers.push(utilObjectOmit(item, ['index']));
31431                     }
31432                 }
31433
31434                 // Put stops and platforms first, then nodes, ways, relations
31435                 // This is recommended for Public Transport v2 routes:
31436                 // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
31437                 var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) );
31438
31439                 return graph.replace(relation.update({ members: newMembers }));
31440
31441
31442                 // `moveMember()` changes the `members` array in place by splicing
31443                 // the item with `.index = findIndex` to where it belongs,
31444                 // and marking the old position as "dead" with `.index = -1`
31445                 //
31446                 // j=5, k=0                jk
31447                 // segment                 5 4 7 6
31448                 // members       0 1 2 3 4 5 6 7 8 9        keep 5 in j+k
31449                 //
31450                 // j=5, k=1                j k
31451                 // segment                 5 4 7 6
31452                 // members       0 1 2 3 4 5 6 7 8 9        move 4 to j+k
31453                 // members       0 1 2 3 x 5 4 6 7 8 9      moved
31454                 //
31455                 // j=5, k=2                j   k
31456                 // segment                 5 4 7 6
31457                 // members       0 1 2 3 x 5 4 6 7 8 9      move 7 to j+k
31458                 // members       0 1 2 3 x 5 4 7 6 x 8 9    moved
31459                 //
31460                 // j=5, k=3                j     k
31461                 // segment                 5 4 7 6
31462                 // members       0 1 2 3 x 5 4 7 6 x 8 9    keep 6 in j+k
31463                 //
31464                 function moveMember(arr, findIndex, toIndex) {
31465                     for (var i = 0; i < arr.length; i++) {
31466                         if (arr[i].index === findIndex) {
31467                             break;
31468                         }
31469                     }
31470
31471                     var item = Object.assign({}, arr[i]);   // shallow copy
31472                     arr[i].index = -1;   // mark as dead
31473                     item.index = toIndex;
31474                     arr.splice(toIndex, 0, item);
31475                 }
31476
31477
31478                 // This is the same as `Relation.indexedMembers`,
31479                 // Except we don't want to index all the members, only the ways
31480                 function withIndex(arr) {
31481                     var result = new Array(arr.length);
31482                     for (var i = 0; i < arr.length; i++) {
31483                         result[i] = Object.assign({}, arr[i]);   // shallow copy
31484                         result[i].index = i;
31485                     }
31486                     return result;
31487                 }
31488             }
31489
31490         }
31491
31492         function actionAddMidpoint(midpoint, node) {
31493             return function(graph) {
31494                 graph = graph.replace(node.move(midpoint.loc));
31495
31496                 var parents = utilArrayIntersection(
31497                     graph.parentWays(graph.entity(midpoint.edge[0])),
31498                     graph.parentWays(graph.entity(midpoint.edge[1]))
31499                 );
31500
31501                 parents.forEach(function(way) {
31502                     for (var i = 0; i < way.nodes.length - 1; i++) {
31503                         if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
31504                             graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
31505
31506                             // Add only one midpoint on doubled-back segments,
31507                             // turning them into self-intersections.
31508                             return;
31509                         }
31510                     }
31511                 });
31512
31513                 return graph;
31514             };
31515         }
31516
31517         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
31518         function actionAddVertex(wayId, nodeId, index) {
31519             return function(graph) {
31520                 return graph.replace(graph.entity(wayId).addNode(nodeId, index));
31521             };
31522         }
31523
31524         function actionChangeMember(relationId, member, memberIndex) {
31525             return function(graph) {
31526                 return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
31527             };
31528         }
31529
31530         function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
31531             return function action(graph) {
31532                 var entity = graph.entity(entityID);
31533                 var geometry = entity.geometry(graph);
31534                 var tags = entity.tags;
31535
31536                 if (oldPreset) tags = oldPreset.unsetTags(tags, geometry);
31537                 if (newPreset) tags = newPreset.setTags(tags, geometry, skipFieldDefaults);
31538
31539                 return graph.replace(entity.update({tags: tags}));
31540             };
31541         }
31542
31543         function actionChangeTags(entityId, tags) {
31544             return function(graph) {
31545                 var entity = graph.entity(entityId);
31546                 return graph.replace(entity.update({tags: tags}));
31547             };
31548         }
31549
31550         function osmNode() {
31551             if (!(this instanceof osmNode)) {
31552                 return (new osmNode()).initialize(arguments);
31553             } else if (arguments.length) {
31554                 this.initialize(arguments);
31555             }
31556         }
31557
31558         osmEntity.node = osmNode;
31559
31560         osmNode.prototype = Object.create(osmEntity.prototype);
31561
31562         Object.assign(osmNode.prototype, {
31563             type: 'node',
31564             loc: [9999, 9999],
31565
31566             extent: function() {
31567                 return new geoExtent(this.loc);
31568             },
31569
31570
31571             geometry: function(graph) {
31572                 return graph.transient(this, 'geometry', function() {
31573                     return graph.isPoi(this) ? 'point' : 'vertex';
31574                 });
31575             },
31576
31577
31578             move: function(loc) {
31579                 return this.update({loc: loc});
31580             },
31581
31582
31583             isDegenerate: function() {
31584                 return !(
31585                     Array.isArray(this.loc) && this.loc.length === 2 &&
31586                     this.loc[0] >= -180 && this.loc[0] <= 180 &&
31587                     this.loc[1] >= -90 && this.loc[1] <= 90
31588                 );
31589             },
31590
31591
31592             // Inspect tags and geometry to determine which direction(s) this node/vertex points
31593             directions: function(resolver, projection) {
31594                 var val;
31595                 var i;
31596
31597                 // which tag to use?
31598                 if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') {
31599                     // all-way stop tag on a highway intersection
31600                     val = 'all';
31601                 } else {
31602                     // generic direction tag
31603                     val = (this.tags.direction || '').toLowerCase();
31604
31605                     // better suffix-style direction tag
31606                     var re = /:direction$/i;
31607                     var keys = Object.keys(this.tags);
31608                     for (i = 0; i < keys.length; i++) {
31609                         if (re.test(keys[i])) {
31610                             val = this.tags[keys[i]].toLowerCase();
31611                             break;
31612                         }
31613                     }
31614                 }
31615
31616                 if (val === '') return [];
31617
31618                 var cardinal = {
31619                     north: 0,               n: 0,
31620                     northnortheast: 22,     nne: 22,
31621                     northeast: 45,          ne: 45,
31622                     eastnortheast: 67,      ene: 67,
31623                     east: 90,               e: 90,
31624                     eastsoutheast: 112,     ese: 112,
31625                     southeast: 135,         se: 135,
31626                     southsoutheast: 157,    sse: 157,
31627                     south: 180,             s: 180,
31628                     southsouthwest: 202,    ssw: 202,
31629                     southwest: 225,         sw: 225,
31630                     westsouthwest: 247,     wsw: 247,
31631                     west: 270,              w: 270,
31632                     westnorthwest: 292,     wnw: 292,
31633                     northwest: 315,         nw: 315,
31634                     northnorthwest: 337,    nnw: 337
31635                 };
31636
31637
31638                 var values = val.split(';');
31639                 var results = [];
31640
31641                 values.forEach(function(v) {
31642                     // swap cardinal for numeric directions
31643                     if (cardinal[v] !== undefined) {
31644                         v = cardinal[v];
31645                     }
31646
31647                     // numeric direction - just add to results
31648                     if (v !== '' && !isNaN(+v)) {
31649                         results.push(+v);
31650                         return;
31651                     }
31652
31653                     // string direction - inspect parent ways
31654                     var lookBackward =
31655                         (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all');
31656                     var lookForward =
31657                         (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all');
31658
31659                     if (!lookForward && !lookBackward) return;
31660
31661                     var nodeIds = {};
31662                     resolver.parentWays(this).forEach(function(parent) {
31663                         var nodes = parent.nodes;
31664                         for (i = 0; i < nodes.length; i++) {
31665                             if (nodes[i] === this.id) {  // match current entity
31666                                 if (lookForward && i > 0) {
31667                                     nodeIds[nodes[i - 1]] = true;  // look back to prev node
31668                                 }
31669                                 if (lookBackward && i < nodes.length - 1) {
31670                                     nodeIds[nodes[i + 1]] = true;  // look ahead to next node
31671                                 }
31672                             }
31673                         }
31674                     }, this);
31675
31676                     Object.keys(nodeIds).forEach(function(nodeId) {
31677                         // +90 because geoAngle returns angle from X axis, not Y (north)
31678                         results.push(
31679                             (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90
31680                         );
31681                     }, this);
31682
31683                 }, this);
31684
31685                 return utilArrayUniq(results);
31686             },
31687
31688
31689             isEndpoint: function(resolver) {
31690                 return resolver.transient(this, 'isEndpoint', function() {
31691                     var id = this.id;
31692                     return resolver.parentWays(this).filter(function(parent) {
31693                         return !parent.isClosed() && !!parent.affix(id);
31694                     }).length > 0;
31695                 });
31696             },
31697
31698
31699             isConnected: function(resolver) {
31700                 return resolver.transient(this, 'isConnected', function() {
31701                     var parents = resolver.parentWays(this);
31702
31703                     function isLine(entity) {
31704                         return entity.geometry(resolver) === 'line' &&
31705                             entity.hasInterestingTags();
31706                     }
31707
31708                     // vertex is connected to multiple parent lines
31709                     if (parents.length > 1 && parents.some(isLine)) {
31710                         return true;
31711
31712                     } else if (parents.length === 1) {
31713                         var way = parents[0];
31714                         var nodes = way.nodes.slice();
31715                         if (way.isClosed()) { nodes.pop(); }  // ignore connecting node if closed
31716
31717                         // return true if vertex appears multiple times (way is self intersecting)
31718                         return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
31719                     }
31720
31721                     return false;
31722                 });
31723             },
31724
31725
31726             isIntersection: function(resolver) {
31727                 return resolver.transient(this, 'isIntersection', function() {
31728                     return resolver.parentWays(this).filter(function(parent) {
31729                         return (parent.tags.highway ||
31730                             parent.tags.waterway ||
31731                             parent.tags.railway ||
31732                             parent.tags.aeroway) &&
31733                             parent.geometry(resolver) === 'line';
31734                     }).length > 1;
31735                 });
31736             },
31737
31738
31739             isHighwayIntersection: function(resolver) {
31740                 return resolver.transient(this, 'isHighwayIntersection', function() {
31741                     return resolver.parentWays(this).filter(function(parent) {
31742                         return parent.tags.highway && parent.geometry(resolver) === 'line';
31743                     }).length > 1;
31744                 });
31745             },
31746
31747
31748             isOnAddressLine: function(resolver) {
31749                 return resolver.transient(this, 'isOnAddressLine', function() {
31750                     return resolver.parentWays(this).filter(function(parent) {
31751                         return parent.tags.hasOwnProperty('addr:interpolation') &&
31752                             parent.geometry(resolver) === 'line';
31753                     }).length > 0;
31754                 });
31755             },
31756
31757
31758             asJXON: function(changeset_id) {
31759                 var r = {
31760                     node: {
31761                         '@id': this.osmId(),
31762                         '@lon': this.loc[0],
31763                         '@lat': this.loc[1],
31764                         '@version': (this.version || 0),
31765                         tag: Object.keys(this.tags).map(function(k) {
31766                             return { keyAttributes: { k: k, v: this.tags[k] } };
31767                         }, this)
31768                     }
31769                 };
31770                 if (changeset_id) r.node['@changeset'] = changeset_id;
31771                 return r;
31772             },
31773
31774
31775             asGeoJSON: function() {
31776                 return {
31777                     type: 'Point',
31778                     coordinates: this.loc
31779                 };
31780             }
31781         });
31782
31783         function actionCircularize(wayId, projection, maxAngle) {
31784             maxAngle = (maxAngle || 20) * Math.PI / 180;
31785
31786
31787             var action = function(graph, t) {
31788                 if (t === null || !isFinite(t)) t = 1;
31789                 t = Math.min(Math.max(+t, 0), 1);
31790
31791                 var way = graph.entity(wayId);
31792                 var origNodes = {};
31793
31794                 graph.childNodes(way).forEach(function(node) {
31795                     if (!origNodes[node.id]) origNodes[node.id] = node;
31796                 });
31797
31798                 if (!way.isConvex(graph)) {
31799                     graph = action.makeConvex(graph);
31800                 }
31801
31802                 var nodes = utilArrayUniq(graph.childNodes(way));
31803                 var keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; });
31804                 var points = nodes.map(function(n) { return projection(n.loc); });
31805                 var keyPoints = keyNodes.map(function(n) { return projection(n.loc); });
31806                 var centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points);
31807                 var radius = d3_median(points, function(p) { return geoVecLength(centroid, p); });
31808                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
31809                 var ids, i, j, k;
31810
31811                 // we need atleast two key nodes for the algorithm to work
31812                 if (!keyNodes.length) {
31813                     keyNodes = [nodes[0]];
31814                     keyPoints = [points[0]];
31815                 }
31816
31817                 if (keyNodes.length === 1) {
31818                     var index = nodes.indexOf(keyNodes[0]);
31819                     var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
31820
31821                     keyNodes.push(nodes[oppositeIndex]);
31822                     keyPoints.push(points[oppositeIndex]);
31823                 }
31824
31825                 // key points and nodes are those connected to the ways,
31826                 // they are projected onto the circle, inbetween nodes are moved
31827                 // to constant intervals between key nodes, extra inbetween nodes are
31828                 // added if necessary.
31829                 for (i = 0; i < keyPoints.length; i++) {
31830                     var nextKeyNodeIndex = (i + 1) % keyNodes.length;
31831                     var startNode = keyNodes[i];
31832                     var endNode = keyNodes[nextKeyNodeIndex];
31833                     var startNodeIndex = nodes.indexOf(startNode);
31834                     var endNodeIndex = nodes.indexOf(endNode);
31835                     var numberNewPoints = -1;
31836                     var indexRange = endNodeIndex - startNodeIndex;
31837                     var nearNodes = {};
31838                     var inBetweenNodes = [];
31839                     var startAngle, endAngle, totalAngle, eachAngle;
31840                     var angle, loc, node, origNode;
31841
31842                     if (indexRange < 0) {
31843                         indexRange += nodes.length;
31844                     }
31845
31846                     // position this key node
31847                     var distance = geoVecLength(centroid, keyPoints[i]) || 1e-4;
31848                     keyPoints[i] = [
31849                         centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
31850                         centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius
31851                     ];
31852                     loc = projection.invert(keyPoints[i]);
31853                     node = keyNodes[i];
31854                     origNode = origNodes[node.id];
31855                     node = node.move(geoVecInterp(origNode.loc, loc, t));
31856                     graph = graph.replace(node);
31857
31858                     // figure out the between delta angle we want to match to
31859                     startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
31860                     endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
31861                     totalAngle = endAngle - startAngle;
31862
31863                     // detects looping around -pi/pi
31864                     if (totalAngle * sign > 0) {
31865                         totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
31866                     }
31867
31868                     do {
31869                         numberNewPoints++;
31870                         eachAngle = totalAngle / (indexRange + numberNewPoints);
31871                     } while (Math.abs(eachAngle) > maxAngle);
31872
31873
31874                     // move existing nodes
31875                     for (j = 1; j < indexRange; j++) {
31876                         angle = startAngle + j * eachAngle;
31877                         loc = projection.invert([
31878                             centroid[0] + Math.cos(angle) * radius,
31879                             centroid[1] + Math.sin(angle) * radius
31880                         ]);
31881
31882                         node = nodes[(j + startNodeIndex) % nodes.length];
31883                         origNode = origNodes[node.id];
31884                         nearNodes[node.id] = angle;
31885
31886                         node = node.move(geoVecInterp(origNode.loc, loc, t));
31887                         graph = graph.replace(node);
31888                     }
31889
31890                     // add new inbetween nodes if necessary
31891                     for (j = 0; j < numberNewPoints; j++) {
31892                         angle = startAngle + (indexRange + j) * eachAngle;
31893                         loc = projection.invert([
31894                             centroid[0] + Math.cos(angle) * radius,
31895                             centroid[1] + Math.sin(angle) * radius
31896                         ]);
31897
31898                         // choose a nearnode to use as the original
31899                         var min = Infinity;
31900                         for (var nodeId in nearNodes) {
31901                             var nearAngle = nearNodes[nodeId];
31902                             var dist = Math.abs(nearAngle - angle);
31903                             if (dist < min) {
31904                                 dist = min;
31905                                 origNode = origNodes[nodeId];
31906                             }
31907                         }
31908
31909                         node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) });
31910                         graph = graph.replace(node);
31911
31912                         nodes.splice(endNodeIndex + j, 0, node);
31913                         inBetweenNodes.push(node.id);
31914                     }
31915
31916                     // Check for other ways that share these keyNodes..
31917                     // If keyNodes are adjacent in both ways,
31918                     // we can add inBetween nodes to that shared way too..
31919                     if (indexRange === 1 && inBetweenNodes.length) {
31920                         var startIndex1 = way.nodes.lastIndexOf(startNode.id);
31921                         var endIndex1 = way.nodes.lastIndexOf(endNode.id);
31922                         var wayDirection1 = (endIndex1 - startIndex1);
31923                         if (wayDirection1 < -1) { wayDirection1 = 1; }
31924
31925                         var parentWays = graph.parentWays(keyNodes[i]);
31926                         for (j = 0; j < parentWays.length; j++) {
31927                             var sharedWay = parentWays[j];
31928                             if (sharedWay === way) continue;
31929
31930                             if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
31931                                 var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
31932                                 var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
31933                                 var wayDirection2 = (endIndex2 - startIndex2);
31934                                 var insertAt = endIndex2;
31935                                 if (wayDirection2 < -1) { wayDirection2 = 1; }
31936
31937                                 if (wayDirection1 !== wayDirection2) {
31938                                     inBetweenNodes.reverse();
31939                                     insertAt = startIndex2;
31940                                 }
31941                                 for (k = 0; k < inBetweenNodes.length; k++) {
31942                                     sharedWay = sharedWay.addNode(inBetweenNodes[k], insertAt + k);
31943                                 }
31944                                 graph = graph.replace(sharedWay);
31945                             }
31946                         }
31947                     }
31948
31949                 }
31950
31951                 // update the way to have all the new nodes
31952                 ids = nodes.map(function(n) { return n.id; });
31953                 ids.push(ids[0]);
31954
31955                 way = way.update({nodes: ids});
31956                 graph = graph.replace(way);
31957
31958                 return graph;
31959             };
31960
31961
31962             action.makeConvex = function(graph) {
31963                 var way = graph.entity(wayId);
31964                 var nodes = utilArrayUniq(graph.childNodes(way));
31965                 var points = nodes.map(function(n) { return projection(n.loc); });
31966                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
31967                 var hull = d3_polygonHull(points);
31968                 var i, j;
31969
31970                 // D3 convex hulls go counterclockwise..
31971                 if (sign === -1) {
31972                     nodes.reverse();
31973                     points.reverse();
31974                 }
31975
31976                 for (i = 0; i < hull.length - 1; i++) {
31977                     var startIndex = points.indexOf(hull[i]);
31978                     var endIndex = points.indexOf(hull[i+1]);
31979                     var indexRange = (endIndex - startIndex);
31980
31981                     if (indexRange < 0) {
31982                         indexRange += nodes.length;
31983                     }
31984
31985                     // move interior nodes to the surface of the convex hull..
31986                     for (j = 1; j < indexRange; j++) {
31987                         var point = geoVecInterp(hull[i], hull[i+1], j / indexRange);
31988                         var node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point));
31989                         graph = graph.replace(node);
31990                     }
31991                 }
31992                 return graph;
31993             };
31994
31995
31996             action.disabled = function(graph) {
31997                 if (!graph.entity(wayId).isClosed()) {
31998                     return 'not_closed';
31999                 }
32000             };
32001
32002
32003             action.transitionable = true;
32004
32005
32006             return action;
32007         }
32008
32009         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
32010         function actionDeleteWay(wayID) {
32011
32012             function canDeleteNode(node, graph) {
32013                 // don't delete nodes still attached to ways or relations
32014                 if (graph.parentWays(node).length ||
32015                     graph.parentRelations(node).length) return false;
32016
32017                 var geometries = osmNodeGeometriesForTags(node.tags);
32018                 // don't delete if this node can be a standalone point
32019                 if (geometries.point) return false;
32020                 // delete if this node only be a vertex
32021                 if (geometries.vertex) return true;
32022
32023                 // iD doesn't know if this should be a point or vertex,
32024                 // so only delete if there are no interesting tags
32025                 return !node.hasInterestingTags();
32026             }
32027
32028
32029             var action = function(graph) {
32030                 var way = graph.entity(wayID);
32031
32032                 graph.parentRelations(way).forEach(function(parent) {
32033                     parent = parent.removeMembersWithID(wayID);
32034                     graph = graph.replace(parent);
32035
32036                     if (parent.isDegenerate()) {
32037                         graph = actionDeleteRelation(parent.id)(graph);
32038                     }
32039                 });
32040
32041                 (new Set(way.nodes)).forEach(function(nodeID) {
32042                     graph = graph.replace(way.removeNode(nodeID));
32043
32044                     var node = graph.entity(nodeID);
32045                     if (canDeleteNode(node, graph)) {
32046                         graph = graph.remove(node);
32047                     }
32048                 });
32049
32050                 return graph.remove(way);
32051             };
32052
32053
32054             return action;
32055         }
32056
32057         function actionDeleteMultiple(ids) {
32058             var actions = {
32059                 way: actionDeleteWay,
32060                 node: actionDeleteNode,
32061                 relation: actionDeleteRelation
32062             };
32063
32064
32065             var action = function(graph) {
32066                 ids.forEach(function(id) {
32067                     if (graph.hasEntity(id)) { // It may have been deleted aready.
32068                         graph = actions[graph.entity(id).type](id)(graph);
32069                     }
32070                 });
32071
32072                 return graph;
32073             };
32074
32075
32076             return action;
32077         }
32078
32079         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
32080         function actionDeleteRelation(relationID, allowUntaggedMembers) {
32081
32082             function canDeleteEntity(entity, graph) {
32083                 return !graph.parentWays(entity).length &&
32084                     !graph.parentRelations(entity).length &&
32085                     (!entity.hasInterestingTags() && !allowUntaggedMembers);
32086             }
32087
32088
32089             var action = function(graph) {
32090                 var relation = graph.entity(relationID);
32091
32092                 graph.parentRelations(relation)
32093                     .forEach(function(parent) {
32094                         parent = parent.removeMembersWithID(relationID);
32095                         graph = graph.replace(parent);
32096
32097                         if (parent.isDegenerate()) {
32098                             graph = actionDeleteRelation(parent.id)(graph);
32099                         }
32100                     });
32101
32102                 var memberIDs = utilArrayUniq(relation.members.map(function(m) { return m.id; }));
32103                 memberIDs.forEach(function(memberID) {
32104                     graph = graph.replace(relation.removeMembersWithID(memberID));
32105
32106                     var entity = graph.entity(memberID);
32107                     if (canDeleteEntity(entity, graph)) {
32108                         graph = actionDeleteMultiple([memberID])(graph);
32109                     }
32110                 });
32111
32112                 return graph.remove(relation);
32113             };
32114
32115
32116             return action;
32117         }
32118
32119         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
32120         function actionDeleteNode(nodeId) {
32121             var action = function(graph) {
32122                 var node = graph.entity(nodeId);
32123
32124                 graph.parentWays(node)
32125                     .forEach(function(parent) {
32126                         parent = parent.removeNode(nodeId);
32127                         graph = graph.replace(parent);
32128
32129                         if (parent.isDegenerate()) {
32130                             graph = actionDeleteWay(parent.id)(graph);
32131                         }
32132                     });
32133
32134                 graph.parentRelations(node)
32135                     .forEach(function(parent) {
32136                         parent = parent.removeMembersWithID(nodeId);
32137                         graph = graph.replace(parent);
32138
32139                         if (parent.isDegenerate()) {
32140                             graph = actionDeleteRelation(parent.id)(graph);
32141                         }
32142                     });
32143
32144                 return graph.remove(node);
32145             };
32146
32147
32148             return action;
32149         }
32150
32151         // Connect the ways at the given nodes.
32152         //
32153         // First choose a node to be the survivor, with preference given
32154         // to an existing (not new) node.
32155         //
32156         // Tags and relation memberships of of non-surviving nodes are merged
32157         // to the survivor.
32158         //
32159         // This is the inverse of `iD.actionDisconnect`.
32160         //
32161         // Reference:
32162         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as
32163         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java
32164         //
32165         function actionConnect(nodeIDs) {
32166             var action = function(graph) {
32167                 var survivor;
32168                 var node;
32169                 var parents;
32170                 var i, j;
32171
32172                 // Choose a survivor node, prefer an existing (not new) node - #4974
32173                 for (i = 0; i < nodeIDs.length; i++) {
32174                     survivor = graph.entity(nodeIDs[i]);
32175                     if (survivor.version) break;  // found one
32176                 }
32177
32178                 // Replace all non-surviving nodes with the survivor and merge tags.
32179                 for (i = 0; i < nodeIDs.length; i++) {
32180                     node = graph.entity(nodeIDs[i]);
32181                     if (node.id === survivor.id) continue;
32182
32183                     parents = graph.parentWays(node);
32184                     for (j = 0; j < parents.length; j++) {
32185                         if (!parents[j].areAdjacent(node.id, survivor.id)) {
32186                             graph = graph.replace(parents[j].replaceNode(node.id, survivor.id));
32187                         }
32188                     }
32189
32190                     parents = graph.parentRelations(node);
32191                     for (j = 0; j < parents.length; j++) {
32192                         graph = graph.replace(parents[j].replaceMember(node, survivor));
32193                     }
32194
32195                     survivor = survivor.mergeTags(node.tags);
32196                     graph = actionDeleteNode(node.id)(graph);
32197                 }
32198
32199                 graph = graph.replace(survivor);
32200
32201                 return graph;
32202             };
32203
32204
32205             action.disabled = function(graph) {
32206                 var seen = {};
32207                 var restrictionIDs = [];
32208                 var survivor;
32209                 var node, way;
32210                 var relations, relation, role;
32211                 var i, j, k;
32212
32213                 // Choose a survivor node, prefer an existing (not new) node - #4974
32214                 for (i = 0; i < nodeIDs.length; i++) {
32215                     survivor = graph.entity(nodeIDs[i]);
32216                     if (survivor.version) break;  // found one
32217                 }
32218
32219                 // 1. disable if the nodes being connected have conflicting relation roles
32220                 for (i = 0; i < nodeIDs.length; i++) {
32221                     node = graph.entity(nodeIDs[i]);
32222                     relations = graph.parentRelations(node);
32223
32224                     for (j = 0; j < relations.length; j++) {
32225                         relation = relations[j];
32226                         role = relation.memberById(node.id).role || '';
32227
32228                         // if this node is a via node in a restriction, remember for later
32229                         if (relation.hasFromViaTo()) {
32230                             restrictionIDs.push(relation.id);
32231                         }
32232
32233                         if (seen[relation.id] !== undefined && seen[relation.id] !== role) {
32234                             return 'relation';
32235                         } else {
32236                             seen[relation.id] = role;
32237                         }
32238                     }
32239                 }
32240
32241                 // gather restrictions for parent ways
32242                 for (i = 0; i < nodeIDs.length; i++) {
32243                     node = graph.entity(nodeIDs[i]);
32244
32245                     var parents = graph.parentWays(node);
32246                     for (j = 0; j < parents.length; j++) {
32247                         var parent = parents[j];
32248                         relations = graph.parentRelations(parent);
32249
32250                         for (k = 0; k < relations.length; k++) {
32251                             relation = relations[k];
32252                             if (relation.hasFromViaTo()) {
32253                                 restrictionIDs.push(relation.id);
32254                             }
32255                         }
32256                     }
32257                 }
32258
32259
32260                 // test restrictions
32261                 restrictionIDs = utilArrayUniq(restrictionIDs);
32262                 for (i = 0; i < restrictionIDs.length; i++) {
32263                     relation = graph.entity(restrictionIDs[i]);
32264                     if (!relation.isComplete(graph)) continue;
32265
32266                     var memberWays = relation.members
32267                         .filter(function(m) { return m.type === 'way'; })
32268                         .map(function(m) { return graph.entity(m.id); });
32269
32270                     memberWays = utilArrayUniq(memberWays);
32271                     var f = relation.memberByRole('from');
32272                     var t = relation.memberByRole('to');
32273                     var isUturn = (f.id === t.id);
32274
32275                     // 2a. disable if connection would damage a restriction
32276                     // (a key node is a node at the junction of ways)
32277                     var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
32278                     for (j = 0; j < relation.members.length; j++) {
32279                         collectNodes(relation.members[j], nodes);
32280                     }
32281
32282                     nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
32283                     nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
32284
32285                     var filter = keyNodeFilter(nodes.keyfrom, nodes.keyto);
32286                     nodes.from = nodes.from.filter(filter);
32287                     nodes.via = nodes.via.filter(filter);
32288                     nodes.to = nodes.to.filter(filter);
32289
32290                     var connectFrom = false;
32291                     var connectVia = false;
32292                     var connectTo = false;
32293                     var connectKeyFrom = false;
32294                     var connectKeyTo = false;
32295
32296                     for (j = 0; j < nodeIDs.length; j++) {
32297                         var n = nodeIDs[j];
32298                         if (nodes.from.indexOf(n) !== -1)    { connectFrom = true; }
32299                         if (nodes.via.indexOf(n) !== -1)     { connectVia = true; }
32300                         if (nodes.to.indexOf(n) !== -1)      { connectTo = true; }
32301                         if (nodes.keyfrom.indexOf(n) !== -1) { connectKeyFrom = true; }
32302                         if (nodes.keyto.indexOf(n) !== -1)   { connectKeyTo = true; }
32303                     }
32304                     if (connectFrom && connectTo && !isUturn) { return 'restriction'; }
32305                     if (connectFrom && connectVia) { return 'restriction'; }
32306                     if (connectTo   && connectVia) { return 'restriction'; }
32307
32308                     // connecting to a key node -
32309                     // if both nodes are on a member way (i.e. part of the turn restriction),
32310                     // the connecting node must be adjacent to the key node.
32311                     if (connectKeyFrom || connectKeyTo) {
32312                         if (nodeIDs.length !== 2) { return 'restriction'; }
32313
32314                         var n0 = null;
32315                         var n1 = null;
32316                         for (j = 0; j < memberWays.length; j++) {
32317                             way = memberWays[j];
32318                             if (way.contains(nodeIDs[0])) { n0 = nodeIDs[0]; }
32319                             if (way.contains(nodeIDs[1])) { n1 = nodeIDs[1]; }
32320                         }
32321
32322                         if (n0 && n1) {    // both nodes are part of the restriction
32323                             var ok = false;
32324                             for (j = 0; j < memberWays.length; j++) {
32325                                 way = memberWays[j];
32326                                 if (way.areAdjacent(n0, n1)) {
32327                                     ok = true;
32328                                     break;
32329                                 }
32330                             }
32331                             if (!ok) {
32332                                 return 'restriction';
32333                             }
32334                         }
32335                     }
32336
32337                     // 2b. disable if nodes being connected will destroy a member way in a restriction
32338                     // (to test, make a copy and try actually connecting the nodes)
32339                     for (j = 0; j < memberWays.length; j++) {
32340                         way = memberWays[j].update({});   // make copy
32341                         for (k = 0; k < nodeIDs.length; k++) {
32342                             if (nodeIDs[k] === survivor.id) continue;
32343
32344                             if (way.areAdjacent(nodeIDs[k], survivor.id)) {
32345                                 way = way.removeNode(nodeIDs[k]);
32346                             } else {
32347                                 way = way.replaceNode(nodeIDs[k], survivor.id);
32348                             }
32349                         }
32350                         if (way.isDegenerate()) {
32351                             return 'restriction';
32352                         }
32353                     }
32354                 }
32355
32356                 return false;
32357
32358
32359                 // if a key node appears multiple times (indexOf !== lastIndexOf) it's a FROM-VIA or TO-VIA junction
32360                 function hasDuplicates(n, i, arr) {
32361                     return arr.indexOf(n) !== arr.lastIndexOf(n);
32362                 }
32363
32364                 function keyNodeFilter(froms, tos) {
32365                     return function(n) {
32366                         return froms.indexOf(n) === -1 && tos.indexOf(n) === -1;
32367                     };
32368                 }
32369
32370                 function collectNodes(member, collection) {
32371                     var entity = graph.hasEntity(member.id);
32372                     if (!entity) return;
32373
32374                     var role = member.role || '';
32375                     if (!collection[role]) {
32376                         collection[role] = [];
32377                     }
32378
32379                     if (member.type === 'node') {
32380                         collection[role].push(member.id);
32381                         if (role === 'via') {
32382                             collection.keyfrom.push(member.id);
32383                             collection.keyto.push(member.id);
32384                         }
32385
32386                     } else if (member.type === 'way') {
32387                         collection[role].push.apply(collection[role], entity.nodes);
32388                         if (role === 'from' || role === 'via') {
32389                             collection.keyfrom.push(entity.first());
32390                             collection.keyfrom.push(entity.last());
32391                         }
32392                         if (role === 'to' || role === 'via') {
32393                             collection.keyto.push(entity.first());
32394                             collection.keyto.push(entity.last());
32395                         }
32396                     }
32397                 }
32398             };
32399
32400
32401             return action;
32402         }
32403
32404         function actionCopyEntities(ids, fromGraph) {
32405             var _copies = {};
32406
32407
32408             var action = function(graph) {
32409                 ids.forEach(function(id) {
32410                     fromGraph.entity(id).copy(fromGraph, _copies);
32411                 });
32412
32413                 for (var id in _copies) {
32414                     graph = graph.replace(_copies[id]);
32415                 }
32416
32417                 return graph;
32418             };
32419
32420
32421             action.copies = function() {
32422                 return _copies;
32423             };
32424
32425
32426             return action;
32427         }
32428
32429         function actionDeleteMember(relationId, memberIndex) {
32430             return function(graph) {
32431                 var relation = graph.entity(relationId)
32432                     .removeMember(memberIndex);
32433
32434                 graph = graph.replace(relation);
32435
32436                 if (relation.isDegenerate())
32437                     graph = actionDeleteRelation(relation.id)(graph);
32438
32439                 return graph;
32440             };
32441         }
32442
32443         function actionDiscardTags(difference) {
32444
32445             return function(graph) {
32446                 function discardTags(entity) {
32447                     var tags = {};
32448                     var keys = Object.keys(entity.tags);
32449                     var discarded = false;
32450
32451                     for (var i = 0; i < keys.length; i++) {
32452                         var k = keys[i];
32453                         if (dataDiscarded[k] || !entity.tags[k]) {
32454                             discarded = true;
32455                         } else {
32456                             tags[k] = entity.tags[k];
32457                         }
32458                     }
32459
32460                     if (discarded) {
32461                         graph = graph.replace(entity.update({ tags: tags }));
32462                     }
32463                 }
32464
32465                 difference.modified().forEach(discardTags);
32466                 difference.created().forEach(discardTags);
32467
32468                 return graph;
32469             };
32470         }
32471
32472         // Disconect the ways at the given node.
32473         //
32474         // Optionally, disconnect only the given ways.
32475         //
32476         // For testing convenience, accepts an ID to assign to the (first) new node.
32477         // Normally, this will be undefined and the way will automatically
32478         // be assigned a new ID.
32479         //
32480         // This is the inverse of `iD.actionConnect`.
32481         //
32482         // Reference:
32483         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as
32484         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java
32485         //
32486         function actionDisconnect(nodeId, newNodeId) {
32487             var wayIds;
32488
32489
32490             var action = function(graph) {
32491                 var node = graph.entity(nodeId);
32492                 var connections = action.connections(graph);
32493
32494                 connections.forEach(function(connection) {
32495                     var way = graph.entity(connection.wayID);
32496                     var newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags});
32497
32498                     graph = graph.replace(newNode);
32499                     if (connection.index === 0 && way.isArea()) {
32500                         // replace shared node with shared node..
32501                         graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
32502                     } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
32503                         // replace closing node with new new node..
32504                         graph = graph.replace(way.unclose().addNode(newNode.id));
32505                     } else {
32506                         // replace shared node with multiple new nodes..
32507                         graph = graph.replace(way.updateNode(newNode.id, connection.index));
32508                     }
32509                 });
32510
32511                 return graph;
32512             };
32513
32514
32515             action.connections = function(graph) {
32516                 var candidates = [];
32517                 var keeping = false;
32518                 var parentWays = graph.parentWays(graph.entity(nodeId));
32519
32520                 parentWays.forEach(function(way) {
32521                     if (wayIds && wayIds.indexOf(way.id) === -1) {
32522                         keeping = true;
32523                         return;
32524                     }
32525                     if (way.isArea() && (way.nodes[0] === nodeId)) {
32526                         candidates.push({ wayID: way.id, index: 0 });
32527                     } else {
32528                         way.nodes.forEach(function(waynode, index) {
32529                             if (waynode === nodeId) {
32530                                 if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && index === way.nodes.length-1) {
32531                                     return;
32532                                 }
32533                                 candidates.push({ wayID: way.id, index: index });
32534                             }
32535                         });
32536                     }
32537                 });
32538
32539                 return keeping ? candidates : candidates.slice(1);
32540             };
32541
32542
32543             action.disabled = function(graph) {
32544                 var connections = action.connections(graph);
32545                 if (connections.length === 0)
32546                     return 'not_connected';
32547
32548                 var parentWays = graph.parentWays(graph.entity(nodeId));
32549                 var seenRelationIds = {};
32550                 var sharedRelation;
32551
32552                 parentWays.forEach(function(way) {
32553                     var relations = graph.parentRelations(way);
32554                     relations.forEach(function(relation) {
32555                         if (relation.id in seenRelationIds) {
32556                             if (wayIds) {
32557                                 if (wayIds.indexOf(way.id) !== -1 ||
32558                                     wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
32559                                     sharedRelation = relation;
32560                                 }
32561                             } else {
32562                                 sharedRelation = relation;
32563                             }
32564                         } else {
32565                             seenRelationIds[relation.id] = way.id;
32566                         }
32567                     });
32568                 });
32569
32570                 if (sharedRelation)
32571                     return 'relation';
32572             };
32573
32574
32575             action.limitWays = function(val) {
32576                 if (!arguments.length) return wayIds;
32577                 wayIds = val;
32578                 return action;
32579             };
32580
32581
32582             return action;
32583         }
32584
32585         function actionExtract(entityID, projection) {
32586
32587             var extractedNodeID;
32588
32589             var action = function(graph) {
32590                 var entity = graph.entity(entityID);
32591
32592                 if (entity.type === 'node') {
32593                     return extractFromNode(entity, graph);
32594                 }
32595
32596                 return extractFromArea(entity, graph);
32597             };
32598
32599             function extractFromNode(node, graph) {
32600
32601                 extractedNodeID = node.id;
32602
32603                 // Create a new node to replace the one we will detach
32604                 var replacement = osmNode({ loc: node.loc });
32605                 graph = graph.replace(replacement);
32606
32607                 // Process each way in turn, updating the graph as we go
32608                 graph = graph.parentWays(node)
32609                     .reduce(function(accGraph, parentWay) {
32610                         return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
32611                     }, graph);
32612
32613                 // Process any relations too
32614                 return graph.parentRelations(node)
32615                     .reduce(function(accGraph, parentRel) {
32616                         return accGraph.replace(parentRel.replaceMember(node, replacement));
32617                     }, graph);
32618             }
32619
32620             function extractFromArea(entity, graph) {
32621
32622                 var keysToCopyAndRetain = ['source', 'wheelchair'];
32623                 var keysToRetain = ['type'];
32624                 var buildingKeysToRetain = ['architect', 'building', 'height', 'layer'];
32625
32626                 var centroid = d3_geoPath(projection).centroid(entity.asGeoJSON(graph, true));
32627
32628                 var isBuilding = entity.tags.building;
32629
32630                 var areaTags = Object.assign({}, entity.tags);  // shallow copy
32631                 var pointTags = {};
32632                 for (var key in areaTags) {
32633
32634                     if (keysToRetain.indexOf(key) !== -1) {
32635                         continue;
32636                     }
32637
32638                     if (isBuilding) {
32639                         // don't transfer building-related tags
32640                         if (buildingKeysToRetain.indexOf(key) !== -1 ||
32641                             key.match(/^building:.{1,}/) ||
32642                             key.match(/^roof:.{1,}/)) continue;
32643                     }
32644
32645                     // copy the tag from the area to the point
32646                     pointTags[key] = areaTags[key];
32647
32648                     // leave addresses and some other tags so they're on both features
32649                     if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
32650                         continue;
32651                     }
32652
32653                     // remove the tag from the area
32654                     delete areaTags[key];
32655                 }
32656
32657                 if (!isBuilding) {
32658                     // ensure that the area keeps the area geometry
32659                     areaTags.area = 'yes';
32660                 }
32661
32662                 var replacement = osmNode({ loc: centroid, tags: pointTags });
32663                 graph = graph.replace(replacement);
32664
32665                 extractedNodeID = replacement.id;
32666
32667                 return graph.replace(entity.update({tags: areaTags}));
32668             }
32669
32670             action.getExtractedNodeID = function() {
32671                 return extractedNodeID;
32672             };
32673
32674             action.disabled = function(graph) {
32675                 var entity = graph.entity(entityID);
32676
32677                 if (entity.type === 'node') {
32678                     var parentRels = graph.parentRelations(entity);
32679                     for (var i = 0; i < parentRels.length; i++) {
32680                         var relation = parentRels[i];
32681                         if (!relation.hasFromViaTo()) continue;
32682
32683                         for (var j = 0; j < relation.members.length; j++) {
32684                             var m = relation.members[j];
32685                             if (m.id === entityID && (m.role === 'via' || m.role === 'location_hint')) {
32686                                 return 'restriction';
32687                             }
32688                         }
32689                     }
32690                 }
32691
32692                 return false;
32693             };
32694
32695
32696             return action;
32697         }
32698
32699         // Join ways at the end node they share.
32700         //
32701         // This is the inverse of `iD.actionSplit`.
32702         //
32703         // Reference:
32704         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as
32705         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java
32706         //
32707         function actionJoin(ids) {
32708
32709             function groupEntitiesByGeometry(graph) {
32710                 var entities = ids.map(function(id) { return graph.entity(id); });
32711                 return Object.assign(
32712                     { line: [] },
32713                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
32714                 );
32715             }
32716
32717
32718             var action = function(graph) {
32719                 var ways = ids.map(graph.entity, graph);
32720                 var survivorID = ways[0].id;
32721
32722                 // if any of the ways are sided (e.g. coastline, cliff, kerb)
32723                 // sort them first so they establish the overall order - #6033
32724                 ways.sort(function(a, b) {
32725                     var aSided = a.isSided();
32726                     var bSided = b.isSided();
32727                     return (aSided && !bSided) ? -1
32728                         : (bSided && !aSided) ? 1
32729                         : 0;
32730                 });
32731
32732                 // Prefer to keep an existing way.
32733                 for (var i = 0; i < ways.length; i++) {
32734                     if (!ways[i].isNew()) {
32735                         survivorID = ways[i].id;
32736                         break;
32737                     }
32738                 }
32739
32740                 var sequences = osmJoinWays(ways, graph);
32741                 var joined = sequences[0];
32742
32743                 // We might need to reverse some of these ways before joining them.  #4688
32744                 // `joined.actions` property will contain any actions we need to apply.
32745                 graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph);
32746
32747                 var survivor = graph.entity(survivorID);
32748                 survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) });
32749                 graph = graph.replace(survivor);
32750
32751                 joined.forEach(function(way) {
32752                     if (way.id === survivorID) return;
32753
32754                     graph.parentRelations(way).forEach(function(parent) {
32755                         graph = graph.replace(parent.replaceMember(way, survivor));
32756                     });
32757
32758                     survivor = survivor.mergeTags(way.tags);
32759
32760                     graph = graph.replace(survivor);
32761                     graph = actionDeleteWay(way.id)(graph);
32762                 });
32763
32764                 return graph;
32765             };
32766
32767
32768             action.disabled = function(graph) {
32769                 var geometries = groupEntitiesByGeometry(graph);
32770                 if (ids.length < 2 || ids.length !== geometries.line.length) {
32771                     return 'not_eligible';
32772                 }
32773
32774                 var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
32775                 if (joined.length > 1) {
32776                     return 'not_adjacent';
32777                 }
32778
32779                 // Loop through all combinations of path-pairs
32780                 // to check potential intersections between all pairs
32781                 for (var i = 0; i < ids.length - 1; i++) {
32782                     for (var j = i + 1; j < ids.length; j++) {
32783                         var path1 = graph.childNodes(graph.entity(ids[i]))
32784                             .map(function(e) { return e.loc; });
32785                         var path2 = graph.childNodes(graph.entity(ids[j]))
32786                             .map(function(e) { return e.loc; });
32787                         var intersections = geoPathIntersections(path1, path2);
32788
32789                         // Check if intersections are just nodes lying on top of
32790                         // each other/the line, as opposed to crossing it
32791                         var common = utilArrayIntersection(
32792                             joined[0].nodes.map(function(n) { return n.loc.toString(); }),
32793                             intersections.map(function(n) { return n.toString(); })
32794                         );
32795                         if (common.length !== intersections.length) {
32796                             return 'paths_intersect';
32797                         }
32798                     }
32799                 }
32800
32801                 var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1);
32802                 var relation;
32803                 var tags = {};
32804                 var conflicting = false;
32805
32806                 joined[0].forEach(function(way) {
32807                     var parents = graph.parentRelations(way);
32808                     parents.forEach(function(parent) {
32809                         if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) {
32810                             relation = parent;
32811                         }
32812                     });
32813
32814                     for (var k in way.tags) {
32815                         if (!(k in tags)) {
32816                             tags[k] = way.tags[k];
32817                         } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) {
32818                             conflicting = true;
32819                         }
32820                     }
32821                 });
32822
32823                 if (relation) {
32824                     return 'restriction';
32825                 }
32826
32827                 if (conflicting) {
32828                     return 'conflicting_tags';
32829                 }
32830             };
32831
32832
32833             return action;
32834         }
32835
32836         function actionMerge(ids) {
32837
32838             function groupEntitiesByGeometry(graph) {
32839                 var entities = ids.map(function(id) { return graph.entity(id); });
32840                 return Object.assign(
32841                     { point: [], area: [], line: [], relation: [] },
32842                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
32843                 );
32844             }
32845
32846
32847             var action = function(graph) {
32848                 var geometries = groupEntitiesByGeometry(graph);
32849                 var target = geometries.area[0] || geometries.line[0];
32850                 var points = geometries.point;
32851
32852                 points.forEach(function(point) {
32853                     target = target.mergeTags(point.tags);
32854                     graph = graph.replace(target);
32855
32856                     graph.parentRelations(point).forEach(function(parent) {
32857                         graph = graph.replace(parent.replaceMember(point, target));
32858                     });
32859
32860                     var nodes = utilArrayUniq(graph.childNodes(target));
32861                     var removeNode = point;
32862
32863                     for (var i = 0; i < nodes.length; i++) {
32864                         var node = nodes[i];
32865                         if (graph.parentWays(node).length > 1 ||
32866                             graph.parentRelations(node).length ||
32867                             node.hasInterestingTags()) {
32868                             continue;
32869                         }
32870
32871                         // Found an uninteresting child node on the target way.
32872                         // Move orig point into its place to preserve point's history. #3683
32873                         graph = graph.replace(point.update({ tags: {}, loc: node.loc }));
32874                         target = target.replaceNode(node.id, point.id);
32875                         graph = graph.replace(target);
32876                         removeNode = node;
32877                         break;
32878                     }
32879
32880                     graph = graph.remove(removeNode);
32881                 });
32882
32883                 return graph;
32884             };
32885
32886
32887             action.disabled = function(graph) {
32888                 var geometries = groupEntitiesByGeometry(graph);
32889                 if (geometries.point.length === 0 ||
32890                     (geometries.area.length + geometries.line.length) !== 1 ||
32891                     geometries.relation.length !== 0) {
32892                     return 'not_eligible';
32893                 }
32894             };
32895
32896
32897             return action;
32898         }
32899
32900         // `actionMergeNodes` is just a combination of:
32901         //
32902         // 1. move all the nodes to a common location
32903         // 2. `actionConnect` them
32904
32905         function actionMergeNodes(nodeIDs, loc) {
32906
32907             // If there is a single "interesting" node, use that as the location.
32908             // Otherwise return the average location of all the nodes.
32909             function chooseLoc(graph) {
32910                 if (!nodeIDs.length) return null;
32911                 var sum = [0,0];
32912                 var interestingCount = 0;
32913                 var interestingLoc;
32914
32915                 for (var i = 0; i < nodeIDs.length; i++) {
32916                     var node = graph.entity(nodeIDs[i]);
32917                     if (node.hasInterestingTags()) {
32918                         interestingLoc = (++interestingCount === 1) ? node.loc : null;
32919                     }
32920                     sum = geoVecAdd(sum, node.loc);
32921                 }
32922
32923                 return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
32924             }
32925
32926
32927             var action = function(graph) {
32928                 if (nodeIDs.length < 2) return graph;
32929                 var toLoc = loc;
32930                 if (!toLoc) {
32931                     toLoc = chooseLoc(graph);
32932                 }
32933
32934                 for (var i = 0; i < nodeIDs.length; i++) {
32935                     var node = graph.entity(nodeIDs[i]);
32936                     if (node.loc !== toLoc) {
32937                         graph = graph.replace(node.move(toLoc));
32938                     }
32939                 }
32940
32941                 return actionConnect(nodeIDs)(graph);
32942             };
32943
32944
32945             action.disabled = function(graph) {
32946                 if (nodeIDs.length < 2) return 'not_eligible';
32947
32948                 for (var i = 0; i < nodeIDs.length; i++) {
32949                     var entity = graph.entity(nodeIDs[i]);
32950                     if (entity.type !== 'node') return 'not_eligible';
32951                 }
32952
32953                 return actionConnect(nodeIDs).disabled(graph);
32954             };
32955
32956             return action;
32957         }
32958
32959         function osmChangeset() {
32960             if (!(this instanceof osmChangeset)) {
32961                 return (new osmChangeset()).initialize(arguments);
32962             } else if (arguments.length) {
32963                 this.initialize(arguments);
32964             }
32965         }
32966
32967
32968         osmEntity.changeset = osmChangeset;
32969
32970         osmChangeset.prototype = Object.create(osmEntity.prototype);
32971
32972         Object.assign(osmChangeset.prototype, {
32973
32974             type: 'changeset',
32975
32976
32977             extent: function() {
32978                 return new geoExtent();
32979             },
32980
32981
32982             geometry: function() {
32983                 return 'changeset';
32984             },
32985
32986
32987             asJXON: function() {
32988                 return {
32989                     osm: {
32990                         changeset: {
32991                             tag: Object.keys(this.tags).map(function(k) {
32992                                 return { '@k': k, '@v': this.tags[k] };
32993                             }, this),
32994                             '@version': 0.6,
32995                             '@generator': 'iD'
32996                         }
32997                     }
32998                 };
32999             },
33000
33001
33002             // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
33003             // XML. Returns a string.
33004             osmChangeJXON: function(changes) {
33005                 var changeset_id = this.id;
33006
33007                 function nest(x, order) {
33008                     var groups = {};
33009                     for (var i = 0; i < x.length; i++) {
33010                         var tagName = Object.keys(x[i])[0];
33011                         if (!groups[tagName]) groups[tagName] = [];
33012                         groups[tagName].push(x[i][tagName]);
33013                     }
33014                     var ordered = {};
33015                     order.forEach(function(o) {
33016                         if (groups[o]) ordered[o] = groups[o];
33017                     });
33018                     return ordered;
33019                 }
33020
33021
33022                 // sort relations in a changeset by dependencies
33023                 function sort(changes) {
33024
33025                     // find a referenced relation in the current changeset
33026                     function resolve(item) {
33027                         return relations.find(function(relation) {
33028                             return item.keyAttributes.type === 'relation'
33029                                 && item.keyAttributes.ref === relation['@id'];
33030                         });
33031                     }
33032
33033                     // a new item is an item that has not been already processed
33034                     function isNew(item) {
33035                         return !sorted[ item['@id'] ] && !processing.find(function(proc) {
33036                             return proc['@id'] === item['@id'];
33037                         });
33038                     }
33039
33040                     var processing = [];
33041                     var sorted = {};
33042                     var relations = changes.relation;
33043
33044                     if (!relations) return changes;
33045
33046                     for (var i = 0; i < relations.length; i++) {
33047                         var relation = relations[i];
33048
33049                         // skip relation if already sorted
33050                         if (!sorted[relation['@id']]) {
33051                             processing.push(relation);
33052                         }
33053
33054                         while (processing.length > 0) {
33055                             var next = processing[0],
33056                             deps = next.member.map(resolve).filter(Boolean).filter(isNew);
33057                             if (deps.length === 0) {
33058                                 sorted[next['@id']] = next;
33059                                 processing.shift();
33060                             } else {
33061                                 processing = deps.concat(processing);
33062                             }
33063                         }
33064                     }
33065
33066                     changes.relation = Object.values(sorted);
33067                     return changes;
33068                 }
33069
33070                 function rep(entity) {
33071                     return entity.asJXON(changeset_id);
33072                 }
33073
33074                 return {
33075                     osmChange: {
33076                         '@version': 0.6,
33077                         '@generator': 'iD',
33078                         'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])),
33079                         'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']),
33080                         'delete': Object.assign(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true })
33081                     }
33082                 };
33083             },
33084
33085
33086             asGeoJSON: function() {
33087                 return {};
33088             }
33089
33090         });
33091
33092         function osmNote() {
33093             if (!(this instanceof osmNote)) {
33094                 return (new osmNote()).initialize(arguments);
33095             } else if (arguments.length) {
33096                 this.initialize(arguments);
33097             }
33098         }
33099
33100
33101         osmNote.id = function() {
33102             return osmNote.id.next--;
33103         };
33104
33105
33106         osmNote.id.next = -1;
33107
33108
33109         Object.assign(osmNote.prototype, {
33110
33111             type: 'note',
33112
33113             initialize: function(sources) {
33114                 for (var i = 0; i < sources.length; ++i) {
33115                     var source = sources[i];
33116                     for (var prop in source) {
33117                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
33118                             if (source[prop] === undefined) {
33119                                 delete this[prop];
33120                             } else {
33121                                 this[prop] = source[prop];
33122                             }
33123                         }
33124                     }
33125                 }
33126
33127                 if (!this.id) {
33128                     this.id = osmNote.id() + '';  // as string
33129                 }
33130
33131                 return this;
33132             },
33133
33134             extent: function() {
33135                 return new geoExtent(this.loc);
33136             },
33137
33138             update: function(attrs) {
33139                 return osmNote(this, attrs); // {v: 1 + (this.v || 0)}
33140             },
33141
33142             isNew: function() {
33143                 return this.id < 0;
33144             },
33145
33146             move: function(loc) {
33147                 return this.update({ loc: loc });
33148             }
33149
33150         });
33151
33152         function osmRelation() {
33153             if (!(this instanceof osmRelation)) {
33154                 return (new osmRelation()).initialize(arguments);
33155             } else if (arguments.length) {
33156                 this.initialize(arguments);
33157             }
33158         }
33159
33160
33161         osmEntity.relation = osmRelation;
33162
33163         osmRelation.prototype = Object.create(osmEntity.prototype);
33164
33165
33166         osmRelation.creationOrder = function(a, b) {
33167             var aId = parseInt(osmEntity.id.toOSM(a.id), 10);
33168             var bId = parseInt(osmEntity.id.toOSM(b.id), 10);
33169
33170             if (aId < 0 || bId < 0) return aId - bId;
33171             return bId - aId;
33172         };
33173
33174
33175         Object.assign(osmRelation.prototype, {
33176             type: 'relation',
33177             members: [],
33178
33179
33180             copy: function(resolver, copies) {
33181                 if (copies[this.id]) return copies[this.id];
33182
33183                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
33184
33185                 var members = this.members.map(function(member) {
33186                     return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
33187                 });
33188
33189                 copy = copy.update({members: members});
33190                 copies[this.id] = copy;
33191
33192                 return copy;
33193             },
33194
33195
33196             extent: function(resolver, memo) {
33197                 return resolver.transient(this, 'extent', function() {
33198                     if (memo && memo[this.id]) return geoExtent();
33199                     memo = memo || {};
33200                     memo[this.id] = true;
33201
33202                     var extent = geoExtent();
33203                     for (var i = 0; i < this.members.length; i++) {
33204                         var member = resolver.hasEntity(this.members[i].id);
33205                         if (member) {
33206                             extent._extend(member.extent(resolver, memo));
33207                         }
33208                     }
33209                     return extent;
33210                 });
33211             },
33212
33213
33214             geometry: function(graph) {
33215                 return graph.transient(this, 'geometry', function() {
33216                     return this.isMultipolygon() ? 'area' : 'relation';
33217                 });
33218             },
33219
33220
33221             isDegenerate: function() {
33222                 return this.members.length === 0;
33223             },
33224
33225
33226             // Return an array of members, each extended with an 'index' property whose value
33227             // is the member index.
33228             indexedMembers: function() {
33229                 var result = new Array(this.members.length);
33230                 for (var i = 0; i < this.members.length; i++) {
33231                     result[i] = Object.assign({}, this.members[i], {index: i});
33232                 }
33233                 return result;
33234             },
33235
33236
33237             // Return the first member with the given role. A copy of the member object
33238             // is returned, extended with an 'index' property whose value is the member index.
33239             memberByRole: function(role) {
33240                 for (var i = 0; i < this.members.length; i++) {
33241                     if (this.members[i].role === role) {
33242                         return Object.assign({}, this.members[i], {index: i});
33243                     }
33244                 }
33245             },
33246
33247             // Same as memberByRole, but returns all members with the given role
33248             membersByRole: function(role) {
33249                 var result = [];
33250                 for (var i = 0; i < this.members.length; i++) {
33251                     if (this.members[i].role === role) {
33252                         result.push(Object.assign({}, this.members[i], {index: i}));
33253                     }
33254                 }
33255                 return result;
33256             },
33257
33258             // Return the first member with the given id. A copy of the member object
33259             // is returned, extended with an 'index' property whose value is the member index.
33260             memberById: function(id) {
33261                 for (var i = 0; i < this.members.length; i++) {
33262                     if (this.members[i].id === id) {
33263                         return Object.assign({}, this.members[i], {index: i});
33264                     }
33265                 }
33266             },
33267
33268
33269             // Return the first member with the given id and role. A copy of the member object
33270             // is returned, extended with an 'index' property whose value is the member index.
33271             memberByIdAndRole: function(id, role) {
33272                 for (var i = 0; i < this.members.length; i++) {
33273                     if (this.members[i].id === id && this.members[i].role === role) {
33274                         return Object.assign({}, this.members[i], {index: i});
33275                     }
33276                 }
33277             },
33278
33279
33280             addMember: function(member, index) {
33281                 var members = this.members.slice();
33282                 members.splice(index === undefined ? members.length : index, 0, member);
33283                 return this.update({members: members});
33284             },
33285
33286
33287             updateMember: function(member, index) {
33288                 var members = this.members.slice();
33289                 members.splice(index, 1, Object.assign({}, members[index], member));
33290                 return this.update({members: members});
33291             },
33292
33293
33294             removeMember: function(index) {
33295                 var members = this.members.slice();
33296                 members.splice(index, 1);
33297                 return this.update({members: members});
33298             },
33299
33300
33301             removeMembersWithID: function(id) {
33302                 var members = this.members.filter(function(m) { return m.id !== id; });
33303                 return this.update({members: members});
33304             },
33305
33306             moveMember: function(fromIndex, toIndex) {
33307                 var members = this.members.slice();
33308                 members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
33309                 return this.update({members: members});
33310             },
33311
33312
33313             // Wherever a member appears with id `needle.id`, replace it with a member
33314             // with id `replacement.id`, type `replacement.type`, and the original role,
33315             // By default, adding a duplicate member (by id and role) is prevented.
33316             // Return an updated relation.
33317             replaceMember: function(needle, replacement, keepDuplicates) {
33318                 if (!this.memberById(needle.id)) return this;
33319
33320                 var members = [];
33321
33322                 for (var i = 0; i < this.members.length; i++) {
33323                     var member = this.members[i];
33324                     if (member.id !== needle.id) {
33325                         members.push(member);
33326                     } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
33327                         members.push({ id: replacement.id, type: replacement.type, role: member.role });
33328                     }
33329                 }
33330
33331                 return this.update({ members: members });
33332             },
33333
33334
33335             asJXON: function(changeset_id) {
33336                 var r = {
33337                     relation: {
33338                         '@id': this.osmId(),
33339                         '@version': this.version || 0,
33340                         member: this.members.map(function(member) {
33341                             return {
33342                                 keyAttributes: {
33343                                     type: member.type,
33344                                     role: member.role,
33345                                     ref: osmEntity.id.toOSM(member.id)
33346                                 }
33347                             };
33348                         }, this),
33349                         tag: Object.keys(this.tags).map(function(k) {
33350                             return { keyAttributes: { k: k, v: this.tags[k] } };
33351                         }, this)
33352                     }
33353                 };
33354                 if (changeset_id) {
33355                     r.relation['@changeset'] = changeset_id;
33356                 }
33357                 return r;
33358             },
33359
33360
33361             asGeoJSON: function(resolver) {
33362                 return resolver.transient(this, 'GeoJSON', function () {
33363                     if (this.isMultipolygon()) {
33364                         return {
33365                             type: 'MultiPolygon',
33366                             coordinates: this.multipolygon(resolver)
33367                         };
33368                     } else {
33369                         return {
33370                             type: 'FeatureCollection',
33371                             properties: this.tags,
33372                             features: this.members.map(function (member) {
33373                                 return Object.assign({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
33374                             })
33375                         };
33376                     }
33377                 });
33378             },
33379
33380
33381             area: function(resolver) {
33382                 return resolver.transient(this, 'area', function() {
33383                     return d3_geoArea(this.asGeoJSON(resolver));
33384                 });
33385             },
33386
33387
33388             isMultipolygon: function() {
33389                 return this.tags.type === 'multipolygon';
33390             },
33391
33392
33393             isComplete: function(resolver) {
33394                 for (var i = 0; i < this.members.length; i++) {
33395                     if (!resolver.hasEntity(this.members[i].id)) {
33396                         return false;
33397                     }
33398                 }
33399                 return true;
33400             },
33401
33402
33403             hasFromViaTo: function() {
33404                 return (
33405                     this.members.some(function(m) { return m.role === 'from'; }) &&
33406                     this.members.some(function(m) { return m.role === 'via'; }) &&
33407                     this.members.some(function(m) { return m.role === 'to'; })
33408                 );
33409             },
33410
33411
33412             isRestriction: function() {
33413                 return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
33414             },
33415
33416
33417             isValidRestriction: function() {
33418                 if (!this.isRestriction()) return false;
33419
33420                 var froms = this.members.filter(function(m) { return m.role === 'from'; });
33421                 var vias = this.members.filter(function(m) { return m.role === 'via'; });
33422                 var tos = this.members.filter(function(m) { return m.role === 'to'; });
33423
33424                 if (froms.length !== 1 && this.tags.restriction !== 'no_entry') return false;
33425                 if (froms.some(function(m) { return m.type !== 'way'; })) return false;
33426
33427                 if (tos.length !== 1 && this.tags.restriction !== 'no_exit') return false;
33428                 if (tos.some(function(m) { return m.type !== 'way'; })) return false;
33429
33430                 if (vias.length === 0) return false;
33431                 if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) return false;
33432
33433                 return true;
33434             },
33435
33436
33437             // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
33438             // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
33439             //
33440             // This corresponds to the structure needed for rendering a multipolygon path using a
33441             // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
33442             //
33443             // In the case of invalid geometries, this function will still return a result which
33444             // includes the nodes of all way members, but some Nds may be unclosed and some inner
33445             // rings not matched with the intended outer ring.
33446             //
33447             multipolygon: function(resolver) {
33448                 var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); });
33449                 var inners = this.members.filter(function(m) { return 'inner' === m.role; });
33450
33451                 outers = osmJoinWays(outers, resolver);
33452                 inners = osmJoinWays(inners, resolver);
33453
33454                 outers = outers.map(function(outer) {
33455                     return outer.nodes.map(function(node) { return node.loc; });
33456                 });
33457                 inners = inners.map(function(inner) {
33458                     return inner.nodes.map(function(node) { return node.loc; });
33459                 });
33460
33461                 var result = outers.map(function(o) {
33462                     // Heuristic for detecting counterclockwise winding order. Assumes
33463                     // that OpenStreetMap polygons are not hemisphere-spanning.
33464                     return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o];
33465                 });
33466
33467                 function findOuter(inner) {
33468                     var o, outer;
33469
33470                     for (o = 0; o < outers.length; o++) {
33471                         outer = outers[o];
33472                         if (geoPolygonContainsPolygon(outer, inner))
33473                             return o;
33474                     }
33475
33476                     for (o = 0; o < outers.length; o++) {
33477                         outer = outers[o];
33478                         if (geoPolygonIntersectsPolygon(outer, inner, false))
33479                             return o;
33480                     }
33481                 }
33482
33483                 for (var i = 0; i < inners.length; i++) {
33484                     var inner = inners[i];
33485
33486                     if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) {
33487                         inner = inner.reverse();
33488                     }
33489
33490                     var o = findOuter(inners[i]);
33491                     if (o !== undefined) {
33492                         result[o].push(inners[i]);
33493                     } else {
33494                         result.push([inners[i]]); // Invalid geometry
33495                     }
33496                 }
33497
33498                 return result;
33499             }
33500         });
33501
33502         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:{}}};
33503
33504         function qaError() {
33505             if (!(this instanceof qaError)) {
33506                 return (new qaError()).initialize(arguments);
33507             } else if (arguments.length) {
33508                 this.initialize(arguments);
33509             }
33510         }
33511
33512         // Generic handling for services without nice IDs
33513         qaError.id = function() {
33514             return qaError.id.next--;
33515         };
33516
33517         qaError.id.next = -1;
33518
33519         Object.assign(qaError.prototype, {
33520             type: 'qaError',
33521
33522             // All errors need a position
33523             loc: [0, 0],
33524
33525             // These should be passed in, used to retrieve from qa_errors.json
33526             service: '',
33527             error_type: '',
33528
33529             initialize: function(sources) {
33530                 for (var i = 0; i < sources.length; ++i) {
33531                     var source = sources[i];
33532                     for (var prop in source) {
33533                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
33534                             if (source[prop] === undefined) {
33535                                 delete this[prop];
33536                             } else {
33537                                 this[prop] = source[prop];
33538                             }
33539                         }
33540                     }
33541                 }
33542
33543                 // Extract common error information from data
33544                 if (this.service && this.error_type) {
33545                     var serviceInfo = services[this.service];
33546
33547                     if (serviceInfo) {
33548                         var errInfo = serviceInfo.errorTypes[this.error_type];
33549
33550                         if (errInfo) {
33551                             this.icon = errInfo.icon;
33552                             this.category = errInfo.category;
33553                         }
33554                     }
33555                 }
33556
33557                 // All errors must have an ID for selection
33558                 if (!this.id) {
33559                     this.id = qaError.id() + '';  // as string
33560                 }
33561
33562                 return this;
33563             },
33564
33565             update: function(attrs) {
33566                 return qaError(this, attrs); // {v: 1 + (this.v || 0)}
33567             }
33568         });
33569
33570         // Split a way at the given node.
33571         //
33572         // Optionally, split only the given ways, if multiple ways share
33573         // the given node.
33574         //
33575         // This is the inverse of `iD.actionJoin`.
33576         //
33577         // For testing convenience, accepts an ID to assign to the new way.
33578         // Normally, this will be undefined and the way will automatically
33579         // be assigned a new ID.
33580         //
33581         // Reference:
33582         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as
33583         //
33584         function actionSplit(nodeId, newWayIds) {
33585             var _wayIDs;
33586
33587             // If the way is closed, we need to search for a partner node
33588             // to split the way at.
33589             //
33590             // The following looks for a node that is both far away from
33591             // the initial node in terms of way segment length and nearby
33592             // in terms of beeline-distance. This assures that areas get
33593             // split on the most "natural" points (independent of the number
33594             // of nodes).
33595             // For example: bone-shaped areas get split across their waist
33596             // line, circles across the diameter.
33597             function splitArea(nodes, idxA, graph) {
33598                 var lengths = new Array(nodes.length);
33599                 var length;
33600                 var i;
33601                 var best = 0;
33602                 var idxB;
33603
33604                 function wrap(index) {
33605                     return utilWrap(index, nodes.length);
33606                 }
33607
33608                 function dist(nA, nB) {
33609                     var locA = graph.entity(nA).loc;
33610                     var locB = graph.entity(nB).loc;
33611                     var epsilon = 1e-6;
33612                     return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon;
33613                 }
33614
33615                 // calculate lengths
33616                 length = 0;
33617                 for (i = wrap(idxA + 1); i !== idxA; i = wrap(i + 1)) {
33618                     length += dist(nodes[i], nodes[wrap(i - 1)]);
33619                     lengths[i] = length;
33620                 }
33621
33622                 length = 0;
33623                 for (i = wrap(idxA - 1); i !== idxA; i = wrap(i - 1)) {
33624                     length += dist(nodes[i], nodes[wrap(i + 1)]);
33625                     if (length < lengths[i]) {
33626                         lengths[i] = length;
33627                     }
33628                 }
33629
33630                 // determine best opposite node to split
33631                 for (i = 0; i < nodes.length; i++) {
33632                     var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
33633                     if (cost > best) {
33634                         idxB = i;
33635                         best = cost;
33636                     }
33637                 }
33638
33639                 return idxB;
33640             }
33641
33642
33643             function split(graph, wayA, newWayId) {
33644                 var wayB = osmWay({ id: newWayId, tags: wayA.tags });   // `wayB` is the NEW way
33645                 var origNodes = wayA.nodes.slice();
33646                 var nodesA;
33647                 var nodesB;
33648                 var isArea = wayA.isArea();
33649                 var isOuter = osmIsOldMultipolygonOuterMember(wayA, graph);
33650
33651                 if (wayA.isClosed()) {
33652                     var nodes = wayA.nodes.slice(0, -1);
33653                     var idxA = nodes.indexOf(nodeId);
33654                     var idxB = splitArea(nodes, idxA, graph);
33655
33656                     if (idxB < idxA) {
33657                         nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
33658                         nodesB = nodes.slice(idxB, idxA + 1);
33659                     } else {
33660                         nodesA = nodes.slice(idxA, idxB + 1);
33661                         nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
33662                     }
33663                 } else {
33664                     var idx = wayA.nodes.indexOf(nodeId, 1);
33665                     nodesA = wayA.nodes.slice(0, idx + 1);
33666                     nodesB = wayA.nodes.slice(idx);
33667                 }
33668
33669                 wayA = wayA.update({ nodes: nodesA });
33670                 wayB = wayB.update({ nodes: nodesB });
33671
33672                 graph = graph.replace(wayA);
33673                 graph = graph.replace(wayB);
33674
33675                 graph.parentRelations(wayA).forEach(function(relation) {
33676                     var member;
33677
33678                     // Turn restrictions - make sure:
33679                     // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation
33680                     //    (whichever one is connected to the VIA node/ways)
33681                     // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way
33682                     if (relation.hasFromViaTo()) {
33683                         var f = relation.memberByRole('from');
33684                         var v = relation.membersByRole('via');
33685                         var t = relation.memberByRole('to');
33686                         var i;
33687
33688                         // 1. split a FROM/TO
33689                         if (f.id === wayA.id || t.id === wayA.id) {
33690                             var keepB = false;
33691                             if (v.length === 1 && v[0].type === 'node') {   // check via node
33692                                 keepB = wayB.contains(v[0].id);
33693                             } else {                                        // check via way(s)
33694                                 for (i = 0; i < v.length; i++) {
33695                                     if (v[i].type === 'way') {
33696                                         var wayVia = graph.hasEntity(v[i].id);
33697                                         if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
33698                                             keepB = true;
33699                                             break;
33700                                         }
33701                                     }
33702                                 }
33703                             }
33704
33705                             if (keepB) {
33706                                 relation = relation.replaceMember(wayA, wayB);
33707                                 graph = graph.replace(relation);
33708                             }
33709
33710                         // 2. split a VIA
33711                         } else {
33712                             for (i = 0; i < v.length; i++) {
33713                                 if (v[i].type === 'way' && v[i].id === wayA.id) {
33714                                     member = {
33715                                         id: wayB.id,
33716                                         type: 'way',
33717                                         role: 'via'
33718                                     };
33719                                     graph = actionAddMember(relation.id, member, v[i].index + 1)(graph);
33720                                     break;
33721                                 }
33722                             }
33723                         }
33724
33725                     // All other relations (Routes, Multipolygons, etc):
33726                     // 1. Both `wayA` and `wayB` remain in the relation
33727                     // 2. But must be inserted as a pair (see `actionAddMember` for details)
33728                     } else {
33729                         if (relation === isOuter) {
33730                             graph = graph.replace(relation.mergeTags(wayA.tags));
33731                             graph = graph.replace(wayA.update({ tags: {} }));
33732                             graph = graph.replace(wayB.update({ tags: {} }));
33733                         }
33734
33735                         member = {
33736                             id: wayB.id,
33737                             type: 'way',
33738                             role: relation.memberById(wayA.id).role
33739                         };
33740
33741                         var insertPair = {
33742                             originalID: wayA.id,
33743                             insertedID: wayB.id,
33744                             nodes: origNodes
33745                         };
33746
33747                         graph = actionAddMember(relation.id, member, undefined, insertPair)(graph);
33748                     }
33749                 });
33750
33751                 if (!isOuter && isArea) {
33752                     var multipolygon = osmRelation({
33753                         tags: Object.assign({}, wayA.tags, { type: 'multipolygon' }),
33754                         members: [
33755                             { id: wayA.id, role: 'outer', type: 'way' },
33756                             { id: wayB.id, role: 'outer', type: 'way' }
33757                         ]
33758                     });
33759
33760                     graph = graph.replace(multipolygon);
33761                     graph = graph.replace(wayA.update({ tags: {} }));
33762                     graph = graph.replace(wayB.update({ tags: {} }));
33763                 }
33764
33765                 return graph;
33766             }
33767
33768
33769             var action = function(graph) {
33770                 var candidates = action.ways(graph);
33771                 for (var i = 0; i < candidates.length; i++) {
33772                     graph = split(graph, candidates[i], newWayIds && newWayIds[i]);
33773                 }
33774                 return graph;
33775             };
33776
33777
33778             action.ways = function(graph) {
33779                 var node = graph.entity(nodeId);
33780                 var parents = graph.parentWays(node);
33781                 var hasLines = parents.some(function(parent) {
33782                     return parent.geometry(graph) === 'line';
33783                 });
33784
33785                 return parents.filter(function(parent) {
33786                     if (_wayIDs && _wayIDs.indexOf(parent.id) === -1)
33787                         return false;
33788
33789                     if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line')
33790                         return false;
33791
33792                     if (parent.isClosed()) {
33793                         return true;
33794                     }
33795
33796                     for (var i = 1; i < parent.nodes.length - 1; i++) {
33797                         if (parent.nodes[i] === nodeId) {
33798                             return true;
33799                         }
33800                     }
33801
33802                     return false;
33803                 });
33804             };
33805
33806
33807             action.disabled = function(graph) {
33808                 var candidates = action.ways(graph);
33809                 if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) {
33810                     return 'not_eligible';
33811                 }
33812             };
33813
33814
33815             action.limitWays = function(val) {
33816                 if (!arguments.length) return _wayIDs;
33817                 _wayIDs = val;
33818                 return action;
33819             };
33820
33821
33822             return action;
33823         }
33824
33825         function coreGraph(other, mutable) {
33826             if (!(this instanceof coreGraph)) return new coreGraph(other, mutable);
33827
33828             if (other instanceof coreGraph) {
33829                 var base = other.base();
33830                 this.entities = Object.assign(Object.create(base.entities), other.entities);
33831                 this._parentWays = Object.assign(Object.create(base.parentWays), other._parentWays);
33832                 this._parentRels = Object.assign(Object.create(base.parentRels), other._parentRels);
33833
33834             } else {
33835                 this.entities = Object.create({});
33836                 this._parentWays = Object.create({});
33837                 this._parentRels = Object.create({});
33838                 this.rebase(other || [], [this]);
33839             }
33840
33841             this.transients = {};
33842             this._childNodes = {};
33843             this.frozen = !mutable;
33844         }
33845
33846
33847         coreGraph.prototype = {
33848
33849             hasEntity: function(id) {
33850                 return this.entities[id];
33851             },
33852
33853
33854             entity: function(id) {
33855                 var entity = this.entities[id];
33856
33857                 //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
33858                 if (!entity) {
33859                     entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
33860                 }
33861
33862                 if (!entity) {
33863                     throw new Error('entity ' + id + ' not found');
33864                 }
33865                 return entity;
33866             },
33867
33868
33869             transient: function(entity, key, fn) {
33870                 var id = entity.id;
33871                 var transients = this.transients[id] || (this.transients[id] = {});
33872
33873                 if (transients[key] !== undefined) {
33874                     return transients[key];
33875                 }
33876
33877                 transients[key] = fn.call(entity);
33878
33879                 return transients[key];
33880             },
33881
33882
33883             parentWays: function(entity) {
33884                 var parents = this._parentWays[entity.id];
33885                 var result = [];
33886                 if (parents) {
33887                     parents.forEach(function(id) {
33888                         result.push(this.entity(id));
33889                     }, this);
33890                 }
33891                 return result;
33892             },
33893
33894
33895             isPoi: function(entity) {
33896                 var parents = this._parentWays[entity.id];
33897                 return !parents || parents.size === 0;
33898             },
33899
33900
33901             isShared: function(entity) {
33902                 var parents = this._parentWays[entity.id];
33903                 return parents && parents.size > 1;
33904             },
33905
33906
33907             parentRelations: function(entity) {
33908                 var parents = this._parentRels[entity.id];
33909                 var result = [];
33910                 if (parents) {
33911                     parents.forEach(function(id) {
33912                         result.push(this.entity(id));
33913                     }, this);
33914                 }
33915                 return result;
33916             },
33917
33918             parentMultipolygons: function(entity) {
33919                 return this.parentRelations(entity).filter(function(relation) {
33920                     return relation.isMultipolygon();
33921                 });
33922             },
33923
33924
33925             childNodes: function(entity) {
33926                 if (this._childNodes[entity.id]) return this._childNodes[entity.id];
33927                 if (!entity.nodes) return [];
33928
33929                 var nodes = [];
33930                 for (var i = 0; i < entity.nodes.length; i++) {
33931                     nodes[i] = this.entity(entity.nodes[i]);
33932                 }
33933
33934                 this._childNodes[entity.id] = nodes;
33935                 return this._childNodes[entity.id];
33936             },
33937
33938
33939             base: function() {
33940                 return {
33941                     'entities': Object.getPrototypeOf(this.entities),
33942                     'parentWays': Object.getPrototypeOf(this._parentWays),
33943                     'parentRels': Object.getPrototypeOf(this._parentRels)
33944                 };
33945             },
33946
33947
33948             // Unlike other graph methods, rebase mutates in place. This is because it
33949             // is used only during the history operation that merges newly downloaded
33950             // data into each state. To external consumers, it should appear as if the
33951             // graph always contained the newly downloaded data.
33952             rebase: function(entities, stack, force) {
33953                 var base = this.base();
33954                 var i, j, k, id;
33955
33956                 for (i = 0; i < entities.length; i++) {
33957                     var entity = entities[i];
33958
33959                     if (!entity.visible || (!force && base.entities[entity.id]))
33960                         continue;
33961
33962                     // Merging data into the base graph
33963                     base.entities[entity.id] = entity;
33964                     this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
33965
33966                     // Restore provisionally-deleted nodes that are discovered to have an extant parent
33967                     if (entity.type === 'way') {
33968                         for (j = 0; j < entity.nodes.length; j++) {
33969                             id = entity.nodes[j];
33970                             for (k = 1; k < stack.length; k++) {
33971                                 var ents = stack[k].entities;
33972                                 if (ents.hasOwnProperty(id) && ents[id] === undefined) {
33973                                     delete ents[id];
33974                                 }
33975                             }
33976                         }
33977                     }
33978                 }
33979
33980                 for (i = 0; i < stack.length; i++) {
33981                     stack[i]._updateRebased();
33982                 }
33983             },
33984
33985
33986             _updateRebased: function() {
33987                 var base = this.base();
33988
33989                 Object.keys(this._parentWays).forEach(function(child) {
33990                     if (base.parentWays[child]) {
33991                         base.parentWays[child].forEach(function(id) {
33992                             if (!this.entities.hasOwnProperty(id)) {
33993                                 this._parentWays[child].add(id);
33994                             }
33995                         }, this);
33996                     }
33997                 }, this);
33998
33999                 Object.keys(this._parentRels).forEach(function(child) {
34000                     if (base.parentRels[child]) {
34001                         base.parentRels[child].forEach(function(id) {
34002                             if (!this.entities.hasOwnProperty(id)) {
34003                                 this._parentRels[child].add(id);
34004                             }
34005                         }, this);
34006                     }
34007                 }, this);
34008
34009                 this.transients = {};
34010
34011                 // this._childNodes is not updated, under the assumption that
34012                 // ways are always downloaded with their child nodes.
34013             },
34014
34015
34016             // Updates calculated properties (parentWays, parentRels) for the specified change
34017             _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
34018                 parentWays = parentWays || this._parentWays;
34019                 parentRels = parentRels || this._parentRels;
34020
34021                 var type = entity && entity.type || oldentity && oldentity.type;
34022                 var removed, added, i;
34023
34024                 if (type === 'way') {   // Update parentWays
34025                     if (oldentity && entity) {
34026                         removed = utilArrayDifference(oldentity.nodes, entity.nodes);
34027                         added = utilArrayDifference(entity.nodes, oldentity.nodes);
34028                     } else if (oldentity) {
34029                         removed = oldentity.nodes;
34030                         added = [];
34031                     } else if (entity) {
34032                         removed = [];
34033                         added = entity.nodes;
34034                     }
34035                     for (i = 0; i < removed.length; i++) {
34036                         // make a copy of prototype property, store as own property, and update..
34037                         parentWays[removed[i]] = new Set(parentWays[removed[i]]);
34038                         parentWays[removed[i]].delete(oldentity.id);
34039                     }
34040                     for (i = 0; i < added.length; i++) {
34041                         // make a copy of prototype property, store as own property, and update..
34042                         parentWays[added[i]] = new Set(parentWays[added[i]]);
34043                         parentWays[added[i]].add(entity.id);
34044                     }
34045
34046                 } else if (type === 'relation') {   // Update parentRels
34047
34048                     // diff only on the IDs since the same entity can be a member multiple times with different roles
34049                     var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m) { return m.id; }) : [];
34050                     var entityMemberIDs = entity ? entity.members.map(function(m) { return m.id; }) : [];
34051
34052                     if (oldentity && entity) {
34053                         removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
34054                         added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
34055                     } else if (oldentity) {
34056                         removed = oldentityMemberIDs;
34057                         added = [];
34058                     } else if (entity) {
34059                         removed = [];
34060                         added = entityMemberIDs;
34061                     }
34062                     for (i = 0; i < removed.length; i++) {
34063                         // make a copy of prototype property, store as own property, and update..
34064                         parentRels[removed[i]] = new Set(parentRels[removed[i]]);
34065                         parentRels[removed[i]].delete(oldentity.id);
34066                     }
34067                     for (i = 0; i < added.length; i++) {
34068                         // make a copy of prototype property, store as own property, and update..
34069                         parentRels[added[i]] = new Set(parentRels[added[i]]);
34070                         parentRels[added[i]].add(entity.id);
34071                     }
34072                 }
34073             },
34074
34075
34076             replace: function(entity) {
34077                 if (this.entities[entity.id] === entity) return this;
34078
34079                 return this.update(function() {
34080                     this._updateCalculated(this.entities[entity.id], entity);
34081                     this.entities[entity.id] = entity;
34082                 });
34083             },
34084
34085
34086             remove: function(entity) {
34087                 return this.update(function() {
34088                     this._updateCalculated(entity, undefined);
34089                     this.entities[entity.id] = undefined;
34090                 });
34091             },
34092
34093
34094             revert: function(id) {
34095                 var baseEntity = this.base().entities[id];
34096                 var headEntity = this.entities[id];
34097                 if (headEntity === baseEntity) return this;
34098
34099                 return this.update(function() {
34100                     this._updateCalculated(headEntity, baseEntity);
34101                     delete this.entities[id];
34102                 });
34103             },
34104
34105
34106             update: function() {
34107                 var graph = this.frozen ? coreGraph(this, true) : this;
34108                 for (var i = 0; i < arguments.length; i++) {
34109                     arguments[i].call(graph, graph);
34110                 }
34111
34112                 if (this.frozen) graph.frozen = true;
34113
34114                 return graph;
34115             },
34116
34117
34118             // Obliterates any existing entities
34119             load: function(entities) {
34120                 var base = this.base();
34121                 this.entities = Object.create(base.entities);
34122
34123                 for (var i in entities) {
34124                     this.entities[i] = entities[i];
34125                     this._updateCalculated(base.entities[i], this.entities[i]);
34126                 }
34127
34128                 return this;
34129             }
34130         };
34131
34132         function osmTurn(turn) {
34133             if (!(this instanceof osmTurn)) {
34134                 return new osmTurn(turn);
34135             }
34136             Object.assign(this, turn);
34137         }
34138
34139
34140         function osmIntersection(graph, startVertexId, maxDistance) {
34141             maxDistance = maxDistance || 30;    // in meters
34142             var vgraph = coreGraph();           // virtual graph
34143             var i, j, k;
34144
34145
34146             function memberOfRestriction(entity) {
34147                 return graph.parentRelations(entity)
34148                     .some(function(r) { return r.isRestriction(); });
34149             }
34150
34151             function isRoad(way) {
34152                 if (way.isArea() || way.isDegenerate()) return false;
34153                 var roads = {
34154                     'motorway': true,
34155                     'motorway_link': true,
34156                     'trunk': true,
34157                     'trunk_link': true,
34158                     'primary': true,
34159                     'primary_link': true,
34160                     'secondary': true,
34161                     'secondary_link': true,
34162                     'tertiary': true,
34163                     'tertiary_link': true,
34164                     'residential': true,
34165                     'unclassified': true,
34166                     'living_street': true,
34167                     'service': true,
34168                     'road': true,
34169                     'track': true
34170                 };
34171                 return roads[way.tags.highway];
34172             }
34173
34174
34175             var startNode = graph.entity(startVertexId);
34176             var checkVertices = [startNode];
34177             var checkWays;
34178             var vertices = [];
34179             var vertexIds = [];
34180             var vertex;
34181             var ways = [];
34182             var wayIds = [];
34183             var way;
34184             var nodes = [];
34185             var node;
34186             var parents = [];
34187             var parent;
34188
34189             // `actions` will store whatever actions must be performed to satisfy
34190             // preconditions for adding a turn restriction to this intersection.
34191             //  - Remove any existing degenerate turn restrictions (missing from/to, etc)
34192             //  - Reverse oneways so that they are drawn in the forward direction
34193             //  - Split ways on key vertices
34194             var actions = [];
34195
34196
34197             // STEP 1:  walk the graph outwards from starting vertex to search
34198             //  for more key vertices and ways to include in the intersection..
34199
34200             while (checkVertices.length) {
34201                 vertex = checkVertices.pop();
34202
34203                 // check this vertex for parent ways that are roads
34204                 checkWays = graph.parentWays(vertex);
34205                 var hasWays = false;
34206                 for (i = 0; i < checkWays.length; i++) {
34207                     way = checkWays[i];
34208                     if (!isRoad(way) && !memberOfRestriction(way)) continue;
34209
34210                     ways.push(way);   // it's a road, or it's already in a turn restriction
34211                     hasWays = true;
34212
34213                     // check the way's children for more key vertices
34214                     nodes = utilArrayUniq(graph.childNodes(way));
34215                     for (j = 0; j < nodes.length; j++) {
34216                         node = nodes[j];
34217                         if (node === vertex) continue;                                           // same thing
34218                         if (vertices.indexOf(node) !== -1) continue;                             // seen it already
34219                         if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) continue;   // too far from start
34220
34221                         // a key vertex will have parents that are also roads
34222                         var hasParents = false;
34223                         parents = graph.parentWays(node);
34224                         for (k = 0; k < parents.length; k++) {
34225                             parent = parents[k];
34226                             if (parent === way) continue;                 // same thing
34227                             if (ways.indexOf(parent) !== -1) continue;    // seen it already
34228                             if (!isRoad(parent)) continue;                // not a road
34229                             hasParents = true;
34230                             break;
34231                         }
34232
34233                         if (hasParents) {
34234                             checkVertices.push(node);
34235                         }
34236                     }
34237                 }
34238
34239                 if (hasWays) {
34240                     vertices.push(vertex);
34241                 }
34242             }
34243
34244             vertices = utilArrayUniq(vertices);
34245             ways = utilArrayUniq(ways);
34246
34247
34248             // STEP 2:  Build a virtual graph containing only the entities in the intersection..
34249             // Everything done after this step should act on the virtual graph
34250             // Any actions that must be performed later to the main graph go in `actions` array
34251             ways.forEach(function(way) {
34252                 graph.childNodes(way).forEach(function(node) {
34253                     vgraph = vgraph.replace(node);
34254                 });
34255
34256                 vgraph = vgraph.replace(way);
34257
34258                 graph.parentRelations(way).forEach(function(relation) {
34259                     if (relation.isRestriction()) {
34260                         if (relation.isValidRestriction(graph)) {
34261                             vgraph = vgraph.replace(relation);
34262                         } else if (relation.isComplete(graph)) {
34263                             actions.push(actionDeleteRelation(relation.id));
34264                         }
34265                     }
34266                 });
34267             });
34268
34269
34270             // STEP 3:  Force all oneways to be drawn in the forward direction
34271             ways.forEach(function(w) {
34272                 var way = vgraph.entity(w.id);
34273                 if (way.tags.oneway === '-1') {
34274                     var action = actionReverse(way.id, { reverseOneway: true });
34275                     actions.push(action);
34276                     vgraph = action(vgraph);
34277                 }
34278             });
34279
34280
34281             // STEP 4:  Split ways on key vertices
34282             var origCount = osmEntity.id.next.way;
34283             vertices.forEach(function(v) {
34284                 // This is an odd way to do it, but we need to find all the ways that
34285                 // will be split here, then split them one at a time to ensure that these
34286                 // actions can be replayed on the main graph exactly in the same order.
34287                 // (It is unintuitive, but the order of ways returned from graph.parentWays()
34288                 // is arbitrary, depending on how the main graph and vgraph were built)
34289                 var splitAll = actionSplit(v.id);
34290                 if (!splitAll.disabled(vgraph)) {
34291                     splitAll.ways(vgraph).forEach(function(way) {
34292                         var splitOne = actionSplit(v.id).limitWays([way.id]);
34293                         actions.push(splitOne);
34294                         vgraph = splitOne(vgraph);
34295                     });
34296                 }
34297             });
34298
34299             // In here is where we should also split the intersection at nearby junction.
34300             //   for https://github.com/mapbox/iD-internal/issues/31
34301             // nearbyVertices.forEach(function(v) {
34302             // });
34303
34304             // Reasons why we reset the way id count here:
34305             //  1. Continuity with way ids created by the splits so that we can replay
34306             //     these actions later if the user decides to create a turn restriction
34307             //  2. Avoids churning way ids just by hovering over a vertex
34308             //     and displaying the turn restriction editor
34309             osmEntity.id.next.way = origCount;
34310
34311
34312             // STEP 5:  Update arrays to point to vgraph entities
34313             vertexIds = vertices.map(function(v) { return v.id; });
34314             vertices = [];
34315             ways = [];
34316
34317             vertexIds.forEach(function(id) {
34318                 var vertex = vgraph.entity(id);
34319                 var parents = vgraph.parentWays(vertex);
34320                 vertices.push(vertex);
34321                 ways = ways.concat(parents);
34322             });
34323
34324             vertices = utilArrayUniq(vertices);
34325             ways = utilArrayUniq(ways);
34326
34327             vertexIds = vertices.map(function(v) { return v.id; });
34328             wayIds = ways.map(function(w) { return w.id; });
34329
34330
34331             // STEP 6:  Update the ways with some metadata that will be useful for
34332             // walking the intersection graph later and rendering turn arrows.
34333
34334             function withMetadata(way, vertexIds) {
34335                 var __oneWay = way.isOneWay();
34336
34337                 // which affixes are key vertices?
34338                 var __first = (vertexIds.indexOf(way.first()) !== -1);
34339                 var __last = (vertexIds.indexOf(way.last()) !== -1);
34340
34341                 // what roles is this way eligible for?
34342                 var __via = (__first && __last);
34343                 var __from = ((__first && !__oneWay) || __last);
34344                 var __to = (__first || (__last && !__oneWay));
34345
34346                 return way.update({
34347                     __first:  __first,
34348                     __last:  __last,
34349                     __from:  __from,
34350                     __via: __via,
34351                     __to:  __to,
34352                     __oneWay:  __oneWay
34353                 });
34354             }
34355
34356             ways = [];
34357             wayIds.forEach(function(id) {
34358                 var way = withMetadata(vgraph.entity(id), vertexIds);
34359                 vgraph = vgraph.replace(way);
34360                 ways.push(way);
34361             });
34362
34363
34364             // STEP 7:  Simplify - This is an iterative process where we:
34365             //  1. Find trivial vertices with only 2 parents
34366             //  2. trim off the leaf way from those vertices and remove from vgraph
34367
34368             var keepGoing;
34369             var removeWayIds = [];
34370             var removeVertexIds = [];
34371
34372             do {
34373                 keepGoing = false;
34374                 checkVertices = vertexIds.slice();
34375
34376                 for (i = 0; i < checkVertices.length; i++) {
34377                     var vertexId = checkVertices[i];
34378                     vertex = vgraph.hasEntity(vertexId);
34379
34380                     if (!vertex) {
34381                         if (vertexIds.indexOf(vertexId) !== -1) {
34382                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
34383                         }
34384                         removeVertexIds.push(vertexId);
34385                         continue;
34386                     }
34387
34388                     parents = vgraph.parentWays(vertex);
34389                     if (parents.length < 3) {
34390                         if (vertexIds.indexOf(vertexId) !== -1) {
34391                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
34392                         }
34393                     }
34394
34395                     if (parents.length === 2) {     // vertex with 2 parents is trivial
34396                         var a = parents[0];
34397                         var b = parents[1];
34398                         var aIsLeaf = a && !a.__via;
34399                         var bIsLeaf = b && !b.__via;
34400                         var leaf, survivor;
34401
34402                         if (aIsLeaf && !bIsLeaf) {
34403                             leaf = a;
34404                             survivor = b;
34405                         } else if (!aIsLeaf && bIsLeaf) {
34406                             leaf = b;
34407                             survivor = a;
34408                         }
34409
34410                         if (leaf && survivor) {
34411                             survivor = withMetadata(survivor, vertexIds);      // update survivor way
34412                             vgraph = vgraph.replace(survivor).remove(leaf);    // update graph
34413                             removeWayIds.push(leaf.id);
34414                             keepGoing = true;
34415                         }
34416                     }
34417
34418                     parents = vgraph.parentWays(vertex);
34419
34420                     if (parents.length < 2) {     // vertex is no longer a key vertex
34421                         if (vertexIds.indexOf(vertexId) !== -1) {
34422                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
34423                         }
34424                         removeVertexIds.push(vertexId);
34425                         keepGoing = true;
34426                     }
34427
34428                     if (parents.length < 1) {     // vertex is no longer attached to anything
34429                         vgraph = vgraph.remove(vertex);
34430                     }
34431
34432                 }
34433             } while (keepGoing);
34434
34435
34436             vertices = vertices
34437                 .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; })
34438                 .map(function(vertex) { return vgraph.entity(vertex.id); });
34439             ways = ways
34440                 .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; })
34441                 .map(function(way) { return vgraph.entity(way.id); });
34442
34443
34444             // OK!  Here is our intersection..
34445             var intersection = {
34446                 graph: vgraph,
34447                 actions: actions,
34448                 vertices: vertices,
34449                 ways: ways,
34450             };
34451
34452
34453
34454             // Get all the valid turns through this intersection given a starting way id.
34455             // This operates on the virtual graph for everything.
34456             //
34457             // Basically, walk through all possible paths from starting way,
34458             //   honoring the existing turn restrictions as we go (watch out for loops!)
34459             //
34460             // For each path found, generate and return a `osmTurn` datastructure.
34461             //
34462             intersection.turns = function(fromWayId, maxViaWay) {
34463                 if (!fromWayId) return [];
34464                 if (!maxViaWay) maxViaWay = 0;
34465
34466                 var vgraph = intersection.graph;
34467                 var keyVertexIds = intersection.vertices.map(function(v) { return v.id; });
34468
34469                 var start = vgraph.entity(fromWayId);
34470                 if (!start || !(start.__from || start.__via)) return [];
34471
34472                 // maxViaWay=0   from-*-to              (0 vias)
34473                 // maxViaWay=1   from-*-via-*-to        (1 via max)
34474                 // maxViaWay=2   from-*-via-*-via-*-to  (2 vias max)
34475                 var maxPathLength = (maxViaWay * 2) + 3;
34476                 var turns = [];
34477
34478                 step(start);
34479                 return turns;
34480
34481
34482                 // traverse the intersection graph and find all the valid paths
34483                 function step(entity, currPath, currRestrictions, matchedRestriction) {
34484                     currPath = (currPath || []).slice();  // shallow copy
34485                     if (currPath.length >= maxPathLength) return;
34486                     currPath.push(entity.id);
34487                     currRestrictions = (currRestrictions || []).slice();  // shallow copy
34488                     var i, j;
34489
34490                     if (entity.type === 'node') {
34491                         var parents = vgraph.parentWays(entity);
34492                         var nextWays = [];
34493
34494                         // which ways can we step into?
34495                         for (i = 0; i < parents.length; i++) {
34496                             var way = parents[i];
34497
34498                             // if next way is a oneway incoming to this vertex, skip
34499                             if (way.__oneWay && way.nodes[0] !== entity.id) continue;
34500
34501                             // if we have seen it before (allowing for an initial u-turn), skip
34502                             if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) continue;
34503
34504                             // Check all "current" restrictions (where we've already walked the `FROM`)
34505                             var restrict = undefined;
34506                             for (j = 0; j < currRestrictions.length; j++) {
34507                                 var restriction = currRestrictions[j];
34508                                 var f = restriction.memberByRole('from');
34509                                 var v = restriction.membersByRole('via');
34510                                 var t = restriction.memberByRole('to');
34511                                 var isOnly = /^only_/.test(restriction.tags.restriction);
34512
34513                                 // Does the current path match this turn restriction?
34514                                 var matchesFrom = (f.id === fromWayId);
34515                                 var matchesViaTo = false;
34516                                 var isAlongOnlyPath = false;
34517
34518                                 if (t.id === way.id) {     // match TO
34519
34520                                     if (v.length === 1 && v[0].type === 'node') {    // match VIA node
34521                                         matchesViaTo = (v[0].id === entity.id && (
34522                                             (matchesFrom && currPath.length === 2) ||
34523                                             (!matchesFrom && currPath.length > 2)
34524                                         ));
34525
34526                                     } else {                                         // match all VIA ways
34527                                         var pathVias = [];
34528                                         for (k = 2; k < currPath.length; k +=2 ) {   // k = 2 skips FROM
34529                                             pathVias.push(currPath[k]);              // (path goes way-node-way...)
34530                                         }
34531                                         var restrictionVias = [];
34532                                         for (k = 0; k < v.length; k++) {
34533                                             if (v[k].type === 'way') {
34534                                                 restrictionVias.push(v[k].id);
34535                                             }
34536                                         }
34537                                         var diff = utilArrayDifference(pathVias, restrictionVias);
34538                                         matchesViaTo = !diff.length;
34539                                     }
34540
34541                                 } else if (isOnly) {
34542                                     for (k = 0; k < v.length; k++) {
34543                                         // way doesn't match TO, but is one of the via ways along the path of an "only"
34544                                         if (v[k].type === 'way' && v[k].id === way.id) {
34545                                             isAlongOnlyPath = true;
34546                                             break;
34547                                         }
34548                                     }
34549                                 }
34550
34551                                 if (matchesViaTo) {
34552                                     if (isOnly) {
34553                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true };
34554                                     } else {
34555                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true };
34556                                     }
34557                                 } else {    // indirect - caused by a different nearby restriction
34558                                     if (isAlongOnlyPath) {
34559                                         restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false };
34560                                     } else if (isOnly) {
34561                                         restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true };
34562                                     }
34563                                 }
34564
34565                                 // stop looking if we find a "direct" restriction (matching FROM, VIA, TO)
34566                                 if (restrict && restrict.direct)
34567                                     break;
34568                             }
34569
34570                             nextWays.push({ way: way, restrict: restrict });
34571                         }
34572
34573                         nextWays.forEach(function(nextWay) {
34574                             step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
34575                         });
34576
34577
34578                     } else {  // entity.type === 'way'
34579                         if (currPath.length >= 3) {     // this is a "complete" path..
34580                             var turnPath = currPath.slice();   // shallow copy
34581
34582                             // an indirect restriction - only include the partial path (starting at FROM)
34583                             if (matchedRestriction && matchedRestriction.direct === false) {
34584                                 for (i = 0; i < turnPath.length; i++) {
34585                                     if (turnPath[i] === matchedRestriction.from) {
34586                                         turnPath = turnPath.slice(i);
34587                                         break;
34588                                     }
34589                                 }
34590                             }
34591
34592                             var turn = pathToTurn(turnPath);
34593                             if (turn) {
34594                                 if (matchedRestriction) {
34595                                     turn.restrictionID = matchedRestriction.id;
34596                                     turn.no = matchedRestriction.no;
34597                                     turn.only = matchedRestriction.only;
34598                                     turn.direct = matchedRestriction.direct;
34599                                 }
34600                                 turns.push(osmTurn(turn));
34601                             }
34602
34603                             if (currPath[0] === currPath[2]) return;   // if we made a u-turn - stop here
34604                         }
34605
34606                         if (matchedRestriction && matchedRestriction.end) return;  // don't advance any further
34607
34608                         // which nodes can we step into?
34609                         var n1 = vgraph.entity(entity.first());
34610                         var n2 = vgraph.entity(entity.last());
34611                         var dist = geoSphericalDistance(n1.loc, n2.loc);
34612                         var nextNodes = [];
34613
34614                         if (currPath.length > 1) {
34615                             if (dist > maxDistance) return;   // the next node is too far
34616                             if (!entity.__via) return;        // this way is a leaf / can't be a via
34617                         }
34618
34619                         if (!entity.__oneWay &&                     // bidirectional..
34620                             keyVertexIds.indexOf(n1.id) !== -1 &&   // key vertex..
34621                             currPath.indexOf(n1.id) === -1) {       // haven't seen it yet..
34622                             nextNodes.push(n1);                     // can advance to first node
34623                         }
34624                         if (keyVertexIds.indexOf(n2.id) !== -1 &&   // key vertex..
34625                             currPath.indexOf(n2.id) === -1) {       // haven't seen it yet..
34626                             nextNodes.push(n2);                     // can advance to last node
34627                         }
34628
34629                         nextNodes.forEach(function(nextNode) {
34630                             // gather restrictions FROM this way
34631                             var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) {
34632                                 if (!r.isRestriction()) return false;
34633
34634                                 var f = r.memberByRole('from');
34635                                 if (!f || f.id !== entity.id) return false;
34636
34637                                 var isOnly = /^only_/.test(r.tags.restriction);
34638                                 if (!isOnly) return true;
34639
34640                                 // `only_` restrictions only matter along the direction of the VIA - #4849
34641                                 var isOnlyVia = false;
34642                                 var v = r.membersByRole('via');
34643                                 if (v.length === 1 && v[0].type === 'node') {   // via node
34644                                     isOnlyVia = (v[0].id === nextNode.id);
34645                                 } else {                                        // via way(s)
34646                                     for (var i = 0; i < v.length; i++) {
34647                                         if (v[i].type !== 'way') continue;
34648                                         var viaWay = vgraph.entity(v[i].id);
34649                                         if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
34650                                             isOnlyVia = true;
34651                                             break;
34652                                         }
34653                                     }
34654                                 }
34655                                 return isOnlyVia;
34656                             });
34657
34658                             step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
34659                         });
34660                     }
34661                 }
34662
34663
34664                 // assumes path is alternating way-node-way of odd length
34665                 function pathToTurn(path) {
34666                     if (path.length < 3) return;
34667                     var fromWayId, fromNodeId, fromVertexId;
34668                     var toWayId, toNodeId, toVertexId;
34669                     var viaWayIds, viaNodeId, isUturn;
34670
34671                     fromWayId = path[0];
34672                     toWayId = path[path.length - 1];
34673
34674                     if (path.length === 3 && fromWayId === toWayId) {  // u turn
34675                         var way = vgraph.entity(fromWayId);
34676                         if (way.__oneWay) return null;
34677
34678                         isUturn = true;
34679                         viaNodeId = fromVertexId = toVertexId = path[1];
34680                         fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId);
34681
34682                     } else {
34683                         isUturn = false;
34684                         fromVertexId = path[1];
34685                         fromNodeId = adjacentNode(fromWayId, fromVertexId);
34686                         toVertexId = path[path.length - 2];
34687                         toNodeId = adjacentNode(toWayId, toVertexId);
34688
34689                         if (path.length === 3) {
34690                             viaNodeId = path[1];
34691                         } else {
34692                             viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; });
34693                             viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1);  // remove first, last
34694                         }
34695                     }
34696
34697                     return {
34698                         key:  path.join('_'),
34699                         path: path,
34700                         from: { node: fromNodeId, way:  fromWayId, vertex: fromVertexId },
34701                         via:  { node: viaNodeId,  ways: viaWayIds },
34702                         to:   { node: toNodeId,   way:  toWayId, vertex: toVertexId },
34703                         u:    isUturn
34704                     };
34705
34706
34707                     function adjacentNode(wayId, affixId) {
34708                         var nodes = vgraph.entity(wayId).nodes;
34709                         return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2];
34710                     }
34711                 }
34712
34713             };
34714
34715             return intersection;
34716         }
34717
34718
34719         function osmInferRestriction(graph, turn, projection) {
34720             var fromWay = graph.entity(turn.from.way);
34721             var fromNode = graph.entity(turn.from.node);
34722             var fromVertex = graph.entity(turn.from.vertex);
34723             var toWay = graph.entity(turn.to.way);
34724             var toNode = graph.entity(turn.to.node);
34725             var toVertex = graph.entity(turn.to.vertex);
34726
34727             var fromOneWay = (fromWay.tags.oneway === 'yes');
34728             var toOneWay = (toWay.tags.oneway === 'yes');
34729             var angle = (geoAngle(fromVertex, fromNode, projection) -
34730                         geoAngle(toVertex, toNode, projection)) * 180 / Math.PI;
34731
34732             while (angle < 0)
34733                 angle += 360;
34734
34735             if (fromNode === toNode)
34736                 return 'no_u_turn';
34737             if ((angle < 23 || angle > 336) && fromOneWay && toOneWay)
34738                 return 'no_u_turn';   // wider tolerance for u-turn if both ways are oneway
34739             if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex)
34740                 return 'no_u_turn';   // even wider tolerance for u-turn if there is a via way (from !== to)
34741             if (angle < 158)
34742                 return 'no_right_turn';
34743             if (angle > 202)
34744                 return 'no_left_turn';
34745
34746             return 'no_straight_on';
34747         }
34748
34749         function actionMergePolygon(ids, newRelationId) {
34750
34751             function groupEntities(graph) {
34752                 var entities = ids.map(function (id) { return graph.entity(id); });
34753                 var geometryGroups = utilArrayGroupBy(entities, function(entity) {
34754                     if (entity.type === 'way' && entity.isClosed()) {
34755                         return 'closedWay';
34756                     } else if (entity.type === 'relation' && entity.isMultipolygon()) {
34757                         return 'multipolygon';
34758                     } else {
34759                         return 'other';
34760                     }
34761                 });
34762
34763                 return Object.assign(
34764                     { closedWay: [], multipolygon: [], other: [] },
34765                     geometryGroups
34766                 );
34767             }
34768
34769
34770             var action = function(graph) {
34771                 var entities = groupEntities(graph);
34772
34773                 // An array representing all the polygons that are part of the multipolygon.
34774                 //
34775                 // Each element is itself an array of objects with an id property, and has a
34776                 // locs property which is an array of the locations forming the polygon.
34777                 var polygons = entities.multipolygon.reduce(function(polygons, m) {
34778                     return polygons.concat(osmJoinWays(m.members, graph));
34779                 }, []).concat(entities.closedWay.map(function(d) {
34780                     var member = [{id: d.id}];
34781                     member.nodes = graph.childNodes(d);
34782                     return member;
34783                 }));
34784
34785                 // contained is an array of arrays of boolean values,
34786                 // where contained[j][k] is true iff the jth way is
34787                 // contained by the kth way.
34788                 var contained = polygons.map(function(w, i) {
34789                     return polygons.map(function(d, n) {
34790                         if (i === n) return null;
34791                         return geoPolygonContainsPolygon(
34792                             d.nodes.map(function(n) { return n.loc; }),
34793                             w.nodes.map(function(n) { return n.loc; })
34794                         );
34795                     });
34796                 });
34797
34798                 // Sort all polygons as either outer or inner ways
34799                 var members = [];
34800                 var outer = true;
34801
34802                 while (polygons.length) {
34803                     extractUncontained(polygons);
34804                     polygons = polygons.filter(isContained);
34805                     contained = contained.filter(isContained).map(filterContained);
34806                 }
34807
34808                 function isContained(d, i) {
34809                     return contained[i].some(function(val) { return val; });
34810                 }
34811
34812                 function filterContained(d) {
34813                     return d.filter(isContained);
34814                 }
34815
34816                 function extractUncontained(polygons) {
34817                     polygons.forEach(function(d, i) {
34818                         if (!isContained(d, i)) {
34819                             d.forEach(function(member) {
34820                                 members.push({
34821                                     type: 'way',
34822                                     id: member.id,
34823                                     role: outer ? 'outer' : 'inner'
34824                                 });
34825                             });
34826                         }
34827                     });
34828                     outer = !outer;
34829                 }
34830
34831                 // Move all tags to one relation
34832                 var relation = entities.multipolygon[0] ||
34833                     osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }});
34834
34835                 entities.multipolygon.slice(1).forEach(function(m) {
34836                     relation = relation.mergeTags(m.tags);
34837                     graph = graph.remove(m);
34838                 });
34839
34840                 entities.closedWay.forEach(function(way) {
34841                     function isThisOuter(m) {
34842                         return m.id === way.id && m.role !== 'inner';
34843                     }
34844                     if (members.some(isThisOuter)) {
34845                         relation = relation.mergeTags(way.tags);
34846                         graph = graph.replace(way.update({ tags: {} }));
34847                     }
34848                 });
34849
34850                 return graph.replace(relation.update({
34851                     members: members,
34852                     tags: utilObjectOmit(relation.tags, ['area'])
34853                 }));
34854             };
34855
34856
34857             action.disabled = function(graph) {
34858                 var entities = groupEntities(graph);
34859                 if (entities.other.length > 0 ||
34860                     entities.closedWay.length + entities.multipolygon.length < 2)
34861                     return 'not_eligible';
34862                 if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); }))
34863                     return 'incomplete_relation';
34864             };
34865
34866
34867             return action;
34868         }
34869
34870         var isArray$3 = Array.isArray;
34871         var keyList = Object.keys;
34872         var hasProp = Object.prototype.hasOwnProperty;
34873
34874         var fastDeepEqual = function equal(a, b) {
34875           if (a === b) return true;
34876
34877           if (a && b && typeof a == 'object' && typeof b == 'object') {
34878             var arrA = isArray$3(a)
34879               , arrB = isArray$3(b)
34880               , i
34881               , length
34882               , key;
34883
34884             if (arrA && arrB) {
34885               length = a.length;
34886               if (length != b.length) return false;
34887               for (i = length; i-- !== 0;)
34888                 if (!equal(a[i], b[i])) return false;
34889               return true;
34890             }
34891
34892             if (arrA != arrB) return false;
34893
34894             var dateA = a instanceof Date
34895               , dateB = b instanceof Date;
34896             if (dateA != dateB) return false;
34897             if (dateA && dateB) return a.getTime() == b.getTime();
34898
34899             var regexpA = a instanceof RegExp
34900               , regexpB = b instanceof RegExp;
34901             if (regexpA != regexpB) return false;
34902             if (regexpA && regexpB) return a.toString() == b.toString();
34903
34904             var keys = keyList(a);
34905             length = keys.length;
34906
34907             if (length !== keyList(b).length)
34908               return false;
34909
34910             for (i = length; i-- !== 0;)
34911               if (!hasProp.call(b, keys[i])) return false;
34912
34913             for (i = length; i-- !== 0;) {
34914               key = keys[i];
34915               if (!equal(a[key], b[key])) return false;
34916             }
34917
34918             return true;
34919           }
34920
34921           return a!==a && b!==b;
34922         };
34923
34924         // Text diff algorithm following Hunt and McIlroy 1976.
34925         // J. W. Hunt and M. D. McIlroy, An algorithm for differential file
34926         // comparison, Bell Telephone Laboratories CSTR #41 (1976)
34927         // http://www.cs.dartmouth.edu/~doug/
34928         //
34929         // Expects two arrays of strings.
34930         function LCS(file1, file2) {
34931           var equivalenceClasses;
34932           var file2indices;
34933           var newCandidate;
34934           var candidates;
34935           var line;
34936           var c, i, j, jX, r, s;
34937
34938           equivalenceClasses = {};
34939           for (j = 0; j < file2.length; j++) {
34940             line = file2[j];
34941             if (equivalenceClasses[line]) {
34942               equivalenceClasses[line].push(j);
34943             } else {
34944               equivalenceClasses[line] = [j];
34945             }
34946           }
34947
34948           candidates = [
34949             { file1index: -1, file2index: -1, chain: null }
34950           ];
34951
34952           for (i = 0; i < file1.length; i++) {
34953             line = file1[i];
34954             file2indices = equivalenceClasses[line] || [];
34955
34956             r = 0;
34957             c = candidates[0];
34958
34959             for (jX = 0; jX < file2indices.length; jX++) {
34960               j = file2indices[jX];
34961
34962               for (s = r; s < candidates.length; s++) {
34963                 if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) {
34964                   break;
34965                 }
34966               }
34967
34968               if (s < candidates.length) {
34969                 newCandidate = { file1index: i, file2index: j, chain: candidates[s] };
34970                 if (r === candidates.length) {
34971                   candidates.push(c);
34972                 } else {
34973                   candidates[r] = c;
34974                 }
34975                 r = s + 1;
34976                 c = newCandidate;
34977                 if (r === candidates.length) {
34978                   break; // no point in examining further (j)s
34979                 }
34980               }
34981             }
34982
34983             candidates[r] = c;
34984           }
34985
34986           // At this point, we know the LCS: it's in the reverse of the
34987           // linked-list through .chain of candidates[candidates.length - 1].
34988
34989           return candidates[candidates.length - 1];
34990         }
34991
34992
34993         // We apply the LCS to give a simple representation of the
34994         // offsets and lengths of mismatched chunks in the input
34995         // files. This is used by diff3MergeIndices below.
34996         function diffIndices(file1, file2) {
34997           var result = [];
34998           var tail1 = file1.length;
34999           var tail2 = file2.length;
35000
35001           for (var candidate = LCS(file1, file2);
35002              candidate !== null;
35003              candidate = candidate.chain)
35004           {
35005             var mismatchLength1 = tail1 - candidate.file1index - 1;
35006             var mismatchLength2 = tail2 - candidate.file2index - 1;
35007             tail1 = candidate.file1index;
35008             tail2 = candidate.file2index;
35009
35010             if (mismatchLength1 || mismatchLength2) {
35011               result.push({
35012                 file1: [tail1 + 1, mismatchLength1],
35013                 file2: [tail2 + 1, mismatchLength2]
35014               });
35015             }
35016           }
35017
35018           result.reverse();
35019           return result;
35020         }
35021
35022
35023         // Given three files, A, O, and B, where both A and B are
35024         // independently derived from O, returns a fairly complicated
35025         // internal representation of merge decisions it's taken. The
35026         // interested reader may wish to consult
35027         //
35028         // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
35029         // 'A Formal Investigation of ' In Arvind and Prasad,
35030         // editors, Foundations of Software Technology and Theoretical
35031         // Computer Science (FSTTCS), December 2007.
35032         //
35033         // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
35034         function diff3MergeIndices(a, o, b) {
35035           var i;
35036           var m1 = diffIndices(o, a);
35037           var m2 = diffIndices(o, b);
35038
35039           var hunks = [];
35040           function addHunk(h, side) {
35041             hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);
35042           }
35043           for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); }
35044           for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); }
35045           hunks.sort(function (x, y) { return x[0] - y[0]; });
35046
35047           var result = [];
35048           var commonOffset = 0;
35049           function copyCommon(targetOffset) {
35050             if (targetOffset > commonOffset) {
35051               result.push([1, commonOffset, targetOffset - commonOffset]);
35052               commonOffset = targetOffset;
35053             }
35054           }
35055
35056           for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {
35057             var firstHunkIndex = hunkIndex;
35058             var hunk = hunks[hunkIndex];
35059             var regionLhs = hunk[0];
35060             var regionRhs = regionLhs + hunk[2];
35061             while (hunkIndex < hunks.length - 1) {
35062               var maybeOverlapping = hunks[hunkIndex + 1];
35063               var maybeLhs = maybeOverlapping[0];
35064               if (maybeLhs > regionRhs) {
35065                 break;
35066               }
35067               regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]);
35068               hunkIndex++;
35069             }
35070
35071             copyCommon(regionLhs);
35072             if (firstHunkIndex === hunkIndex) {
35073               // The 'overlap' was only one hunk long, meaning that
35074               // there's no conflict here. Either a and o were the
35075               // same, or b and o were the same.
35076               if (hunk[4] > 0) {
35077                 result.push([hunk[1], hunk[3], hunk[4]]);
35078               }
35079             } else {
35080               // A proper conflict. Determine the extents of the
35081               // regions involved from a, o and b. Effectively merge
35082               // all the hunks on the left into one giant hunk, and
35083               // do the same for the right; then, correct for skew
35084               // in the regions of o that each side changed, and
35085               // report appropriate spans for the three sides.
35086               var regions = {
35087                 0: [a.length, -1, o.length, -1],
35088                 2: [b.length, -1, o.length, -1]
35089               };
35090               for (i = firstHunkIndex; i <= hunkIndex; i++) {
35091                 hunk = hunks[i];
35092                 var side = hunk[1];
35093                 var r = regions[side];
35094                 var oLhs = hunk[0];
35095                 var oRhs = oLhs + hunk[2];
35096                 var abLhs = hunk[3];
35097                 var abRhs = abLhs + hunk[4];
35098                 r[0] = Math.min(abLhs, r[0]);
35099                 r[1] = Math.max(abRhs, r[1]);
35100                 r[2] = Math.min(oLhs, r[2]);
35101                 r[3] = Math.max(oRhs, r[3]);
35102               }
35103               var aLhs = regions[0][0] + (regionLhs - regions[0][2]);
35104               var aRhs = regions[0][1] + (regionRhs - regions[0][3]);
35105               var bLhs = regions[2][0] + (regionLhs - regions[2][2]);
35106               var bRhs = regions[2][1] + (regionRhs - regions[2][3]);
35107               result.push([-1,
35108                            aLhs,      aRhs      - aLhs,
35109                            regionLhs, regionRhs - regionLhs,
35110                            bLhs,      bRhs      - bLhs]);
35111             }
35112             commonOffset = regionRhs;
35113           }
35114
35115           copyCommon(o.length);
35116           return result;
35117         }
35118
35119
35120         // Applies the output of diff3MergeIndices to actually
35121         // construct the merged file; the returned result alternates
35122         // between 'ok' and 'conflict' blocks.
35123         function diff3Merge(a, o, b, excludeFalseConflicts) {
35124           var result = [];
35125           var files = [a, o, b];
35126           var indices = diff3MergeIndices(a, o, b);
35127
35128           var okLines = [];
35129           function flushOk() {
35130             if (okLines.length) {
35131               result.push({ok: okLines});
35132             }
35133             okLines = [];
35134           }
35135           function pushOk(xs) {
35136             for (var j = 0; j < xs.length; j++) {
35137               okLines.push(xs[j]);
35138             }
35139           }
35140
35141           function isTrueConflict(rec) {
35142             if (rec[2] !== rec[6]) return true;
35143             var aoff = rec[1];
35144             var boff = rec[5];
35145             for (var j = 0; j < rec[2]; j++) {
35146               if (a[j + aoff] !== b[j + boff]) {
35147                 return true;
35148               }
35149             }
35150             return false;
35151           }
35152
35153           for (var i = 0; i < indices.length; i++) {
35154             var x = indices[i];
35155             var side = x[0];
35156             if (side === -1) {
35157               if (excludeFalseConflicts && !isTrueConflict(x)) {
35158                 pushOk(files[0].slice(x[1], x[1] + x[2]));
35159               } else {
35160                 flushOk();
35161                 result.push({
35162                   conflict: {
35163                     a: a.slice(x[1], x[1] + x[2]),
35164                     aIndex: x[1],
35165                     o: o.slice(x[3], x[3] + x[4]),
35166                     oIndex: x[3],
35167                     b: b.slice(x[5], x[5] + x[6]),
35168                     bIndex: x[5]
35169                   }
35170                 });
35171               }
35172             } else {
35173               pushOk(files[side].slice(x[1], x[1] + x[2]));
35174             }
35175           }
35176
35177           flushOk();
35178           return result;
35179         }
35180
35181         function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) {
35182             var _option = 'safe';  // 'safe', 'force_local', 'force_remote'
35183             var _conflicts = [];
35184
35185
35186             function user(d) {
35187                 return (typeof formatUser === 'function') ? formatUser(d) : d;
35188             }
35189
35190
35191             function mergeLocation(remote, target) {
35192                 function pointEqual(a, b) {
35193                     var epsilon = 1e-6;
35194                     return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon);
35195                 }
35196
35197                 if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) {
35198                     return target;
35199                 }
35200                 if (_option === 'force_remote') {
35201                     return target.update({loc: remote.loc});
35202                 }
35203
35204                 _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) }));
35205                 return target;
35206             }
35207
35208
35209             function mergeNodes(base, remote, target) {
35210                 if (_option === 'force_local' || fastDeepEqual(target.nodes, remote.nodes)) {
35211                     return target;
35212                 }
35213                 if (_option === 'force_remote') {
35214                     return target.update({nodes: remote.nodes});
35215                 }
35216
35217                 var ccount = _conflicts.length;
35218                 var o = base.nodes || [];
35219                 var a = target.nodes || [];
35220                 var b = remote.nodes || [];
35221                 var nodes = [];
35222                 var hunks = diff3Merge(a, o, b, true);
35223
35224                 for (var i = 0; i < hunks.length; i++) {
35225                     var hunk = hunks[i];
35226                     if (hunk.ok) {
35227                         nodes.push.apply(nodes, hunk.ok);
35228                     } else {
35229                         // for all conflicts, we can assume c.a !== c.b
35230                         // because `diff3Merge` called with `true` option to exclude false conflicts..
35231                         var c = hunk.conflict;
35232                         if (fastDeepEqual(c.o, c.a)) {  // only changed remotely
35233                             nodes.push.apply(nodes, c.b);
35234                         } else if (fastDeepEqual(c.o, c.b)) {  // only changed locally
35235                             nodes.push.apply(nodes, c.a);
35236                         } else {       // changed both locally and remotely
35237                             _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) }));
35238                             break;
35239                         }
35240                     }
35241                 }
35242
35243                 return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target;
35244             }
35245
35246
35247             function mergeChildren(targetWay, children, updates, graph) {
35248                 function isUsed(node, targetWay) {
35249                     var hasInterestingParent = graph.parentWays(node)
35250                         .some(function(way) { return way.id !== targetWay.id; });
35251
35252                     return node.hasInterestingTags() ||
35253                         hasInterestingParent ||
35254                         graph.parentRelations(node).length > 0;
35255                 }
35256
35257                 var ccount = _conflicts.length;
35258
35259                 for (var i = 0; i < children.length; i++) {
35260                     var id = children[i];
35261                     var node = graph.hasEntity(id);
35262
35263                     // remove unused childNodes..
35264                     if (targetWay.nodes.indexOf(id) === -1) {
35265                         if (node && !isUsed(node, targetWay)) {
35266                             updates.removeIds.push(id);
35267                         }
35268                         continue;
35269                     }
35270
35271                     // restore used childNodes..
35272                     var local = localGraph.hasEntity(id);
35273                     var remote = remoteGraph.hasEntity(id);
35274                     var target;
35275
35276                     if (_option === 'force_remote' && remote && remote.visible) {
35277                         updates.replacements.push(remote);
35278
35279                     } else if (_option === 'force_local' && local) {
35280                         target = osmEntity(local);
35281                         if (remote) {
35282                             target = target.update({ version: remote.version });
35283                         }
35284                         updates.replacements.push(target);
35285
35286                     } else if (_option === 'safe' && local && remote && local.version !== remote.version) {
35287                         target = osmEntity(local, { version: remote.version });
35288                         if (remote.visible) {
35289                             target = mergeLocation(remote, target);
35290                         } else {
35291                             _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
35292                         }
35293
35294                         if (_conflicts.length !== ccount) break;
35295                         updates.replacements.push(target);
35296                     }
35297                 }
35298
35299                 return targetWay;
35300             }
35301
35302
35303             function updateChildren(updates, graph) {
35304                 for (var i = 0; i < updates.replacements.length; i++) {
35305                     graph = graph.replace(updates.replacements[i]);
35306                 }
35307                 if (updates.removeIds.length) {
35308                     graph = actionDeleteMultiple(updates.removeIds)(graph);
35309                 }
35310                 return graph;
35311             }
35312
35313
35314             function mergeMembers(remote, target) {
35315                 if (_option === 'force_local' || fastDeepEqual(target.members, remote.members)) {
35316                     return target;
35317                 }
35318                 if (_option === 'force_remote') {
35319                     return target.update({members: remote.members});
35320                 }
35321
35322                 _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) }));
35323                 return target;
35324             }
35325
35326
35327             function mergeTags(base, remote, target) {
35328                 if (_option === 'force_local' || fastDeepEqual(target.tags, remote.tags)) {
35329                     return target;
35330                 }
35331                 if (_option === 'force_remote') {
35332                     return target.update({tags: remote.tags});
35333                 }
35334
35335                 var ccount = _conflicts.length;
35336                 var o = base.tags || {};
35337                 var a = target.tags || {};
35338                 var b = remote.tags || {};
35339                 var keys = utilArrayUnion(utilArrayUnion(Object.keys(o), Object.keys(a)), Object.keys(b))
35340                     .filter(function(k) { return !dataDiscarded[k]; });
35341                 var tags = Object.assign({}, a);   // shallow copy
35342                 var changed = false;
35343
35344                 for (var i = 0; i < keys.length; i++) {
35345                     var k = keys[i];
35346
35347                     if (o[k] !== b[k] && a[k] !== b[k]) {    // changed remotely..
35348                         if (o[k] !== a[k]) {      // changed locally..
35349                             _conflicts.push(t('merge_remote_changes.conflict.tags',
35350                                 { tag: k, local: a[k], remote: b[k], user: user(remote.user) }));
35351
35352                         } else {                  // unchanged locally, accept remote change..
35353                             if (b.hasOwnProperty(k)) {
35354                                 tags[k] = b[k];
35355                             } else {
35356                                 delete tags[k];
35357                             }
35358                             changed = true;
35359                         }
35360                     }
35361                 }
35362
35363                 return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target;
35364             }
35365
35366
35367             //  `graph.base()` is the common ancestor of the two graphs.
35368             //  `localGraph` contains user's edits up to saving
35369             //  `remoteGraph` contains remote edits to modified nodes
35370             //  `graph` must be a descendent of `localGraph` and may include
35371             //      some conflict resolution actions performed on it.
35372             //
35373             //                  --- ... --- `localGraph` -- ... -- `graph`
35374             //                 /
35375             //  `graph.base()` --- ... --- `remoteGraph`
35376             //
35377             var action = function(graph) {
35378                 var updates = { replacements: [], removeIds: [] };
35379                 var base = graph.base().entities[id];
35380                 var local = localGraph.entity(id);
35381                 var remote = remoteGraph.entity(id);
35382                 var target = osmEntity(local, { version: remote.version });
35383
35384                 // delete/undelete
35385                 if (!remote.visible) {
35386                     if (_option === 'force_remote') {
35387                         return actionDeleteMultiple([id])(graph);
35388
35389                     } else if (_option === 'force_local') {
35390                         if (target.type === 'way') {
35391                             target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
35392                             graph = updateChildren(updates, graph);
35393                         }
35394                         return graph.replace(target);
35395
35396                     } else {
35397                         _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
35398                         return graph;  // do nothing
35399                     }
35400                 }
35401
35402                 // merge
35403                 if (target.type === 'node') {
35404                     target = mergeLocation(remote, target);
35405
35406                 } else if (target.type === 'way') {
35407                     // pull in any child nodes that may not be present locally..
35408                     graph.rebase(remoteGraph.childNodes(remote), [graph], false);
35409                     target = mergeNodes(base, remote, target);
35410                     target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
35411
35412                 } else if (target.type === 'relation') {
35413                     target = mergeMembers(remote, target);
35414                 }
35415
35416                 target = mergeTags(base, remote, target);
35417
35418                 if (!_conflicts.length) {
35419                     graph = updateChildren(updates, graph).replace(target);
35420                 }
35421
35422                 return graph;
35423             };
35424
35425
35426             action.withOption = function(opt) {
35427                 _option = opt;
35428                 return action;
35429             };
35430
35431
35432             action.conflicts = function() {
35433                 return _conflicts;
35434             };
35435
35436
35437             return action;
35438         }
35439
35440         // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
35441         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
35442         function actionMove(moveIDs, tryDelta, projection, cache) {
35443             var _delta = tryDelta;
35444
35445             function setupCache(graph) {
35446                 function canMove(nodeID) {
35447                     // Allow movement of any node that is in the selectedIDs list..
35448                     if (moveIDs.indexOf(nodeID) !== -1) return true;
35449
35450                     // Allow movement of a vertex where 2 ways meet..
35451                     var parents = graph.parentWays(graph.entity(nodeID));
35452                     if (parents.length < 3) return true;
35453
35454                     // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too..
35455                     var parentsMoving = parents.every(function(way) { return cache.moving[way.id]; });
35456                     if (!parentsMoving) delete cache.moving[nodeID];
35457
35458                     return parentsMoving;
35459                 }
35460
35461                 function cacheEntities(ids) {
35462                     for (var i = 0; i < ids.length; i++) {
35463                         var id = ids[i];
35464                         if (cache.moving[id]) continue;
35465                         cache.moving[id] = true;
35466
35467                         var entity = graph.hasEntity(id);
35468                         if (!entity) continue;
35469
35470                         if (entity.type === 'node') {
35471                             cache.nodes.push(id);
35472                             cache.startLoc[id] = entity.loc;
35473                         } else if (entity.type === 'way') {
35474                             cache.ways.push(id);
35475                             cacheEntities(entity.nodes);
35476                         } else {
35477                             cacheEntities(entity.members.map(function(member) {
35478                                 return member.id;
35479                             }));
35480                         }
35481                     }
35482                 }
35483
35484                 function cacheIntersections(ids) {
35485                     function isEndpoint(way, id) {
35486                         return !way.isClosed() && !!way.affix(id);
35487                     }
35488
35489                     for (var i = 0; i < ids.length; i++) {
35490                         var id = ids[i];
35491
35492                         // consider only intersections with 1 moved and 1 unmoved way.
35493                         var childNodes = graph.childNodes(graph.entity(id));
35494                         for (var j = 0; j < childNodes.length; j++) {
35495                             var node = childNodes[j];
35496                             var parents = graph.parentWays(node);
35497                             if (parents.length !== 2) continue;
35498
35499                             var moved = graph.entity(id);
35500                             var unmoved = null;
35501                             for (var k = 0; k < parents.length; k++) {
35502                                 var way = parents[k];
35503                                 if (!cache.moving[way.id]) {
35504                                     unmoved = way;
35505                                     break;
35506                                 }
35507                             }
35508                             if (!unmoved) continue;
35509
35510                             // exclude ways that are overly connected..
35511                             if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) continue;
35512                             if (moved.isArea() || unmoved.isArea()) continue;
35513
35514                             cache.intersections.push({
35515                                 nodeId: node.id,
35516                                 movedId: moved.id,
35517                                 unmovedId: unmoved.id,
35518                                 movedIsEP: isEndpoint(moved, node.id),
35519                                 unmovedIsEP: isEndpoint(unmoved, node.id)
35520                             });
35521                         }
35522                     }
35523                 }
35524
35525
35526                 if (!cache) {
35527                     cache = {};
35528                 }
35529                 if (!cache.ok) {
35530                     cache.moving = {};
35531                     cache.intersections = [];
35532                     cache.replacedVertex = {};
35533                     cache.startLoc = {};
35534                     cache.nodes = [];
35535                     cache.ways = [];
35536
35537                     cacheEntities(moveIDs);
35538                     cacheIntersections(cache.ways);
35539                     cache.nodes = cache.nodes.filter(canMove);
35540
35541                     cache.ok = true;
35542                 }
35543             }
35544
35545
35546             // Place a vertex where the moved vertex used to be, to preserve way shape..
35547             //
35548             //  Start:
35549             //      b ---- e
35550             //     / \
35551             //    /   \
35552             //   /     \
35553             //  a       c
35554             //
35555             //      *               node '*' added to preserve shape
35556             //     / \
35557             //    /   b ---- e      way `b,e` moved here:
35558             //   /     \
35559             //  a       c
35560             //
35561             //
35562             function replaceMovedVertex(nodeId, wayId, graph, delta) {
35563                 var way = graph.entity(wayId);
35564                 var moved = graph.entity(nodeId);
35565                 var movedIndex = way.nodes.indexOf(nodeId);
35566                 var len, prevIndex, nextIndex;
35567
35568                 if (way.isClosed()) {
35569                     len = way.nodes.length - 1;
35570                     prevIndex = (movedIndex + len - 1) % len;
35571                     nextIndex = (movedIndex + len + 1) % len;
35572                 } else {
35573                     len = way.nodes.length;
35574                     prevIndex = movedIndex - 1;
35575                     nextIndex = movedIndex + 1;
35576                 }
35577
35578                 var prev = graph.hasEntity(way.nodes[prevIndex]);
35579                 var next = graph.hasEntity(way.nodes[nextIndex]);
35580
35581                 // Don't add orig vertex at endpoint..
35582                 if (!prev || !next) return graph;
35583
35584                 var key = wayId + '_' + nodeId;
35585                 var orig = cache.replacedVertex[key];
35586                 if (!orig) {
35587                     orig = osmNode();
35588                     cache.replacedVertex[key] = orig;
35589                     cache.startLoc[orig.id] = cache.startLoc[nodeId];
35590                 }
35591
35592                 var start, end;
35593                 if (delta) {
35594                     start = projection(cache.startLoc[nodeId]);
35595                     end = projection.invert(geoVecAdd(start, delta));
35596                 } else {
35597                     end = cache.startLoc[nodeId];
35598                 }
35599                 orig = orig.move(end);
35600
35601                 var angle = Math.abs(geoAngle(orig, prev, projection) -
35602                         geoAngle(orig, next, projection)) * 180 / Math.PI;
35603
35604                 // Don't add orig vertex if it would just make a straight line..
35605                 if (angle > 175 && angle < 185) return graph;
35606
35607                 // moving forward or backward along way?
35608                 var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection);
35609                 var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection);
35610                 var d1 = geoPathLength(p1);
35611                 var d2 = geoPathLength(p2);
35612                 var insertAt = (d1 <= d2) ? movedIndex : nextIndex;
35613
35614                 // moving around closed loop?
35615                 if (way.isClosed() && insertAt === 0) insertAt = len;
35616
35617                 way = way.addNode(orig.id, insertAt);
35618                 return graph.replace(orig).replace(way);
35619             }
35620
35621
35622             // Remove duplicate vertex that might have been added by
35623             // replaceMovedVertex.  This is done after the unzorro checks.
35624             function removeDuplicateVertices(wayId, graph) {
35625                 var way = graph.entity(wayId);
35626                 var epsilon = 1e-6;
35627                 var prev, curr;
35628
35629                 function isInteresting(node, graph) {
35630                     return graph.parentWays(node).length > 1 ||
35631                         graph.parentRelations(node).length ||
35632                         node.hasInterestingTags();
35633                 }
35634
35635                 for (var i = 0; i < way.nodes.length; i++) {
35636                     curr = graph.entity(way.nodes[i]);
35637
35638                     if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) {
35639                         if (!isInteresting(prev, graph)) {
35640                             way = way.removeNode(prev.id);
35641                             graph = graph.replace(way).remove(prev);
35642                         } else if (!isInteresting(curr, graph)) {
35643                             way = way.removeNode(curr.id);
35644                             graph = graph.replace(way).remove(curr);
35645                         }
35646                     }
35647
35648                     prev = curr;
35649                 }
35650
35651                 return graph;
35652             }
35653
35654
35655             // Reorder nodes around intersections that have moved..
35656             //
35657             //  Start:                way1.nodes: b,e         (moving)
35658             //  a - b - c ----- d     way2.nodes: a,b,c,d     (static)
35659             //      |                 vertex: b
35660             //      e                 isEP1: true,  isEP2, false
35661             //
35662             //  way1 `b,e` moved here:
35663             //  a ----- c = b - d
35664             //              |
35665             //              e
35666             //
35667             //  reorder nodes         way1.nodes: b,e
35668             //  a ----- c - b - d     way2.nodes: a,c,b,d
35669             //              |
35670             //              e
35671             //
35672             function unZorroIntersection(intersection, graph) {
35673                 var vertex = graph.entity(intersection.nodeId);
35674                 var way1 = graph.entity(intersection.movedId);
35675                 var way2 = graph.entity(intersection.unmovedId);
35676                 var isEP1 = intersection.movedIsEP;
35677                 var isEP2 = intersection.unmovedIsEP;
35678
35679                 // don't move the vertex if it is the endpoint of both ways.
35680                 if (isEP1 && isEP2) return graph;
35681
35682                 var nodes1 = graph.childNodes(way1).filter(function(n) { return n !== vertex; });
35683                 var nodes2 = graph.childNodes(way2).filter(function(n) { return n !== vertex; });
35684
35685                 if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]);
35686                 if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]);
35687
35688                 var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection);
35689                 var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection);
35690                 var loc;
35691
35692                 // snap vertex to nearest edge (or some point between them)..
35693                 if (!isEP1 && !isEP2) {
35694                     var epsilon = 1e-6, maxIter = 10;
35695                     for (var i = 0; i < maxIter; i++) {
35696                         loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
35697                         edge1 = geoChooseEdge(nodes1, projection(loc), projection);
35698                         edge2 = geoChooseEdge(nodes2, projection(loc), projection);
35699                         if (Math.abs(edge1.distance - edge2.distance) < epsilon) break;
35700                     }
35701                 } else if (!isEP1) {
35702                     loc = edge1.loc;
35703                 } else {
35704                     loc = edge2.loc;
35705                 }
35706
35707                 graph = graph.replace(vertex.move(loc));
35708
35709                 // if zorro happened, reorder nodes..
35710                 if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
35711                     way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
35712                     graph = graph.replace(way1);
35713                 }
35714                 if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
35715                     way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
35716                     graph = graph.replace(way2);
35717                 }
35718
35719                 return graph;
35720             }
35721
35722
35723             function cleanupIntersections(graph) {
35724                 for (var i = 0; i < cache.intersections.length; i++) {
35725                     var obj = cache.intersections[i];
35726                     graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
35727                     graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
35728                     graph = unZorroIntersection(obj, graph);
35729                     graph = removeDuplicateVertices(obj.movedId, graph);
35730                     graph = removeDuplicateVertices(obj.unmovedId, graph);
35731                 }
35732
35733                 return graph;
35734             }
35735
35736
35737             // check if moving way endpoint can cross an unmoved way, if so limit delta..
35738             function limitDelta(graph) {
35739                 function moveNode(loc) {
35740                     return geoVecAdd(projection(loc), _delta);
35741                 }
35742
35743                 for (var i = 0; i < cache.intersections.length; i++) {
35744                     var obj = cache.intersections[i];
35745
35746                     // Don't limit movement if this is vertex joins 2 endpoints..
35747                     if (obj.movedIsEP && obj.unmovedIsEP) continue;
35748                     // Don't limit movement if this vertex is not an endpoint anyway..
35749                     if (!obj.movedIsEP) continue;
35750
35751                     var node = graph.entity(obj.nodeId);
35752                     var start = projection(node.loc);
35753                     var end = geoVecAdd(start, _delta);
35754                     var movedNodes = graph.childNodes(graph.entity(obj.movedId));
35755                     var movedPath = movedNodes.map(function(n) { return moveNode(n.loc); });
35756                     var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
35757                     var unmovedPath = unmovedNodes.map(function(n) { return projection(n.loc); });
35758                     var hits = geoPathIntersections(movedPath, unmovedPath);
35759
35760                     for (var j = 0; i < hits.length; i++) {
35761                         if (geoVecEqual(hits[j], end)) continue;
35762                         var edge = geoChooseEdge(unmovedNodes, end, projection);
35763                         _delta = geoVecSubtract(projection(edge.loc), start);
35764                     }
35765                 }
35766             }
35767
35768
35769             var action = function(graph) {
35770                 if (_delta[0] === 0 && _delta[1] === 0) return graph;
35771
35772                 setupCache(graph);
35773
35774                 if (cache.intersections.length) {
35775                     limitDelta(graph);
35776                 }
35777
35778                 for (var i = 0; i < cache.nodes.length; i++) {
35779                     var node = graph.entity(cache.nodes[i]);
35780                     var start = projection(node.loc);
35781                     var end = geoVecAdd(start, _delta);
35782                     graph = graph.replace(node.move(projection.invert(end)));
35783                 }
35784
35785                 if (cache.intersections.length) {
35786                     graph = cleanupIntersections(graph);
35787                 }
35788
35789                 return graph;
35790             };
35791
35792
35793             action.delta = function() {
35794                 return _delta;
35795             };
35796
35797
35798             return action;
35799         }
35800
35801         function actionMoveMember(relationId, fromIndex, toIndex) {
35802             return function(graph) {
35803                 return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
35804             };
35805         }
35806
35807         function actionMoveNode(nodeID, toLoc) {
35808
35809             var action = function(graph, t) {
35810                 if (t === null || !isFinite(t)) t = 1;
35811                 t = Math.min(Math.max(+t, 0), 1);
35812
35813                 var node = graph.entity(nodeID);
35814                 return graph.replace(
35815                     node.move(geoVecInterp(node.loc, toLoc, t))
35816                 );
35817             };
35818
35819             action.transitionable = true;
35820
35821             return action;
35822         }
35823
35824         function actionNoop() {
35825             return function(graph) {
35826                 return graph;
35827             };
35828         }
35829
35830         function actionOrthogonalize(wayID, projection, vertexID, degThresh, ep) {
35831             var epsilon = ep || 1e-4;
35832             var threshold = degThresh || 13;  // degrees within right or straight to alter
35833
35834             // We test normalized dot products so we can compare as cos(angle)
35835             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
35836             var upperThreshold = Math.cos(threshold * Math.PI / 180);
35837
35838
35839             var action = function(graph, t) {
35840                 if (t === null || !isFinite(t)) t = 1;
35841                 t = Math.min(Math.max(+t, 0), 1);
35842
35843                 var way = graph.entity(wayID);
35844                 way = way.removeNode('');   // sanity check - remove any consecutive duplicates
35845
35846                 if (way.tags.nonsquare) {
35847                     var tags = Object.assign({}, way.tags);
35848                     // since we're squaring, remove indication that this is physically unsquare
35849                     delete tags.nonsquare;
35850                     way = way.update({tags: tags});
35851                 }
35852
35853                 graph = graph.replace(way);
35854
35855                 var isClosed = way.isClosed();
35856                 var nodes = graph.childNodes(way).slice();  // shallow copy
35857                 if (isClosed) nodes.pop();
35858
35859                 if (vertexID !== undefined) {
35860                     nodes = nodeSubset(nodes, vertexID, isClosed);
35861                     if (nodes.length !== 3) return graph;
35862                 }
35863
35864                 // note: all geometry functions here use the unclosed node/point/coord list
35865
35866                 var nodeCount = {};
35867                 var points = [];
35868                 var corner = { i: 0, dotp: 1 };
35869                 var node, point, loc, score, motions, i, j;
35870
35871                 for (i = 0; i < nodes.length; i++) {
35872                     node = nodes[i];
35873                     nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
35874                     points.push({ id: node.id, coord: projection(node.loc) });
35875                 }
35876
35877
35878                 if (points.length === 3) {   // move only one vertex for right triangle
35879                     for (i = 0; i < 1000; i++) {
35880                         motions = points.map(calcMotion);
35881
35882                         points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
35883                         score = corner.dotp;
35884                         if (score < epsilon) {
35885                             break;
35886                         }
35887                     }
35888
35889                     node = graph.entity(nodes[corner.i].id);
35890                     loc = projection.invert(points[corner.i].coord);
35891                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
35892
35893                 } else {
35894                     var straights = [];
35895                     var simplified = [];
35896
35897                     // Remove points from nearly straight sections..
35898                     // This produces a simplified shape to orthogonalize
35899                     for (i = 0; i < points.length; i++) {
35900                         point = points[i];
35901                         var dotp = 0;
35902                         if (isClosed || (i > 0 && i < points.length - 1)) {
35903                             var a = points[(i - 1 + points.length) % points.length];
35904                             var b = points[(i + 1) % points.length];
35905                             dotp = Math.abs(geoOrthoNormalizedDotProduct(a.coord, b.coord, point.coord));
35906                         }
35907
35908                         if (dotp > upperThreshold) {
35909                             straights.push(point);
35910                         } else {
35911                             simplified.push(point);
35912                         }
35913                     }
35914
35915                     // Orthogonalize the simplified shape
35916                     var bestPoints = clonePoints(simplified);
35917                     var originalPoints = clonePoints(simplified);
35918
35919                     score = Infinity;
35920                     for (i = 0; i < 1000; i++) {
35921                         motions = simplified.map(calcMotion);
35922
35923                         for (j = 0; j < motions.length; j++) {
35924                             simplified[j].coord = geoVecAdd(simplified[j].coord, motions[j]);
35925                         }
35926                         var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon, threshold);
35927                         if (newScore < score) {
35928                             bestPoints = clonePoints(simplified);
35929                             score = newScore;
35930                         }
35931                         if (score < epsilon) {
35932                             break;
35933                         }
35934                     }
35935
35936                     var bestCoords = bestPoints.map(function(p) { return p.coord; });
35937                     if (isClosed) bestCoords.push(bestCoords[0]);
35938
35939                     // move the nodes that should move
35940                     for (i = 0; i < bestPoints.length; i++) {
35941                         point = bestPoints[i];
35942                         if (!geoVecEqual(originalPoints[i].coord, point.coord)) {
35943                             node = graph.entity(point.id);
35944                             loc = projection.invert(point.coord);
35945                             graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
35946                         }
35947                     }
35948
35949                     // move the nodes along straight segments
35950                     for (i = 0; i < straights.length; i++) {
35951                         point = straights[i];
35952                         if (nodeCount[point.id] > 1) continue;   // skip self-intersections
35953
35954                         node = graph.entity(point.id);
35955
35956                         if (t === 1 &&
35957                             graph.parentWays(node).length === 1 &&
35958                             graph.parentRelations(node).length === 0 &&
35959                             !node.hasInterestingTags()
35960                         ) {
35961                             // remove uninteresting points..
35962                             graph = actionDeleteNode(node.id)(graph);
35963
35964                         } else {
35965                             // move interesting points to the nearest edge..
35966                             var choice = geoVecProject(point.coord, bestCoords);
35967                             if (choice) {
35968                                 loc = projection.invert(choice.target);
35969                                 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
35970                             }
35971                         }
35972                     }
35973                 }
35974
35975                 return graph;
35976
35977
35978                 function clonePoints(array) {
35979                     return array.map(function(p) {
35980                         return { id: p.id, coord: [p.coord[0], p.coord[1]] };
35981                     });
35982                 }
35983
35984
35985                 function calcMotion(point, i, array) {
35986                     // don't try to move the endpoints of a non-closed way.
35987                     if (!isClosed && (i === 0 || i === array.length - 1)) return [0, 0];
35988                     // don't try to move a node that appears more than once (self intersection)
35989                     if (nodeCount[array[i].id] > 1) return [0, 0];
35990
35991                     var a = array[(i - 1 + array.length) % array.length].coord;
35992                     var origin = point.coord;
35993                     var b = array[(i + 1) % array.length].coord;
35994                     var p = geoVecSubtract(a, origin);
35995                     var q = geoVecSubtract(b, origin);
35996
35997                     var scale = 2 * Math.min(geoVecLength(p), geoVecLength(q));
35998                     p = geoVecNormalize(p);
35999                     q = geoVecNormalize(q);
36000
36001                     var dotp = (p[0] * q[0] + p[1] * q[1]);
36002                     var val = Math.abs(dotp);
36003
36004                     if (val < lowerThreshold) {  // nearly orthogonal
36005                         corner.i = i;
36006                         corner.dotp = val;
36007                         var vec = geoVecNormalize(geoVecAdd(p, q));
36008                         return geoVecScale(vec, 0.1 * dotp * scale);
36009                     }
36010
36011                     return [0, 0];   // do nothing
36012                 }
36013             };
36014
36015
36016             // if we are only orthogonalizing one vertex,
36017             // get that vertex and the previous and next
36018             function nodeSubset(nodes, vertexID, isClosed) {
36019                 var first = isClosed ? 0 : 1;
36020                 var last = isClosed ? nodes.length : nodes.length - 1;
36021
36022                 for (var i = first; i < last; i++) {
36023                     if (nodes[i].id === vertexID) {
36024                         return [
36025                             nodes[(i - 1 + nodes.length) % nodes.length],
36026                             nodes[i],
36027                             nodes[(i + 1) % nodes.length]
36028                         ];
36029                     }
36030                 }
36031
36032                 return [];
36033             }
36034
36035
36036             action.disabled = function(graph) {
36037                 var way = graph.entity(wayID);
36038                 way = way.removeNode('');  // sanity check - remove any consecutive duplicates
36039                 graph = graph.replace(way);
36040
36041                 var isClosed = way.isClosed();
36042                 var nodes = graph.childNodes(way).slice();  // shallow copy
36043                 if (isClosed) nodes.pop();
36044
36045                 var allowStraightAngles = false;
36046                 if (vertexID !== undefined) {
36047                     allowStraightAngles = true;
36048                     nodes = nodeSubset(nodes, vertexID, isClosed);
36049                     if (nodes.length !== 3) return 'end_vertex';
36050                 }
36051
36052                 var coords = nodes.map(function(n) { return projection(n.loc); });
36053                 var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles);
36054
36055                 if (score === null) {
36056                     return 'not_squarish';
36057                 } else if (score === 0) {
36058                     return 'square_enough';
36059                 } else {
36060                     return false;
36061                 }
36062             };
36063
36064
36065             action.transitionable = true;
36066
36067             return action;
36068         }
36069
36070         // `actionRestrictTurn` creates a turn restriction relation.
36071         //
36072         // `turn` must be an `osmTurn` object
36073         // see osm/intersection.js, pathToTurn()
36074         //
36075         // This specifies a restriction of type `restriction` when traveling from
36076         // `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`.
36077         // (The action does not check that these entities form a valid intersection.)
36078         //
36079         // From, to, and via ways should be split before calling this action.
36080         // (old versions of the code would split the ways here, but we no longer do it)
36081         //
36082         // For testing convenience, accepts a restrictionID to assign to the new
36083         // relation. Normally, this will be undefined and the relation will
36084         // automatically be assigned a new ID.
36085         //
36086         function actionRestrictTurn(turn, restrictionType, restrictionID) {
36087
36088             return function(graph) {
36089                 var fromWay = graph.entity(turn.from.way);
36090                 var toWay = graph.entity(turn.to.way);
36091                 var viaNode = turn.via.node && graph.entity(turn.via.node);
36092                 var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); });
36093                 var members = [];
36094
36095                 members.push({ id: fromWay.id, type: 'way',  role: 'from' });
36096
36097                 if (viaNode) {
36098                     members.push({ id: viaNode.id,  type: 'node', role: 'via' });
36099                 } else if (viaWays) {
36100                     viaWays.forEach(function(viaWay) {
36101                         members.push({ id: viaWay.id,  type: 'way', role: 'via' });
36102                     });
36103                 }
36104
36105                 members.push({ id: toWay.id, type: 'way',  role: 'to' });
36106
36107                 return graph.replace(osmRelation({
36108                     id: restrictionID,
36109                     tags: {
36110                         type: 'restriction',
36111                         restriction: restrictionType
36112                     },
36113                     members: members
36114                 }));
36115             };
36116         }
36117
36118         function actionRevert(id) {
36119             var action = function(graph) {
36120                 var entity = graph.hasEntity(id),
36121                     base = graph.base().entities[id];
36122
36123                 if (entity && !base) {    // entity will be removed..
36124                     if (entity.type === 'node') {
36125                         graph.parentWays(entity)
36126                             .forEach(function(parent) {
36127                                 parent = parent.removeNode(id);
36128                                 graph = graph.replace(parent);
36129
36130                                 if (parent.isDegenerate()) {
36131                                     graph = actionDeleteWay(parent.id)(graph);
36132                                 }
36133                             });
36134                     }
36135
36136                     graph.parentRelations(entity)
36137                         .forEach(function(parent) {
36138                             parent = parent.removeMembersWithID(id);
36139                             graph = graph.replace(parent);
36140
36141                             if (parent.isDegenerate()) {
36142                                 graph = actionDeleteRelation(parent.id)(graph);
36143                             }
36144                         });
36145                 }
36146
36147                 return graph.revert(id);
36148             };
36149
36150             return action;
36151         }
36152
36153         function actionRotate(rotateIds, pivot, angle, projection) {
36154
36155             var action = function(graph) {
36156                 return graph.update(function(graph) {
36157                     utilGetAllNodes(rotateIds, graph).forEach(function(node) {
36158                         var point = geoRotate([projection(node.loc)], angle, pivot)[0];
36159                         graph = graph.replace(node.move(projection.invert(point)));
36160                     });
36161                 });
36162             };
36163
36164             return action;
36165         }
36166
36167         /* Align nodes along their common axis */
36168         function actionStraightenNodes(nodeIDs, projection) {
36169
36170             function positionAlongWay(a, o, b) {
36171                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
36172             }
36173
36174
36175             var action = function(graph, t) {
36176                 if (t === null || !isFinite(t)) t = 1;
36177                 t = Math.min(Math.max(+t, 0), 1);
36178
36179                 var nodes = nodeIDs.map(function(id) { return graph.entity(id); });
36180                 var points = nodes.map(function(n) { return projection(n.loc); });
36181                 var ssr = geoGetSmallestSurroundingRectangle(points);
36182
36183                 // Choose line pq = axis of symmetry.
36184                 // The shape's surrounding rectangle has 2 axes of symmetry.
36185                 // Snap points to the long axis
36186                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
36187                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
36188                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
36189                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
36190                 var p, q;
36191
36192                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
36193                 if (isLong) {
36194                     p = p1;
36195                     q = q1;
36196                 } else {
36197                     p = p2;
36198                     q = q2;
36199                 }
36200
36201                 // Move points onto line pq
36202                 for (var i = 0; i < points.length; i++) {
36203                     var node = nodes[i];
36204                     var point = points[i];
36205                     var u = positionAlongWay(point, p, q);
36206                     var point2 = geoVecInterp(p, q, u);
36207                     var loc2 = projection.invert(point2);
36208                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
36209                 }
36210
36211                 return graph;
36212             };
36213
36214
36215             action.disabled = function() {
36216                 return false;
36217             };
36218
36219
36220             action.transitionable = true;
36221
36222
36223             return action;
36224         }
36225
36226         /*
36227          * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as
36228          */
36229         function actionStraightenWay(selectedIDs, projection) {
36230
36231             function positionAlongWay(a, o, b) {
36232                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
36233             }
36234
36235             // Return all selected ways as a continuous, ordered array of nodes
36236             function allNodes(graph) {
36237                 var nodes = [];
36238                 var startNodes = [];
36239                 var endNodes = [];
36240                 var remainingWays = [];
36241                 var selectedWays = selectedIDs.filter(function(w) {
36242                     return graph.entity(w).type === 'way';
36243                 });
36244                 var selectedNodes = selectedIDs.filter(function(n) {
36245                     return graph.entity(n).type === 'node';
36246                 });
36247
36248                 for (var i = 0; i < selectedWays.length; i++) {
36249                     var way = graph.entity(selectedWays[i]);
36250                     nodes = way.nodes.slice(0);
36251                     remainingWays.push(nodes);
36252                     startNodes.push(nodes[0]);
36253                     endNodes.push(nodes[nodes.length-1]);
36254                 }
36255
36256                 // Remove duplicate end/startNodes (duplicate nodes cannot be at the line end,
36257                 //   and need to be removed so currNode difference calculation below works)
36258                 // i.e. ["n-1", "n-1", "n-2"] => ["n-2"]
36259                 startNodes = startNodes.filter(function(n) {
36260                     return startNodes.indexOf(n) === startNodes.lastIndexOf(n);
36261                 });
36262                 endNodes = endNodes.filter(function(n) {
36263                     return endNodes.indexOf(n) === endNodes.lastIndexOf(n);
36264                 });
36265
36266                 // Choose the initial endpoint to start from
36267                 var currNode = utilArrayDifference(startNodes, endNodes)
36268                     .concat(utilArrayDifference(endNodes, startNodes))[0];
36269                 var nextWay = [];
36270                 nodes = [];
36271
36272                 // Create nested function outside of loop to avoid "function in loop" lint error
36273                 var getNextWay = function(currNode, remainingWays) {
36274                     return remainingWays.filter(function(way) {
36275                         return way[0] === currNode || way[way.length-1] === currNode;
36276                     })[0];
36277                 };
36278
36279                 // Add nodes to end of nodes array, until all ways are added
36280                 while (remainingWays.length) {
36281                     nextWay = getNextWay(currNode, remainingWays);
36282                     remainingWays = utilArrayDifference(remainingWays, [nextWay]);
36283
36284                     if (nextWay[0] !== currNode) {
36285                         nextWay.reverse();
36286                     }
36287                     nodes = nodes.concat(nextWay);
36288                     currNode = nodes[nodes.length-1];
36289                 }
36290
36291                 // If user selected 2 nodes to straighten between, then slice nodes array to those nodes
36292                 if (selectedNodes.length === 2) {
36293                     var startNodeIdx = nodes.indexOf(selectedNodes[0]);
36294                     var endNodeIdx = nodes.indexOf(selectedNodes[1]);
36295                     var sortedStartEnd = [startNodeIdx, endNodeIdx];
36296
36297                     sortedStartEnd.sort(function(a, b) { return a - b; });
36298                     nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1]+1);
36299                 }
36300
36301                 return nodes.map(function(n) { return graph.entity(n); });
36302             }
36303
36304
36305             var action = function(graph, t) {
36306                 if (t === null || !isFinite(t)) t = 1;
36307                 t = Math.min(Math.max(+t, 0), 1);
36308
36309                 var nodes = allNodes(graph);
36310                 var points = nodes.map(function(n) { return projection(n.loc); });
36311                 var startPoint = points[0];
36312                 var endPoint = points[points.length-1];
36313                 var toDelete = [];
36314                 var i;
36315
36316                 for (i = 1; i < points.length-1; i++) {
36317                     var node = nodes[i];
36318                     var point = points[i];
36319
36320                     if (t < 1 || graph.parentWays(node).length > 1 ||
36321                         graph.parentRelations(node).length ||
36322                         node.hasInterestingTags()
36323                     ) {
36324                         var u = positionAlongWay(point, startPoint, endPoint);
36325                         var p = geoVecInterp(startPoint, endPoint, u);
36326                         var loc2 = projection.invert(p);
36327                         graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
36328
36329                     } else {
36330                         // safe to delete
36331                         if (toDelete.indexOf(node) === -1) {
36332                             toDelete.push(node);
36333                         }
36334                     }
36335                 }
36336
36337                 for (i = 0; i < toDelete.length; i++) {
36338                     graph = actionDeleteNode(toDelete[i].id)(graph);
36339                 }
36340
36341                 return graph;
36342             };
36343
36344
36345             action.disabled = function(graph) {
36346                 // check way isn't too bendy
36347                 var nodes = allNodes(graph);
36348                 var points = nodes.map(function(n) { return projection(n.loc); });
36349                 var startPoint = points[0];
36350                 var endPoint = points[points.length-1];
36351                 var threshold = 0.2 * geoVecLength(startPoint, endPoint);
36352                 var i;
36353
36354                 if (threshold === 0) {
36355                     return 'too_bendy';
36356                 }
36357
36358                 for (i = 1; i < points.length - 1; i++) {
36359                     var point = points[i];
36360                     var u = positionAlongWay(point, startPoint, endPoint);
36361                     var p = geoVecInterp(startPoint, endPoint, u);
36362                     var dist = geoVecLength(p, point);
36363
36364                     // to bendy if point is off by 20% of total start/end distance in projected space
36365                     if (isNaN(dist) || dist > threshold) {
36366                         return 'too_bendy';
36367                     }
36368                 }
36369             };
36370
36371             action.transitionable = true;
36372
36373
36374             return action;
36375         }
36376
36377         // `actionUnrestrictTurn` deletes a turn restriction relation.
36378         //
36379         // `turn` must be an `osmTurn` object with a `restrictionID` property.
36380         // see osm/intersection.js, pathToTurn()
36381         //
36382         function actionUnrestrictTurn(turn) {
36383             return function(graph) {
36384                 return actionDeleteRelation(turn.restrictionID)(graph);
36385             };
36386         }
36387
36388         /* Reflect the given area around its axis of symmetry */
36389         function actionReflect(reflectIds, projection) {
36390             var _useLongAxis = true;
36391
36392
36393             var action = function(graph, t) {
36394                 if (t === null || !isFinite(t)) t = 1;
36395                 t = Math.min(Math.max(+t, 0), 1);
36396
36397                 var nodes = utilGetAllNodes(reflectIds, graph);
36398                 var points = nodes.map(function(n) { return projection(n.loc); });
36399                 var ssr = geoGetSmallestSurroundingRectangle(points);
36400
36401                 // Choose line pq = axis of symmetry.
36402                 // The shape's surrounding rectangle has 2 axes of symmetry.
36403                 // Reflect across the longer axis by default.
36404                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
36405                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
36406                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
36407                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
36408                 var p, q;
36409
36410                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
36411                 if ((_useLongAxis && isLong) || (!_useLongAxis && !isLong)) {
36412                     p = p1;
36413                     q = q1;
36414                 } else {
36415                     p = p2;
36416                     q = q2;
36417                 }
36418
36419                 // reflect c across pq
36420                 // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line
36421                 var dx = q[0] - p[0];
36422                 var dy = q[1] - p[1];
36423                 var a = (dx * dx - dy * dy) / (dx * dx + dy * dy);
36424                 var b = 2 * dx * dy / (dx * dx + dy * dy);
36425                 for (var i = 0; i < nodes.length; i++) {
36426                     var node = nodes[i];
36427                     var c = projection(node.loc);
36428                     var c2 = [
36429                         a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
36430                         b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
36431                     ];
36432                     var loc2 = projection.invert(c2);
36433                     node = node.move(geoVecInterp(node.loc, loc2, t));
36434                     graph = graph.replace(node);
36435                 }
36436
36437                 return graph;
36438             };
36439
36440
36441             action.useLongAxis = function(val) {
36442                 if (!arguments.length) return _useLongAxis;
36443                 _useLongAxis = val;
36444                 return action;
36445             };
36446
36447
36448             action.transitionable = true;
36449
36450
36451             return action;
36452         }
36453
36454         function actionUpgradeTags(entityId, oldTags, replaceTags) {
36455
36456             return function(graph) {
36457                 var entity = graph.entity(entityId);
36458                 var tags = Object.assign({}, entity.tags);  // shallow copy
36459                 var transferValue;
36460                 var semiIndex;
36461
36462                 for (var oldTagKey in oldTags) {
36463                     if (oldTags[oldTagKey] === '*') {
36464                         transferValue = tags[oldTagKey];
36465                         delete tags[oldTagKey];
36466                     } else {
36467                         var vals = tags[oldTagKey].split(';').filter(Boolean);
36468                         var oldIndex = vals.indexOf(oldTags[oldTagKey]);
36469                         if (vals.length === 1 || oldIndex === -1) {
36470                             delete tags[oldTagKey];
36471                         } else {
36472                             if (replaceTags && replaceTags[oldTagKey]) {
36473                                 // replacing a value within a semicolon-delimited value, note the index
36474                                 semiIndex = oldIndex;
36475                             }
36476                             vals.splice(oldIndex, 1);
36477                             tags[oldTagKey] = vals.join(';');
36478                         }
36479                     }
36480                 }
36481
36482                 if (replaceTags) {
36483                     for (var replaceKey in replaceTags) {
36484                         var replaceValue = replaceTags[replaceKey];
36485                         if (replaceValue === '*') {
36486                             if (tags[replaceKey] && tags[replaceKey] !== 'no') {
36487                                 // allow any pre-existing value except `no` (troll tag)
36488                                 continue;
36489                             } else {
36490                                 // otherwise assume `yes` is okay
36491                                 tags[replaceKey] = 'yes';
36492                             }
36493                         } else if (replaceValue === '$1') {
36494                             tags[replaceKey] = transferValue;
36495                         } else {
36496                             if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== undefined) {
36497                                 // don't override preexisting values
36498                                 var existingVals = tags[replaceKey].split(';').filter(Boolean);
36499                                 if (existingVals.indexOf(replaceValue) === -1) {
36500                                     existingVals.splice(semiIndex, 0, replaceValue);
36501                                     tags[replaceKey] = existingVals.join(';');
36502                                 }
36503                             } else {
36504                                 tags[replaceKey] = replaceValue;
36505                             }
36506                         }
36507                     }
36508                 }
36509
36510                 return graph.replace(entity.update({ tags: tags }));
36511             };
36512         }
36513
36514         function behaviorEdit(context) {
36515
36516             function behavior() {
36517                 context.map()
36518                     .minzoom(context.minEditableZoom());
36519             }
36520
36521
36522             behavior.off = function() {
36523                 context.map()
36524                     .minzoom(0);
36525             };
36526
36527             return behavior;
36528         }
36529
36530         /*
36531            The hover behavior adds the `.hover` class on mouseover to all elements to which
36532            the identical datum is bound, and removes it on mouseout.
36533
36534            The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
36535            representation may consist of several elements scattered throughout the DOM hierarchy.
36536            Only one of these elements can have the :hover pseudo-class, but all of them will
36537            have the .hover class.
36538          */
36539         function behaviorHover(context) {
36540             var dispatch$1 = dispatch('hover');
36541             var _selection = d3_select(null);
36542             var _newNodeId = null;
36543             var _initialNodeID = null;
36544             var _buttonDown;
36545             var _altDisables;
36546             var _ignoreVertex;
36547             var _target;
36548
36549
36550             function keydown() {
36551                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
36552                     _selection.selectAll('.hover')
36553                         .classed('hover-suppressed', true)
36554                         .classed('hover', false);
36555
36556                     _selection
36557                         .classed('hover-disabled', true);
36558
36559                     dispatch$1.call('hover', this, null);
36560                 }
36561             }
36562
36563
36564             function keyup() {
36565                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
36566                     _selection.selectAll('.hover-suppressed')
36567                         .classed('hover-suppressed', false)
36568                         .classed('hover', true);
36569
36570                     _selection
36571                         .classed('hover-disabled', false);
36572
36573                     dispatch$1.call('hover', this, _target ? _target.id : null);
36574                 }
36575             }
36576
36577
36578             function behavior(selection) {
36579                 _selection = selection;
36580
36581                 if (_initialNodeID) {
36582                     _newNodeId = _initialNodeID;
36583                     _initialNodeID = null;
36584                 } else {
36585                     _newNodeId = null;
36586                 }
36587
36588                 _selection
36589                     .on('mouseover.hover', mouseover)
36590                     .on('mouseout.hover', mouseout)
36591                     .on('mousedown.hover', mousedown);
36592
36593                 d3_select(window)
36594                     .on('keydown.hover', keydown)
36595                     .on('keyup.hover', keyup);
36596
36597
36598                 function mouseover() {
36599                     if (_buttonDown) return;
36600                     var target = event.target;
36601                     enter(target ? target.__data__ : null);
36602                 }
36603
36604
36605                 function mouseout() {
36606                     if (_buttonDown) return;
36607                     var target = event.relatedTarget;
36608                     enter(target ? target.__data__ : null);
36609                 }
36610
36611
36612                 function mousedown() {
36613                     _buttonDown = true;
36614                     d3_select(window)
36615                         .on('mouseup.hover', mouseup, true);
36616                 }
36617
36618
36619                 function mouseup() {
36620                     _buttonDown = false;
36621                     d3_select(window)
36622                         .on('mouseup.hover', null, true);
36623                 }
36624
36625                 function allowsVertex(d) {
36626                     return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
36627                 }
36628
36629                 function modeAllowsHover(target) {
36630                     var mode = context.mode();
36631                     if (mode.id === 'add-point') {
36632                         return mode.preset.matchGeometry('vertex') ||
36633                             (target.type !== 'way' && target.geometry(context.graph()) !== 'vertex');
36634                     }
36635                     return true;
36636                 }
36637
36638                 function enter(datum) {
36639                     if (datum === _target) return;
36640                     _target = datum;
36641
36642                     _selection.selectAll('.hover')
36643                         .classed('hover', false);
36644                     _selection.selectAll('.hover-suppressed')
36645                         .classed('hover-suppressed', false);
36646
36647                     // What are we hovering over?
36648                     var entity, selector;
36649                     if (datum && datum.__featurehash__) {
36650                         entity = datum;
36651                         selector = '.data' + datum.__featurehash__;
36652
36653                     } else if (datum instanceof qaError) {
36654                         entity = datum;
36655                         selector = '.' + datum.service + '.error_id-' + datum.id;
36656
36657                     } else if (datum instanceof osmNote) {
36658                         entity = datum;
36659                         selector = '.note-' + datum.id;
36660
36661                     } else if (datum instanceof osmEntity) {
36662                         entity = datum;
36663                         selector = '.' + entity.id;
36664                         if (entity.type === 'relation') {
36665                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
36666                         }
36667                     } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity)) {
36668                         entity = datum.properties.entity;
36669                         selector = '.' + entity.id;
36670                         if (entity.type === 'relation') {
36671                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
36672                         }
36673                     }
36674
36675                     var mode = context.mode();
36676
36677                     // Update hover state and dispatch event
36678                     if (entity && entity.id !== _newNodeId) {
36679                         // If drawing a way, don't hover on a node that was just placed. #3974
36680
36681                         if ((mode.id === 'draw-line' || mode.id === 'draw-area') && !_newNodeId && entity.type === 'node') {
36682                             _newNodeId = entity.id;
36683                             return;
36684                         }
36685
36686                         var suppressed = (_altDisables && event && event.altKey) ||
36687                             (entity.type === 'node' && _ignoreVertex && !allowsVertex(entity)) ||
36688                             !modeAllowsHover(entity);
36689                         _selection.selectAll(selector)
36690                             .classed(suppressed ? 'hover-suppressed' : 'hover', true);
36691
36692                         dispatch$1.call('hover', this, !suppressed && entity);
36693
36694                     } else {
36695                         dispatch$1.call('hover', this, null);
36696                     }
36697                 }
36698             }
36699
36700
36701             behavior.off = function(selection) {
36702                 selection.selectAll('.hover')
36703                     .classed('hover', false);
36704                 selection.selectAll('.hover-suppressed')
36705                     .classed('hover-suppressed', false);
36706                 selection
36707                     .classed('hover-disabled', false);
36708
36709                 selection
36710                     .on('mouseover.hover', null)
36711                     .on('mouseout.hover', null)
36712                     .on('mousedown.hover', null);
36713
36714                 d3_select(window)
36715                     .on('keydown.hover', null)
36716                     .on('keyup.hover', null);
36717             };
36718
36719
36720             behavior.altDisables = function(val) {
36721                 if (!arguments.length) return _altDisables;
36722                 _altDisables = val;
36723                 return behavior;
36724             };
36725
36726             behavior.ignoreVertex = function(val) {
36727                 if (!arguments.length) return _ignoreVertex;
36728                 _ignoreVertex = val;
36729                 return behavior;
36730             };
36731
36732             behavior.initialNodeID = function(nodeId) {
36733                 _initialNodeID = nodeId;
36734                 return behavior;
36735             };
36736
36737             return utilRebind(behavior, dispatch$1, 'on');
36738         }
36739
36740         function refresh(selection, node) {
36741             var cr = node.getBoundingClientRect();
36742             var prop = [cr.width, cr.height];
36743             selection.property('__dimensions__', prop);
36744             return prop;
36745         }
36746
36747         function utilGetDimensions(selection, force) {
36748             if (!selection || selection.empty()) {
36749                 return [0, 0];
36750             }
36751             var node = selection.node(),
36752                 cached = selection.property('__dimensions__');
36753             return (!cached || force) ? refresh(selection, node) : cached;
36754         }
36755
36756
36757         function utilSetDimensions(selection, dimensions) {
36758             if (!selection || selection.empty()) {
36759                 return selection;
36760             }
36761             var node = selection.node();
36762             if (dimensions === null) {
36763                 refresh(selection, node);
36764                 return selection;
36765             }
36766             return selection
36767                 .property('__dimensions__', [dimensions[0], dimensions[1]])
36768                 .attr('width', dimensions[0])
36769                 .attr('height', dimensions[1]);
36770         }
36771
36772         function behaviorTail() {
36773             var container;
36774             var xmargin = 25;
36775             var tooltipSize = [0, 0];
36776             var selectionSize = [0, 0];
36777             var _text;
36778
36779
36780             function behavior(selection) {
36781                 if (!_text) return;
36782
36783                 d3_select(window)
36784                     .on('resize.tail', function() { selectionSize = utilGetDimensions(selection); });
36785
36786                 container = d3_select(document.body)
36787                     .append('div')
36788                     .style('display', 'none')
36789                     .attr('class', 'tail tooltip-inner');
36790
36791                 container.append('div')
36792                     .text(_text);
36793
36794                 selection
36795                     .on('mousemove.tail', mousemove)
36796                     .on('mouseenter.tail', mouseenter)
36797                     .on('mouseleave.tail', mouseleave);
36798
36799                 container
36800                     .on('mousemove.tail', mousemove);
36801
36802                 tooltipSize = utilGetDimensions(container);
36803                 selectionSize = utilGetDimensions(selection);
36804
36805
36806                 function show() {
36807                     container.style('display', 'block');
36808                     tooltipSize = utilGetDimensions(container);
36809                 }
36810
36811
36812                 function mousemove() {
36813                     if (container.style('display') === 'none') show();
36814                     var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
36815                         -tooltipSize[0] - xmargin : xmargin;
36816                     container.classed('left', xoffset > 0);
36817                     utilSetTransform(container, event.clientX + xoffset, event.clientY);
36818                 }
36819
36820
36821                 function mouseleave() {
36822                     if (event.relatedTarget !== container.node()) {
36823                         container.style('display', 'none');
36824                     }
36825                 }
36826
36827
36828                 function mouseenter() {
36829                     if (event.relatedTarget !== container.node()) {
36830                         show();
36831                     }
36832                 }
36833             }
36834
36835
36836             behavior.off = function(selection) {
36837                 if (!_text) return;
36838
36839                 container
36840                     .on('mousemove.tail', null)
36841                     .remove();
36842
36843                 selection
36844                     .on('mousemove.tail', null)
36845                     .on('mouseenter.tail', null)
36846                     .on('mouseleave.tail', null);
36847
36848                 d3_select(window)
36849                     .on('resize.tail', null);
36850             };
36851
36852
36853             behavior.text = function(val) {
36854                 if (!arguments.length) return _text;
36855                 _text = val;
36856                 return behavior;
36857             };
36858
36859
36860             return behavior;
36861         }
36862
36863         var _usedTails = {};
36864         var _disableSpace = false;
36865         var _lastSpace = null;
36866
36867
36868         function behaviorDraw(context) {
36869             var dispatch$1 = dispatch(
36870                 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
36871             );
36872
36873             var keybinding = utilKeybinding('draw');
36874
36875             var _hover = behaviorHover(context).altDisables(true).ignoreVertex(true)
36876                 .on('hover', context.ui().sidebar.hover);
36877             var tail = behaviorTail();
36878             var edit = behaviorEdit(context);
36879
36880             var closeTolerance = 4;
36881             var tolerance = 12;
36882             var _mouseLeave = false;
36883             var _lastMouse = null;
36884
36885
36886             // related code
36887             // - `mode/drag_node.js` `datum()`
36888             function datum() {
36889                 var mode = context.mode();
36890                 var isNote = mode && (mode.id.indexOf('note') !== -1);
36891                 if (event.altKey || isNote) return {};
36892
36893                 var element;
36894                 if (event.type === 'keydown') {
36895                     element = _lastMouse && _lastMouse.target;
36896                 } else {
36897                     element = event.target;
36898                 }
36899
36900                 // When drawing, snap only to touch targets..
36901                 // (this excludes area fills and active drawing elements)
36902                 var d = element.__data__;
36903                 return (d && d.properties && d.properties.target) ? d : {};
36904             }
36905
36906
36907             function mousedown() {
36908
36909                 function point() {
36910                     var p = context.container().node();
36911                     return touchId !== null ? d3_touches(p).filter(function(p) {
36912                         return p.identifier === touchId;
36913                     })[0] : d3_mouse(p);
36914                 }
36915
36916                 var element = d3_select(this);
36917                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
36918                 var t1 = +new Date();
36919                 var p1 = point();
36920
36921                 element.on('mousemove.draw', null);
36922
36923                 d3_select(window).on('mouseup.draw', function() {
36924                     var t2 = +new Date();
36925                     var p2 = point();
36926                     var dist = geoVecLength(p1, p2);
36927
36928                     element.on('mousemove.draw', mousemove);
36929                     d3_select(window).on('mouseup.draw', null);
36930
36931                     if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
36932                         // Prevent a quick second click
36933                         d3_select(window).on('click.draw-block', function() {
36934                             event.stopPropagation();
36935                         }, true);
36936
36937                         context.map().dblclickEnable(false);
36938
36939                         window.setTimeout(function() {
36940                             context.map().dblclickEnable(true);
36941                             d3_select(window).on('click.draw-block', null);
36942                         }, 500);
36943
36944                         click();
36945                     }
36946                 }, true);
36947             }
36948
36949
36950             function mousemove() {
36951                 _lastMouse = event;
36952                 dispatch$1.call('move', this, datum());
36953             }
36954
36955
36956             function mouseenter() {
36957                 _mouseLeave = false;
36958             }
36959
36960
36961             function mouseleave() {
36962                 _mouseLeave = true;
36963             }
36964
36965             function allowsVertex(d) {
36966                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
36967             }
36968
36969             // related code
36970             // - `mode/drag_node.js`     `doMode()`
36971             // - `behavior/draw.js`      `click()`
36972             // - `behavior/draw_way.js`  `move()`
36973             function click() {
36974                 var d = datum();
36975                 var target = d && d.properties && d.properties.entity;
36976
36977                 var mode = context.mode();
36978
36979                 if (target && target.type === 'node' && allowsVertex(target)) {   // Snap to a node
36980                     dispatch$1.call('clickNode', this, target, d);
36981                     return;
36982
36983                 } else if (target && target.type === 'way' && (mode.id !== 'add-point' || mode.preset.matchGeometry('vertex'))) {   // Snap to a way
36984                     var choice = geoChooseEdge(
36985                         context.childNodes(target), context.mouse(), context.projection, context.activeID()
36986                     );
36987                     if (choice) {
36988                         var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
36989                         dispatch$1.call('clickWay', this, choice.loc, edge, d);
36990                         return;
36991                     }
36992                 } else if (mode.id !== 'add-point' || mode.preset.matchGeometry('point')) {
36993                     dispatch$1.call('click', this, context.map().mouseCoordinates(), d);
36994                 }
36995
36996             }
36997
36998
36999             function space() {
37000                 event.preventDefault();
37001                 event.stopPropagation();
37002
37003                 var currSpace = context.mouse();
37004                 if (_disableSpace && _lastSpace) {
37005                     var dist = geoVecLength(_lastSpace, currSpace);
37006                     if (dist > tolerance) {
37007                         _disableSpace = false;
37008                     }
37009                 }
37010
37011                 if (_disableSpace || _mouseLeave || !_lastMouse) return;
37012
37013                 // user must move mouse or release space bar to allow another click
37014                 _lastSpace = currSpace;
37015                 _disableSpace = true;
37016
37017                 d3_select(window).on('keyup.space-block', function() {
37018                     event.preventDefault();
37019                     event.stopPropagation();
37020                     _disableSpace = false;
37021                     d3_select(window).on('keyup.space-block', null);
37022                 });
37023
37024                 click();
37025             }
37026
37027
37028             function backspace() {
37029                 event.preventDefault();
37030                 dispatch$1.call('undo');
37031             }
37032
37033
37034             function del() {
37035                 event.preventDefault();
37036                 dispatch$1.call('cancel');
37037             }
37038
37039
37040             function ret() {
37041                 event.preventDefault();
37042                 dispatch$1.call('finish');
37043             }
37044
37045
37046             function behavior(selection) {
37047                 context.install(_hover);
37048                 context.install(edit);
37049
37050                 if (!context.inIntro() && !_usedTails[tail.text()]) {
37051                     context.install(tail);
37052                 }
37053
37054                 keybinding
37055                     .on('⌫', backspace)
37056                     .on('⌦', del)
37057                     .on('⎋', ret)
37058                     .on('↩', ret)
37059                     .on('space', space)
37060                     .on('⌥space', space);
37061
37062                 selection
37063                     .on('mouseenter.draw', mouseenter)
37064                     .on('mouseleave.draw', mouseleave)
37065                     .on('mousedown.draw', mousedown)
37066                     .on('mousemove.draw', mousemove);
37067
37068                 d3_select(document)
37069                     .call(keybinding);
37070
37071                 return behavior;
37072             }
37073
37074
37075             behavior.off = function(selection) {
37076                 context.ui().sidebar.hover.cancel();
37077                 context.uninstall(_hover);
37078                 context.uninstall(edit);
37079
37080                 if (!context.inIntro() && !_usedTails[tail.text()]) {
37081                     context.uninstall(tail);
37082                     _usedTails[tail.text()] = true;
37083                 }
37084
37085                 selection
37086                     .on('mouseenter.draw', null)
37087                     .on('mouseleave.draw', null)
37088                     .on('mousedown.draw', null)
37089                     .on('mousemove.draw', null);
37090
37091                 d3_select(window)
37092                     .on('mouseup.draw', null);
37093                     // note: keyup.space-block, click.draw-block should remain
37094
37095                 d3_select(document)
37096                     .call(keybinding.unbind);
37097             };
37098
37099
37100             behavior.tail = function(_) {
37101                 tail.text(_);
37102                 return behavior;
37103             };
37104
37105             behavior.hover = function() {
37106                 return _hover;
37107             };
37108
37109
37110             return utilRebind(behavior, dispatch$1, 'on');
37111         }
37112
37113         function behaviorBreathe() {
37114             var duration = 800;
37115             var steps = 4;
37116             var selector = '.selected.shadow, .selected .shadow';
37117             var _selected = d3_select(null);
37118             var _classed = '';
37119             var _params = {};
37120             var _done = false;
37121             var _timer;
37122
37123
37124             function ratchetyInterpolator(a, b, steps, units) {
37125                 a = parseFloat(a);
37126                 b = parseFloat(b);
37127                 var sample = quantize()
37128                     .domain([0, 1])
37129                     .range(d3_quantize(d3_interpolateNumber(a, b), steps));
37130
37131                 return function(t) {
37132                     return String(sample(t)) + (units || '');
37133                 };
37134             }
37135
37136
37137             function reset(selection) {
37138                 selection
37139                     .style('stroke-opacity', null)
37140                     .style('stroke-width', null)
37141                     .style('fill-opacity', null)
37142                     .style('r', null);
37143             }
37144
37145
37146             function setAnimationParams(transition, fromTo) {
37147                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
37148
37149                 transition
37150                     .styleTween('stroke-opacity', function(d) {
37151                         return ratchetyInterpolator(
37152                             _params[d.id][toFrom].opacity,
37153                             _params[d.id][fromTo].opacity,
37154                             steps
37155                         );
37156                     })
37157                     .styleTween('stroke-width', function(d) {
37158                         return ratchetyInterpolator(
37159                             _params[d.id][toFrom].width,
37160                             _params[d.id][fromTo].width,
37161                             steps,
37162                             'px'
37163                         );
37164                     })
37165                     .styleTween('fill-opacity', function(d) {
37166                         return ratchetyInterpolator(
37167                             _params[d.id][toFrom].opacity,
37168                             _params[d.id][fromTo].opacity,
37169                             steps
37170                         );
37171                     })
37172                     .styleTween('r', function(d) {
37173                         return ratchetyInterpolator(
37174                             _params[d.id][toFrom].width,
37175                             _params[d.id][fromTo].width,
37176                             steps,
37177                             'px'
37178                         );
37179                     });
37180             }
37181
37182
37183             function calcAnimationParams(selection) {
37184                 selection
37185                     .call(reset)
37186                     .each(function(d) {
37187                         var s = d3_select(this);
37188                         var tag = s.node().tagName;
37189                         var p = {'from': {}, 'to': {}};
37190                         var opacity;
37191                         var width;
37192
37193                         // determine base opacity and width
37194                         if (tag === 'circle') {
37195                             opacity = parseFloat(s.style('fill-opacity') || 0.5);
37196                             width = parseFloat(s.style('r') || 15.5);
37197                         } else {
37198                             opacity = parseFloat(s.style('stroke-opacity') || 0.7);
37199                             width = parseFloat(s.style('stroke-width') || 10);
37200                         }
37201
37202                         // calculate from/to interpolation params..
37203                         p.tag = tag;
37204                         p.from.opacity = opacity * 0.6;
37205                         p.to.opacity = opacity * 1.25;
37206                         p.from.width = width * 0.7;
37207                         p.to.width = width * (tag === 'circle' ? 1.5 : 1);
37208                         _params[d.id] = p;
37209                     });
37210             }
37211
37212
37213             function run(surface, fromTo) {
37214                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
37215                 var currSelected = surface.selectAll(selector);
37216                 var currClassed = surface.attr('class');
37217
37218                 if (_done || currSelected.empty()) {
37219                     _selected.call(reset);
37220                     return;
37221                 }
37222
37223                 if (!fastDeepEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
37224                     _selected.call(reset);
37225                     _classed = currClassed;
37226                     _selected = currSelected.call(calcAnimationParams);
37227                 }
37228
37229                 _selected
37230                     .transition()
37231                     .duration(duration)
37232                     .call(setAnimationParams, fromTo)
37233                     .on('end', function() {
37234                         surface.call(run, toFrom);
37235                     });
37236             }
37237
37238
37239             function behavior(surface) {
37240                 _done = false;
37241                 _timer = timer(function() {
37242                     // wait for elements to actually become selected
37243                     if (surface.selectAll(selector).empty()) {
37244                         return false;
37245                     }
37246
37247                     surface.call(run, 'from');
37248                     _timer.stop();
37249                     return true;
37250                 }, 20);
37251             }
37252
37253
37254             behavior.off = function() {
37255                 _done = true;
37256                 if (_timer) {
37257                     _timer.stop();
37258                 }
37259                 _selected
37260                     .interrupt()
37261                     .call(reset);
37262             };
37263
37264
37265             return behavior;
37266         }
37267
37268         // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
37269         // For example, ⌘Z -> Ctrl+Z
37270         var uiCmd = function (code) {
37271             var detected = utilDetect();
37272
37273             if (detected.os === 'mac') {
37274                 return code;
37275             }
37276
37277             if (detected.os === 'win') {
37278                 if (code === '⌘⇧Z') return 'Ctrl+Y';
37279             }
37280
37281             var result = '',
37282                 replacements = {
37283                     '⌘': 'Ctrl',
37284                     '⇧': 'Shift',
37285                     '⌥': 'Alt',
37286                     '⌫': 'Backspace',
37287                     '⌦': 'Delete'
37288                 };
37289
37290             for (var i = 0; i < code.length; i++) {
37291                 if (code[i] in replacements) {
37292                     result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
37293                 } else {
37294                     result += code[i];
37295                 }
37296             }
37297
37298             return result;
37299         };
37300
37301
37302         // return a display-focused string for a given keyboard code
37303         uiCmd.display = function(code) {
37304             if (code.length !== 1) return code;
37305
37306             var detected = utilDetect();
37307             var mac = (detected.os === 'mac');
37308             var replacements = {
37309                 '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd')    : t('shortcuts.key.ctrl'),
37310                 '⇧': mac ? '⇧ ' + t('shortcuts.key.shift')  : t('shortcuts.key.shift'),
37311                 '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'),
37312                 '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl')   : t('shortcuts.key.ctrl'),
37313                 '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'),
37314                 '⌦': mac ? '⌦ ' + t('shortcuts.key.del')    : t('shortcuts.key.del'),
37315                 '↖': mac ? '↖ ' + t('shortcuts.key.pgup')   : t('shortcuts.key.pgup'),
37316                 '↘': mac ? '↘ ' + t('shortcuts.key.pgdn')   : t('shortcuts.key.pgdn'),
37317                 '⇞': mac ? '⇞ ' + t('shortcuts.key.home')   : t('shortcuts.key.home'),
37318                 '⇟': mac ? '⇟ ' + t('shortcuts.key.end')    : t('shortcuts.key.end'),
37319                 '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'),
37320                 '⎋': mac ? '⎋ ' + t('shortcuts.key.esc')    : t('shortcuts.key.esc'),
37321             };
37322
37323             return replacements[code] || code;
37324         };
37325
37326         function behaviorCopy(context) {
37327
37328             function groupEntities(ids, graph) {
37329                 var entities = ids.map(function (id) { return graph.entity(id); });
37330                 return Object.assign(
37331                     { relation: [], way: [], node: [] },
37332                     utilArrayGroupBy(entities, 'type')
37333                 );
37334             }
37335
37336
37337             function getDescendants(id, graph, descendants) {
37338                 var entity = graph.entity(id);
37339                 var children;
37340
37341                 descendants = descendants || {};
37342
37343                 if (entity.type === 'relation') {
37344                     children = entity.members.map(function(m) { return m.id; });
37345                 } else if (entity.type === 'way') {
37346                     children = entity.nodes;
37347                 } else {
37348                     children = [];
37349                 }
37350
37351                 for (var i = 0; i < children.length; i++) {
37352                     if (!descendants[children[i]]) {
37353                         descendants[children[i]] = true;
37354                         descendants = getDescendants(children[i], graph, descendants);
37355                     }
37356                 }
37357
37358                 return descendants;
37359             }
37360
37361
37362             function getSelectionText() {
37363                 return window.getSelection().toString();
37364             }
37365
37366
37367             function doCopy() {
37368                 if (!getSelectionText()) {
37369                     event.preventDefault();
37370                 }
37371
37372                 var graph = context.graph();
37373                 var selected = groupEntities(context.selectedIDs(), graph);
37374                 var canCopy = [];
37375                 var skip = {};
37376                 var entity;
37377                 var i;
37378
37379                 for (i = 0; i < selected.relation.length; i++) {
37380                     entity = selected.relation[i];
37381                     if (!skip[entity.id] && entity.isComplete(graph)) {
37382                         canCopy.push(entity.id);
37383                         skip = getDescendants(entity.id, graph, skip);
37384                     }
37385                 }
37386                 for (i = 0; i < selected.way.length; i++) {
37387                     entity = selected.way[i];
37388                     if (!skip[entity.id]) {
37389                         canCopy.push(entity.id);
37390                         skip = getDescendants(entity.id, graph, skip);
37391                     }
37392                 }
37393                 for (i = 0; i < selected.node.length; i++) {
37394                     entity = selected.node[i];
37395                     if (!skip[entity.id]) {
37396                         canCopy.push(entity.id);
37397                     }
37398                 }
37399
37400                 context.copyIDs(canCopy);
37401             }
37402
37403
37404             function behavior() {
37405                 context.keybinding().on(uiCmd('⌘C'), doCopy);
37406                 return behavior;
37407             }
37408
37409             behavior.off = function() {
37410                 context.keybinding().off(uiCmd('⌘C'));
37411             };
37412
37413
37414             return behavior;
37415         }
37416
37417         var _flashTimer;
37418
37419
37420         function uiFlash() {
37421             var _duration = 2000;
37422             var _iconName = '#iD-icon-no';
37423             var _iconClass = 'disabled';
37424             var _text = '';
37425             var _textClass;
37426
37427
37428             function flash() {
37429                 if (_flashTimer) {
37430                     _flashTimer.stop();
37431                 }
37432
37433                 d3_select('#footer-wrap')
37434                     .attr('class', 'footer-hide');
37435                 d3_select('#flash-wrap')
37436                     .attr('class', 'footer-show');
37437
37438                 var content = d3_select('#flash-wrap').selectAll('.flash-content')
37439                     .data([0]);
37440
37441                 // Enter
37442                 var contentEnter = content.enter()
37443                     .append('div')
37444                     .attr('class', 'flash-content');
37445
37446                 var iconEnter = contentEnter
37447                     .append('svg')
37448                     .attr('class', 'flash-icon')
37449                     .append('g')
37450                     .attr('transform', 'translate(10,10)');
37451
37452                 iconEnter
37453                     .append('circle')
37454                     .attr('r', 9);
37455
37456                 iconEnter
37457                     .append('use')
37458                     .attr('transform', 'translate(-7,-7)')
37459                     .attr('width', '14')
37460                     .attr('height', '14');
37461
37462                 contentEnter
37463                     .append('div')
37464                     .attr('class', 'flash-text');
37465
37466
37467                 // Update
37468                 content = content
37469                     .merge(contentEnter);
37470
37471                 content
37472                     .selectAll('.flash-icon')
37473                     .attr('class', 'flash-icon ' + (_iconClass || ''));
37474
37475                 content
37476                     .selectAll('.flash-icon use')
37477                     .attr('xlink:href', _iconName);
37478
37479                 content
37480                     .selectAll('.flash-text')
37481                     .attr('class', 'flash-text ' + (_textClass || ''))
37482                     .text(_text);
37483
37484
37485                 _flashTimer = d3_timeout(function() {
37486                     _flashTimer = null;
37487                     d3_select('#footer-wrap')
37488                         .attr('class', 'footer-show');
37489                     d3_select('#flash-wrap')
37490                         .attr('class', 'footer-hide');
37491                 }, _duration);
37492
37493                 return content;
37494             }
37495
37496
37497             flash.duration = function(_) {
37498                 if (!arguments.length) return _duration;
37499                 _duration = _;
37500                 return flash;
37501             };
37502
37503             flash.text = function(_) {
37504                 if (!arguments.length) return _text;
37505                 _text = _;
37506                 return flash;
37507             };
37508
37509             flash.textClass = function(_) {
37510                 if (!arguments.length) return _textClass;
37511                 _textClass = _;
37512                 return flash;
37513             };
37514
37515             flash.iconName = function(_) {
37516                 if (!arguments.length) return _iconName;
37517                 _iconName = _;
37518                 return flash;
37519             };
37520
37521             flash.iconClass = function(_) {
37522                 if (!arguments.length) return _iconClass;
37523                 _iconClass = _;
37524                 return flash;
37525             };
37526
37527             return flash;
37528         }
37529
37530         /* Creates a keybinding behavior for an operation */
37531         function behaviorOperation(context) {
37532             var _operation;
37533
37534             function keypress() {
37535                 event.preventDefault();
37536                 var disabled = _operation.disabled();
37537                 var flash;
37538
37539                 if (disabled) {
37540                     flash = uiFlash()
37541                         .duration(4000)
37542                         .iconName('#iD-operation-' + _operation.id)
37543                         .iconClass('operation disabled')
37544                         .text(_operation.tooltip);
37545
37546                     flash();
37547
37548                 } else {
37549                     flash = uiFlash()
37550                         .duration(2000)
37551                         .iconName('#iD-operation-' + _operation.id)
37552                         .iconClass('operation')
37553                         .text(_operation.annotation() || _operation.title);
37554
37555                     flash();
37556                     _operation();
37557                 }
37558             }
37559
37560
37561             function behavior() {
37562                 if (_operation && _operation.available()) {
37563                     context.keybinding()
37564                         .on(_operation.keys, keypress);
37565                 }
37566
37567                 return behavior;
37568             }
37569
37570
37571             behavior.off = function() {
37572                 context.keybinding()
37573                     .off(_operation.keys);
37574             };
37575
37576
37577             behavior.which = function (_) {
37578                 if (!arguments.length) return _operation;
37579                 _operation = _;
37580                 return behavior;
37581             };
37582
37583
37584             return behavior;
37585         }
37586
37587         function operationCircularize(selectedIDs, context) {
37588             var entityID = selectedIDs[0];
37589             var entity = context.entity(entityID);
37590             var extent = entity.extent(context.graph());
37591             var geometry = context.geometry(entityID);
37592             var action = actionCircularize(entityID, context.projection);
37593             var nodes = utilGetAllNodes(selectedIDs, context.graph());
37594             var coords = nodes.map(function(n) { return n.loc; });
37595
37596             var operation = function() {
37597                 context.perform(action, operation.annotation());
37598
37599                 window.setTimeout(function() {
37600                     context.validator().validate();
37601                 }, 300);  // after any transition
37602             };
37603
37604
37605             operation.available = function() {
37606                 return selectedIDs.length === 1 &&
37607                     entity.type === 'way' &&
37608                     new Set(entity.nodes).size > 1;
37609             };
37610
37611
37612             // don't cache this because the visible extent could change
37613             operation.disabled = function() {
37614                 var actionDisabled = action.disabled(context.graph());
37615                 if (actionDisabled) {
37616                     return actionDisabled;
37617                 } else if (extent.percentContainedIn(context.extent()) < 0.8) {
37618                     return 'too_large';
37619                 } else if (someMissing()) {
37620                     return 'not_downloaded';
37621                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37622                     return 'connected_to_hidden';
37623                 }
37624
37625                 return false;
37626
37627
37628                 function someMissing() {
37629                     if (context.inIntro()) return false;
37630                     var osm = context.connection();
37631                     if (osm) {
37632                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37633                         if (missing.length) {
37634                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37635                             return true;
37636                         }
37637                     }
37638                     return false;
37639                 }
37640             };
37641
37642
37643             operation.tooltip = function() {
37644                 var disable = operation.disabled();
37645                 return disable ?
37646                     t('operations.circularize.' + disable) :
37647                     t('operations.circularize.description.' + geometry);
37648             };
37649
37650
37651             operation.annotation = function() {
37652                 return t('operations.circularize.annotation.' + geometry);
37653             };
37654
37655
37656             operation.id = 'circularize';
37657             operation.keys = [t('operations.circularize.key')];
37658             operation.title = t('operations.circularize.title');
37659             operation.behavior = behaviorOperation(context).which(operation);
37660
37661             return operation;
37662         }
37663
37664         function operationDelete(selectedIDs, context) {
37665             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
37666             var action = actionDeleteMultiple(selectedIDs);
37667             var nodes = utilGetAllNodes(selectedIDs, context.graph());
37668             var coords = nodes.map(function(n) { return n.loc; });
37669             var extent = nodes.reduce(function(extent, node) {
37670                 return extent.extend(node.extent(context.graph()));
37671             }, geoExtent());
37672
37673
37674             var operation = function() {
37675                 var nextSelectedID;
37676                 var nextSelectedLoc;
37677
37678                 if (selectedIDs.length === 1) {
37679                     var id = selectedIDs[0];
37680                     var entity = context.entity(id);
37681                     var geometry = context.geometry(id);
37682                     var parents = context.graph().parentWays(entity);
37683                     var parent = parents[0];
37684
37685                     // Select the next closest node in the way.
37686                     if (geometry === 'vertex') {
37687                         var nodes = parent.nodes;
37688                         var i = nodes.indexOf(id);
37689
37690                         if (i === 0) {
37691                             i++;
37692                         } else if (i === nodes.length - 1) {
37693                             i--;
37694                         } else {
37695                             var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc);
37696                             var b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
37697                             i = a < b ? i - 1 : i + 1;
37698                         }
37699
37700                         nextSelectedID = nodes[i];
37701                         nextSelectedLoc = context.entity(nextSelectedID).loc;
37702                     }
37703                 }
37704
37705                 context.perform(action, operation.annotation());
37706                 context.validator().validate();
37707
37708                 if (nextSelectedID && nextSelectedLoc) {
37709                     if (context.hasEntity(nextSelectedID)) {
37710                         context.enter(modeSelect(context, [nextSelectedID]).follow(true));
37711                     } else {
37712                         context.map().centerEase(nextSelectedLoc);
37713                         context.enter(modeBrowse(context));
37714                     }
37715                 } else {
37716                     context.enter(modeBrowse(context));
37717                 }
37718
37719             };
37720
37721
37722             operation.available = function() {
37723                 return true;
37724             };
37725
37726
37727             operation.disabled = function() {
37728                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
37729                     return 'too_large';
37730                 } else if (someMissing()) {
37731                     return 'not_downloaded';
37732                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37733                     return 'connected_to_hidden';
37734                 } else if (selectedIDs.some(protectedMember)) {
37735                     return 'part_of_relation';
37736                 } else if (selectedIDs.some(incompleteRelation)) {
37737                     return 'incomplete_relation';
37738                 } else if (selectedIDs.some(hasWikidataTag)) {
37739                     return 'has_wikidata_tag';
37740                 }
37741
37742                 return false;
37743
37744
37745                 function someMissing() {
37746                     if (context.inIntro()) return false;
37747                     var osm = context.connection();
37748                     if (osm) {
37749                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37750                         if (missing.length) {
37751                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37752                             return true;
37753                         }
37754                     }
37755                     return false;
37756                 }
37757
37758                 function hasWikidataTag(id) {
37759                     var entity = context.entity(id);
37760                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
37761                 }
37762
37763                 function incompleteRelation(id) {
37764                     var entity = context.entity(id);
37765                     return entity.type === 'relation' && !entity.isComplete(context.graph());
37766                 }
37767
37768                 function protectedMember(id) {
37769                     var entity = context.entity(id);
37770                     if (entity.type !== 'way') return false;
37771
37772                     var parents = context.graph().parentRelations(entity);
37773                     for (var i = 0; i < parents.length; i++) {
37774                         var parent = parents[i];
37775                         var type = parent.tags.type;
37776                         var role = parent.memberById(id).role || 'outer';
37777                         if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
37778                             return true;
37779                         }
37780                     }
37781                     return false;
37782                 }
37783             };
37784
37785
37786             operation.tooltip = function() {
37787                 var disable = operation.disabled();
37788                 return disable ?
37789                     t('operations.delete.' + disable + '.' + multi) :
37790                     t('operations.delete.description' + '.' + multi);
37791             };
37792
37793
37794             operation.annotation = function() {
37795                 return selectedIDs.length === 1 ?
37796                     t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
37797                     t('operations.delete.annotation.multiple', { n: selectedIDs.length });
37798             };
37799
37800
37801             operation.id = 'delete';
37802             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
37803             operation.title = t('operations.delete.title');
37804             operation.behavior = behaviorOperation(context).which(operation);
37805
37806             return operation;
37807         }
37808
37809         function operationOrthogonalize(selectedIDs, context) {
37810             var _entityID;
37811             var _entity;
37812             var _geometry;
37813             var action = chooseAction();
37814             var nodes = utilGetAllNodes(selectedIDs, context.graph());
37815             var coords = nodes.map(function(n) { return n.loc; });
37816
37817
37818             function chooseAction() {
37819                 if (selectedIDs.length !== 1) return null;
37820
37821                 _entityID = selectedIDs[0];
37822                 _entity = context.entity(_entityID);
37823                 _geometry = context.geometry(_entityID);
37824
37825                 // square a line/area
37826                 if (_entity.type === 'way' && new Set(_entity.nodes).size > 2 ) {
37827                     return actionOrthogonalize(_entityID, context.projection);
37828
37829                 // square a single vertex
37830                 } else if (_geometry === 'vertex') {
37831                     var graph = context.graph();
37832                     var parents = graph.parentWays(_entity);
37833                     if (parents.length === 1) {
37834                         var way = parents[0];
37835                         if (way.nodes.indexOf(_entityID) !== -1) {
37836                             return actionOrthogonalize(way.id, context.projection, _entityID);
37837                         }
37838                     }
37839                 }
37840
37841                 return null;
37842             }
37843
37844
37845             var operation = function() {
37846                 if (!action) return;
37847
37848                 context.perform(action, operation.annotation());
37849
37850                 window.setTimeout(function() {
37851                     context.validator().validate();
37852                 }, 300);  // after any transition
37853             };
37854
37855
37856             operation.available = function() {
37857                 return Boolean(action);
37858             };
37859
37860
37861             // don't cache this because the visible extent could change
37862             operation.disabled = function() {
37863                 if (!action) return '';
37864
37865                 var actionDisabled = action.disabled(context.graph());
37866                 if (actionDisabled) {
37867                     return actionDisabled;
37868                 } else if (_geometry !== 'vertex' &&
37869                            _entity.extent(context.graph()).percentContainedIn(context.extent()) < 0.8) {
37870                     return 'too_large';
37871                 } else if (someMissing()) {
37872                     return 'not_downloaded';
37873                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37874                     return 'connected_to_hidden';
37875                 }
37876
37877                 return false;
37878
37879
37880                 function someMissing() {
37881                     if (context.inIntro()) return false;
37882                     var osm = context.connection();
37883                     if (osm) {
37884                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37885                         if (missing.length) {
37886                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37887                             return true;
37888                         }
37889                     }
37890                     return false;
37891                 }
37892             };
37893
37894
37895             operation.tooltip = function() {
37896                 var disable = operation.disabled();
37897                 return disable ?
37898                     t('operations.orthogonalize.' + disable) :
37899                     t('operations.orthogonalize.description.' + _geometry);
37900             };
37901
37902
37903             operation.annotation = function() {
37904                 return t('operations.orthogonalize.annotation.' + _geometry);
37905             };
37906
37907
37908             operation.id = 'orthogonalize';
37909             operation.keys = [t('operations.orthogonalize.key')];
37910             operation.title = t('operations.orthogonalize.title');
37911             operation.behavior = behaviorOperation(context).which(operation);
37912
37913             return operation;
37914         }
37915
37916         function operationReflectShort(selectedIDs, context) {
37917             return operationReflect(selectedIDs, context, 'short');
37918         }
37919
37920
37921         function operationReflectLong(selectedIDs, context) {
37922             return operationReflect(selectedIDs, context, 'long');
37923         }
37924
37925
37926         function operationReflect(selectedIDs, context, axis) {
37927             axis = axis || 'long';
37928             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
37929             var nodes = utilGetAllNodes(selectedIDs, context.graph());
37930             var coords = nodes.map(function(n) { return n.loc; });
37931             var extent = nodes.reduce(function(extent, node) {
37932                 return extent.extend(node.extent(context.graph()));
37933             }, geoExtent());
37934
37935
37936             var operation = function() {
37937                 var action = actionReflect(selectedIDs, context.projection)
37938                     .useLongAxis(Boolean(axis === 'long'));
37939
37940                 context.perform(action, operation.annotation());
37941
37942                 window.setTimeout(function() {
37943                     context.validator().validate();
37944                 }, 300);  // after any transition
37945             };
37946
37947
37948             operation.available = function() {
37949                 return nodes.length >= 3;
37950             };
37951
37952
37953             // don't cache this because the visible extent could change
37954             operation.disabled = function() {
37955                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
37956                     return 'too_large';
37957                 } else if (someMissing()) {
37958                     return 'not_downloaded';
37959                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37960                     return 'connected_to_hidden';
37961                 } else if (selectedIDs.some(incompleteRelation)) {
37962                     return 'incomplete_relation';
37963                 }
37964
37965                 return false;
37966
37967
37968                 function someMissing() {
37969                     if (context.inIntro()) return false;
37970                     var osm = context.connection();
37971                     if (osm) {
37972                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37973                         if (missing.length) {
37974                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37975                             return true;
37976                         }
37977                     }
37978                     return false;
37979                 }
37980
37981                 function incompleteRelation(id) {
37982                     var entity = context.entity(id);
37983                     return entity.type === 'relation' && !entity.isComplete(context.graph());
37984                 }
37985             };
37986
37987
37988             operation.tooltip = function() {
37989                 var disable = operation.disabled();
37990                 return disable ?
37991                     t('operations.reflect.' + disable + '.' + multi) :
37992                     t('operations.reflect.description.' + axis + '.' + multi);
37993             };
37994
37995
37996             operation.annotation = function() {
37997                 return t('operations.reflect.annotation.' + axis + '.' + multi);
37998             };
37999
38000
38001             operation.id = 'reflect-' + axis;
38002             operation.keys = [t('operations.reflect.key.' + axis)];
38003             operation.title = t('operations.reflect.title.' + axis);
38004             operation.behavior = behaviorOperation(context).which(operation);
38005
38006             return operation;
38007         }
38008
38009         function operationMove(selectedIDs, context) {
38010             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
38011             var nodes = utilGetAllNodes(selectedIDs, context.graph());
38012             var coords = nodes.map(function(n) { return n.loc; });
38013             var extent = nodes.reduce(function(extent, node) {
38014                 return extent.extend(node.extent(context.graph()));
38015             }, geoExtent());
38016
38017
38018             var operation = function() {
38019                 context.enter(modeMove(context, selectedIDs));
38020             };
38021
38022
38023             operation.available = function() {
38024                 return selectedIDs.length > 1 ||
38025                     context.entity(selectedIDs[0]).type !== 'node';
38026             };
38027
38028
38029             operation.disabled = function() {
38030                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
38031                     return 'too_large';
38032                 } else if (someMissing()) {
38033                     return 'not_downloaded';
38034                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
38035                     return 'connected_to_hidden';
38036                 } else if (selectedIDs.some(incompleteRelation)) {
38037                     return 'incomplete_relation';
38038                 }
38039
38040                 return false;
38041
38042
38043                 function someMissing() {
38044                     if (context.inIntro()) return false;
38045                     var osm = context.connection();
38046                     if (osm) {
38047                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
38048                         if (missing.length) {
38049                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
38050                             return true;
38051                         }
38052                     }
38053                     return false;
38054                 }
38055
38056                 function incompleteRelation(id) {
38057                     var entity = context.entity(id);
38058                     return entity.type === 'relation' && !entity.isComplete(context.graph());
38059                 }
38060             };
38061
38062
38063             operation.tooltip = function() {
38064                 var disable = operation.disabled();
38065                 return disable ?
38066                     t('operations.move.' + disable + '.' + multi) :
38067                     t('operations.move.description.' + multi);
38068             };
38069
38070
38071             operation.annotation = function() {
38072                 return selectedIDs.length === 1 ?
38073                     t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
38074                     t('operations.move.annotation.multiple');
38075             };
38076
38077
38078             operation.id = 'move';
38079             operation.keys = [t('operations.move.key')];
38080             operation.title = t('operations.move.title');
38081             operation.behavior = behaviorOperation(context).which(operation);
38082
38083             return operation;
38084         }
38085
38086         function modeRotate(context, entityIDs) {
38087             var mode = {
38088                 id: 'rotate',
38089                 button: 'browse'
38090             };
38091
38092             var keybinding = utilKeybinding('rotate');
38093             var behaviors = [
38094                 behaviorEdit(context),
38095                 operationCircularize(entityIDs, context).behavior,
38096                 operationDelete(entityIDs, context).behavior,
38097                 operationMove(entityIDs, context).behavior,
38098                 operationOrthogonalize(entityIDs, context).behavior,
38099                 operationReflectLong(entityIDs, context).behavior,
38100                 operationReflectShort(entityIDs, context).behavior
38101             ];
38102             var annotation = entityIDs.length === 1 ?
38103                 t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
38104                 t('operations.rotate.annotation.multiple');
38105
38106             var _prevGraph;
38107             var _prevAngle;
38108             var _prevTransform;
38109             var _pivot;
38110
38111
38112             function doRotate() {
38113                 var fn;
38114                 if (context.graph() !== _prevGraph) {
38115                     fn = context.perform;
38116                 } else {
38117                     fn = context.replace;
38118                 }
38119
38120                 // projection changed, recalculate _pivot
38121                 var projection = context.projection;
38122                 var currTransform = projection.transform();
38123                 if (!_prevTransform ||
38124                     currTransform.k !== _prevTransform.k ||
38125                     currTransform.x !== _prevTransform.x ||
38126                     currTransform.y !== _prevTransform.y) {
38127
38128                     var nodes = utilGetAllNodes(entityIDs, context.graph());
38129                     var points = nodes.map(function(n) { return projection(n.loc); });
38130
38131                     if (points.length === 1) {  // degenerate case
38132                         _pivot = points[0];
38133                     } else if (points.length === 2) {
38134                         _pivot = geoVecInterp(points[0], points[1], 0.5);
38135                     } else {
38136                         _pivot = d3_polygonCentroid(d3_polygonHull(points));
38137                     }
38138                     _prevAngle = undefined;
38139                 }
38140
38141
38142                 var currMouse = context.mouse();
38143                 var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
38144
38145                 if (typeof _prevAngle === 'undefined') _prevAngle = currAngle;
38146                 var delta = currAngle - _prevAngle;
38147
38148                 fn(actionRotate(entityIDs, _pivot, delta, projection));
38149
38150                 _prevTransform = currTransform;
38151                 _prevAngle = currAngle;
38152                 _prevGraph = context.graph();
38153             }
38154
38155
38156             function finish() {
38157                 event.stopPropagation();
38158                 context.replace(actionNoop(), annotation);
38159                 context.enter(modeSelect(context, entityIDs));
38160             }
38161
38162
38163             function cancel() {
38164                 context.pop();
38165                 context.enter(modeSelect(context, entityIDs));
38166             }
38167
38168
38169             function undone() {
38170                 context.enter(modeBrowse(context));
38171             }
38172
38173
38174             mode.enter = function() {
38175                 context.features().forceVisible(entityIDs);
38176
38177                 behaviors.forEach(context.install);
38178
38179                 context.surface()
38180                     .on('mousemove.rotate', doRotate)
38181                     .on('click.rotate', finish);
38182
38183                 context.history()
38184                     .on('undone.rotate', undone);
38185
38186                 keybinding
38187                     .on('⎋', cancel)
38188                     .on('↩', finish);
38189
38190                 d3_select(document)
38191                     .call(keybinding);
38192             };
38193
38194
38195             mode.exit = function() {
38196                 behaviors.forEach(context.uninstall);
38197
38198                 context.surface()
38199                     .on('mousemove.rotate', null)
38200                     .on('click.rotate', null);
38201
38202                 context.history()
38203                     .on('undone.rotate', null);
38204
38205                 d3_select(document)
38206                     .call(keybinding.unbind);
38207
38208                 context.features().forceVisible([]);
38209             };
38210
38211
38212             mode.selectedIDs = function() {
38213                 if (!arguments.length) return entityIDs;
38214                 // no assign
38215                 return mode;
38216             };
38217
38218
38219             return mode;
38220         }
38221
38222         function operationRotate(selectedIDs, context) {
38223             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
38224             var nodes = utilGetAllNodes(selectedIDs, context.graph());
38225             var coords = nodes.map(function(n) { return n.loc; });
38226             var extent = nodes.reduce(function(extent, node) {
38227                 return extent.extend(node.extent(context.graph()));
38228             }, geoExtent());
38229
38230
38231             var operation = function() {
38232                 context.enter(modeRotate(context, selectedIDs));
38233             };
38234
38235
38236             operation.available = function() {
38237                 return nodes.length >= 2;
38238             };
38239
38240
38241             operation.disabled = function() {
38242
38243                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
38244                     return 'too_large';
38245                 } else if (someMissing()) {
38246                     return 'not_downloaded';
38247                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
38248                     return 'connected_to_hidden';
38249                 } else if (selectedIDs.some(incompleteRelation)) {
38250                     return 'incomplete_relation';
38251                 }
38252
38253                 return false;
38254
38255
38256                 function someMissing() {
38257                     if (context.inIntro()) return false;
38258                     var osm = context.connection();
38259                     if (osm) {
38260                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
38261                         if (missing.length) {
38262                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
38263                             return true;
38264                         }
38265                     }
38266                     return false;
38267                 }
38268
38269                 function incompleteRelation(id) {
38270                     var entity = context.entity(id);
38271                     return entity.type === 'relation' && !entity.isComplete(context.graph());
38272                 }
38273             };
38274
38275
38276             operation.tooltip = function() {
38277                 var disable = operation.disabled();
38278                 return disable ?
38279                     t('operations.rotate.' + disable + '.' + multi) :
38280                     t('operations.rotate.description.' + multi);
38281             };
38282
38283
38284             operation.annotation = function() {
38285                 return selectedIDs.length === 1 ?
38286                     t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
38287                     t('operations.rotate.annotation.multiple');
38288             };
38289
38290
38291             operation.id = 'rotate';
38292             operation.keys = [t('operations.rotate.key')];
38293             operation.title = t('operations.rotate.title');
38294             operation.behavior = behaviorOperation(context).which(operation);
38295
38296             return operation;
38297         }
38298
38299         function modeMove(context, entityIDs, baseGraph) {
38300             var mode = {
38301                 id: 'move',
38302                 button: 'browse'
38303             };
38304
38305             var keybinding = utilKeybinding('move');
38306             var behaviors = [
38307                 behaviorEdit(context),
38308                 operationCircularize(entityIDs, context).behavior,
38309                 operationDelete(entityIDs, context).behavior,
38310                 operationOrthogonalize(entityIDs, context).behavior,
38311                 operationReflectLong(entityIDs, context).behavior,
38312                 operationReflectShort(entityIDs, context).behavior,
38313                 operationRotate(entityIDs, context).behavior
38314             ];
38315             var annotation = entityIDs.length === 1 ?
38316                 t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
38317                 t('operations.move.annotation.multiple');
38318
38319             var _prevGraph;
38320             var _cache;
38321             var _origin;
38322             var _nudgeInterval;
38323
38324
38325             function doMove(nudge) {
38326                 nudge = nudge || [0, 0];
38327
38328                 var fn;
38329                 if (_prevGraph !== context.graph()) {
38330                     _cache = {};
38331                     _origin = context.map().mouseCoordinates();
38332                     fn = context.perform;
38333                 } else {
38334                     fn = context.overwrite;
38335                 }
38336
38337                 var currMouse = context.mouse();
38338                 var origMouse = context.projection(_origin);
38339                 var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
38340
38341                 fn(actionMove(entityIDs, delta, context.projection, _cache));
38342                 _prevGraph = context.graph();
38343             }
38344
38345
38346             function startNudge(nudge) {
38347                 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
38348                 _nudgeInterval = window.setInterval(function() {
38349                     context.pan(nudge);
38350                     doMove(nudge);
38351                 }, 50);
38352             }
38353
38354
38355             function stopNudge() {
38356                 if (_nudgeInterval) {
38357                     window.clearInterval(_nudgeInterval);
38358                     _nudgeInterval = null;
38359                 }
38360             }
38361
38362
38363             function move() {
38364                 doMove();
38365                 var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
38366                 if (nudge) {
38367                     startNudge(nudge);
38368                 } else {
38369                     stopNudge();
38370                 }
38371             }
38372
38373
38374             function finish() {
38375                 event.stopPropagation();
38376                 context.replace(actionNoop(), annotation);
38377                 context.enter(modeSelect(context, entityIDs));
38378                 stopNudge();
38379             }
38380
38381
38382             function cancel() {
38383                 if (baseGraph) {
38384                     while (context.graph() !== baseGraph) context.pop();
38385                     context.enter(modeBrowse(context));
38386                 } else {
38387                     context.pop();
38388                     context.enter(modeSelect(context, entityIDs));
38389                 }
38390                 stopNudge();
38391             }
38392
38393
38394             function undone() {
38395                 context.enter(modeBrowse(context));
38396             }
38397
38398
38399             mode.enter = function() {
38400                 _origin = context.map().mouseCoordinates();
38401                 _prevGraph = null;
38402                 _cache = {};
38403
38404                 context.features().forceVisible(entityIDs);
38405
38406                 behaviors.forEach(context.install);
38407
38408                 context.surface()
38409                     .on('mousemove.move', move)
38410                     .on('click.move', finish);
38411
38412                 context.history()
38413                     .on('undone.move', undone);
38414
38415                 keybinding
38416                     .on('⎋', cancel)
38417                     .on('↩', finish);
38418
38419                 d3_select(document)
38420                     .call(keybinding);
38421             };
38422
38423
38424             mode.exit = function() {
38425                 stopNudge();
38426
38427                 behaviors.forEach(function(behavior) {
38428                     context.uninstall(behavior);
38429                 });
38430
38431                 context.surface()
38432                     .on('mousemove.move', null)
38433                     .on('click.move', null);
38434
38435                 context.history()
38436                     .on('undone.move', null);
38437
38438                 d3_select(document)
38439                     .call(keybinding.unbind);
38440
38441                 context.features().forceVisible([]);
38442             };
38443
38444
38445             mode.selectedIDs = function() {
38446                 if (!arguments.length) return entityIDs;
38447                 // no assign
38448                 return mode;
38449             };
38450
38451
38452             return mode;
38453         }
38454
38455         function behaviorPaste(context) {
38456
38457             function doPaste() {
38458                 event.preventDefault();
38459
38460                 var baseGraph = context.graph();
38461                 var mouse = context.mouse();
38462                 var projection = context.projection;
38463                 var viewport = geoExtent(projection.clipExtent()).polygon();
38464
38465                 if (!geoPointInPolygon(mouse, viewport)) return;
38466
38467                 var extent = geoExtent();
38468                 var oldIDs = context.copyIDs();
38469                 var oldGraph = context.copyGraph();
38470                 var newIDs = [];
38471
38472                 if (!oldIDs.length) return;
38473
38474                 var action = actionCopyEntities(oldIDs, oldGraph);
38475                 context.perform(action);
38476
38477                 var copies = action.copies();
38478                 var originals = new Set();
38479                 Object.values(copies).forEach(function(entity) { originals.add(entity.id); });
38480
38481                 for (var id in copies) {
38482                     var oldEntity = oldGraph.entity(id);
38483                     var newEntity = copies[id];
38484
38485                     extent._extend(oldEntity.extent(oldGraph));
38486
38487                     // Exclude child nodes from newIDs if their parent way was also copied.
38488                     var parents = context.graph().parentWays(newEntity);
38489                     var parentCopied = parents.some(function(parent) {
38490                         return originals.has(parent.id);
38491                     });
38492
38493                     if (!parentCopied) {
38494                         newIDs.push(newEntity.id);
38495                     }
38496                 }
38497
38498                 // Put pasted objects where mouse pointer is..
38499                 var center = projection(extent.center());
38500                 var delta = geoVecSubtract(mouse, center);
38501
38502                 context.perform(actionMove(newIDs, delta, projection));
38503                 context.enter(modeMove(context, newIDs, baseGraph));
38504             }
38505
38506
38507             function behavior() {
38508                 context.keybinding().on(uiCmd('⌘V'), doPaste);
38509                 return behavior;
38510             }
38511
38512
38513             behavior.off = function() {
38514                 context.keybinding().off(uiCmd('⌘V'));
38515             };
38516
38517
38518             return behavior;
38519         }
38520
38521         /*
38522             `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
38523
38524             * The `origin` function is expected to return an [x, y] tuple rather than an
38525               {x, y} object.
38526             * The events are `start`, `move`, and `end`.
38527               (https://github.com/mbostock/d3/issues/563)
38528             * The `start` event is not dispatched until the first cursor movement occurs.
38529               (https://github.com/mbostock/d3/pull/368)
38530             * The `move` event has a `point` and `delta` [x, y] tuple properties rather
38531               than `x`, `y`, `dx`, and `dy` properties.
38532             * The `end` event is not dispatched if no movement occurs.
38533             * An `off` function is available that unbinds the drag's internal event handlers.
38534          */
38535
38536         function behaviorDrag() {
38537             var dispatch$1 = dispatch('start', 'move', 'end');
38538             var _origin = null;
38539             var _selector = '';
38540             var _event;
38541             var _target;
38542             var _surface;
38543
38544
38545             var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
38546             var d3_event_userSelectSuppress = function() {
38547                     var selection$1 = selection();
38548                     var select = selection$1.style(d3_event_userSelectProperty);
38549                     selection$1.style(d3_event_userSelectProperty, 'none');
38550                     return function() {
38551                         selection$1.style(d3_event_userSelectProperty, select);
38552                     };
38553                 };
38554
38555
38556             function d3_eventCancel() {
38557                 event.stopPropagation();
38558                 event.preventDefault();
38559             }
38560
38561
38562             function eventOf(thiz, argumentz) {
38563                 return function(e1) {
38564                     e1.target = behavior;
38565                     customEvent(e1, dispatch$1.apply, dispatch$1, [e1.type, thiz, argumentz]);
38566                 };
38567             }
38568
38569
38570             function dragstart() {
38571                 _target = this;
38572                 _event = eventOf(_target, arguments);
38573
38574                 var eventTarget = event.target;
38575                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
38576                 var offset;
38577                 var startOrigin = point();
38578                 var started = false;
38579                 var selectEnable = d3_event_userSelectSuppress();
38580
38581                 d3_select(window)
38582                     .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
38583                     .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
38584
38585                 if (_origin) {
38586                     offset = _origin.apply(_target, arguments);
38587                     offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
38588                 } else {
38589                     offset = [0, 0];
38590                 }
38591
38592                 if (touchId === null) {
38593                     event.stopPropagation();
38594                 }
38595
38596
38597                 function point() {
38598                     var p = _surface || _target.parentNode;
38599                     return touchId !== null ? d3_touches(p).filter(function(p) {
38600                         return p.identifier === touchId;
38601                     })[0] : d3_mouse(p);
38602                 }
38603
38604
38605                 function dragmove() {
38606                     var p = point();
38607                     var dx = p[0] - startOrigin[0];
38608                     var dy = p[1] - startOrigin[1];
38609
38610                     if (dx === 0 && dy === 0)
38611                         return;
38612
38613                     startOrigin = p;
38614                     d3_eventCancel();
38615
38616                     if (!started) {
38617                         started = true;
38618                         _event({ type: 'start' });
38619                     } else {
38620                         _event({
38621                             type: 'move',
38622                             point: [p[0] + offset[0],  p[1] + offset[1]],
38623                             delta: [dx, dy]
38624                         });
38625                     }
38626                 }
38627
38628
38629                 function dragend() {
38630                     if (started) {
38631                         _event({ type: 'end' });
38632
38633                         d3_eventCancel();
38634                         if (event.target === eventTarget) {
38635                             d3_select(window)
38636                                 .on('click.drag', click, true);
38637                         }
38638                     }
38639
38640                     d3_select(window)
38641                         .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
38642                         .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
38643
38644                     selectEnable();
38645                 }
38646
38647
38648                 function click() {
38649                     d3_eventCancel();
38650                     d3_select(window)
38651                         .on('click.drag', null);
38652                 }
38653             }
38654
38655
38656             function behavior(selection) {
38657                 var matchesSelector = utilPrefixDOMProperty('matchesSelector');
38658                 var delegate = dragstart;
38659
38660                 if (_selector) {
38661                     delegate = function() {
38662                         var root = this;
38663                         var target = event.target;
38664                         for (; target && target !== root; target = target.parentNode) {
38665                             var datum = target.__data__;
38666
38667                             var entity = datum instanceof osmNote ? datum
38668                                 : datum && datum.properties && datum.properties.entity;
38669
38670                             if (entity && target[matchesSelector](_selector)) {
38671                                 return dragstart.call(target, entity);
38672                             }
38673                         }
38674                     };
38675                 }
38676
38677                 selection
38678                     .on('mousedown.drag' + _selector, delegate)
38679                     .on('touchstart.drag' + _selector, delegate);
38680             }
38681
38682
38683             behavior.off = function(selection) {
38684                 selection
38685                     .on('mousedown.drag' + _selector, null)
38686                     .on('touchstart.drag' + _selector, null);
38687             };
38688
38689
38690             behavior.selector = function(_) {
38691                 if (!arguments.length) return _selector;
38692                 _selector = _;
38693                 return behavior;
38694             };
38695
38696
38697             behavior.origin = function(_) {
38698                 if (!arguments.length) return _origin;
38699                 _origin = _;
38700                 return behavior;
38701             };
38702
38703
38704             behavior.cancel = function() {
38705                 d3_select(window)
38706                     .on('mousemove.drag', null)
38707                     .on('mouseup.drag', null);
38708                 return behavior;
38709             };
38710
38711
38712             behavior.target = function() {
38713                 if (!arguments.length) return _target;
38714                 _target = arguments[0];
38715                 _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
38716                 return behavior;
38717             };
38718
38719
38720             behavior.surface = function() {
38721                 if (!arguments.length) return _surface;
38722                 _surface = arguments[0];
38723                 return behavior;
38724             };
38725
38726
38727             return utilRebind(behavior, dispatch$1, 'on');
38728         }
38729
38730         function modeDragNode(context) {
38731             var mode = {
38732                 id: 'drag-node',
38733                 button: 'browse'
38734             };
38735             var hover = behaviorHover(context).altDisables(true)
38736                 .on('hover', context.ui().sidebar.hover);
38737             var edit = behaviorEdit(context);
38738
38739             var _nudgeInterval;
38740             var _restoreSelectedIDs = [];
38741             var _wasMidpoint = false;
38742             var _isCancelled = false;
38743             var _activeEntity;
38744             var _startLoc;
38745             var _lastLoc;
38746
38747
38748             function startNudge(entity, nudge) {
38749                 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
38750                 _nudgeInterval = window.setInterval(function() {
38751                     context.pan(nudge);
38752                     doMove(entity, nudge);
38753                 }, 50);
38754             }
38755
38756
38757             function stopNudge() {
38758                 if (_nudgeInterval) {
38759                     window.clearInterval(_nudgeInterval);
38760                     _nudgeInterval = null;
38761                 }
38762             }
38763
38764
38765             function moveAnnotation(entity) {
38766                 return t('operations.move.annotation.' + entity.geometry(context.graph()));
38767             }
38768
38769
38770             function connectAnnotation(nodeEntity, targetEntity) {
38771                 var nodeGeometry = nodeEntity.geometry(context.graph());
38772                 var targetGeometry = targetEntity.geometry(context.graph());
38773                 if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
38774                     var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
38775                     var targetParentWayIDs = context.graph().parentWays(targetEntity);
38776                     var sharedParentWays = utilArrayIntersection(nodeParentWayIDs, targetParentWayIDs);
38777                     // if both vertices are part of the same way
38778                     if (sharedParentWays.length !== 0) {
38779                         // if the nodes are next to each other, they are merged
38780                         if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
38781                             return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
38782                         }
38783                         return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
38784                     }
38785                 }
38786                 return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
38787             }
38788
38789
38790             function shouldSnapToNode(target) {
38791                 if (!_activeEntity) return false;
38792                 return _activeEntity.geometry(context.graph()) !== 'vertex' ||
38793                     (target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph()));
38794             }
38795
38796
38797             function origin(entity) {
38798                 return context.projection(entity.loc);
38799             }
38800
38801
38802             function keydown() {
38803                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
38804                     if (context.surface().classed('nope')) {
38805                         context.surface()
38806                             .classed('nope-suppressed', true);
38807                     }
38808                     context.surface()
38809                         .classed('nope', false)
38810                         .classed('nope-disabled', true);
38811                 }
38812             }
38813
38814
38815             function keyup() {
38816                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
38817                     if (context.surface().classed('nope-suppressed')) {
38818                         context.surface()
38819                             .classed('nope', true);
38820                     }
38821                     context.surface()
38822                         .classed('nope-suppressed', false)
38823                         .classed('nope-disabled', false);
38824                 }
38825             }
38826
38827
38828             function start(entity) {
38829                 _wasMidpoint = entity.type === 'midpoint';
38830                 var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
38831                 _isCancelled = event.sourceEvent.shiftKey || hasHidden;
38832
38833
38834                 if (_isCancelled) {
38835                     if (hasHidden) {
38836                         uiFlash()
38837                             .duration(4000)
38838                             .text(t('modes.drag_node.connected_to_hidden'))();
38839                     }
38840                     return drag.cancel();
38841                 }
38842
38843                 if (_wasMidpoint) {
38844                     var midpoint = entity;
38845                     entity = osmNode();
38846                     context.perform(actionAddMidpoint(midpoint, entity));
38847                     entity = context.entity(entity.id);   // get post-action entity
38848
38849                     var vertex = context.surface().selectAll('.' + entity.id);
38850                     drag.target(vertex.node(), entity);
38851
38852                 } else {
38853                     context.perform(actionNoop());
38854                 }
38855
38856                 _activeEntity = entity;
38857                 _startLoc = entity.loc;
38858
38859                 hover.ignoreVertex(entity.geometry(context.graph()) === 'vertex');
38860
38861                 context.surface().selectAll('.' + _activeEntity.id)
38862                     .classed('active', true);
38863
38864                 context.enter(mode);
38865             }
38866
38867
38868             // related code
38869             // - `behavior/draw.js` `datum()`
38870             function datum() {
38871                 var event$1 = event && event.sourceEvent;
38872                 if (!event$1 || event$1.altKey) {
38873                     return {};
38874                 } else {
38875                     // When dragging, snap only to touch targets..
38876                     // (this excludes area fills and active drawing elements)
38877                     var d = event$1.target.__data__;
38878                     return (d && d.properties && d.properties.target) ? d : {};
38879                 }
38880             }
38881
38882
38883             function doMove(entity, nudge) {
38884                 nudge = nudge || [0, 0];
38885
38886                 var currPoint = (event && event.point) || context.projection(_lastLoc);
38887                 var currMouse = geoVecSubtract(currPoint, nudge);
38888                 var loc = context.projection.invert(currMouse);
38889
38890                 if (!_nudgeInterval) {   // If not nudging at the edge of the viewport, try to snap..
38891                     // related code
38892                     // - `mode/drag_node.js`     `doMode()`
38893                     // - `behavior/draw.js`      `click()`
38894                     // - `behavior/draw_way.js`  `move()`
38895                     var d = datum();
38896                     var target = d && d.properties && d.properties.entity;
38897                     var targetLoc = target && target.loc;
38898                     var targetNodes = d && d.properties && d.properties.nodes;
38899                     var edge;
38900
38901                     if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
38902                         if (shouldSnapToNode(target)) {
38903                             loc = targetLoc;
38904                         }
38905
38906                     } else if (targetNodes) {   // snap to way - a line target with `.nodes`
38907                         edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
38908                         if (edge) {
38909                             loc = edge.loc;
38910                         }
38911                     }
38912                 }
38913
38914                 context.replace(
38915                     actionMoveNode(entity.id, loc)
38916                 );
38917
38918                 // Below here: validations
38919                 var isInvalid = false;
38920
38921                 // Check if this connection to `target` could cause relations to break..
38922                 if (target) {
38923                     isInvalid = hasRelationConflict(entity, target, edge, context.graph());
38924                 }
38925
38926                 // Check if this drag causes the geometry to break..
38927                 if (!isInvalid) {
38928                     isInvalid = hasInvalidGeometry(entity, context.graph());
38929                 }
38930
38931
38932                 var nope = context.surface().classed('nope');
38933                 if (isInvalid === 'relation' || isInvalid === 'restriction') {
38934                     if (!nope) {   // about to nope - show hint
38935                         uiFlash()
38936                             .duration(4000)
38937                             .text(t('operations.connect.' + isInvalid,
38938                                 { relation: context.presets().item('type/restriction').name() }
38939                             ))();
38940                     }
38941                 } else {
38942                     if (nope) {   // about to un-nope, remove hint
38943                         uiFlash()
38944                             .duration(1)
38945                             .text('')();
38946                     }
38947                 }
38948
38949
38950                 var nopeDisabled = context.surface().classed('nope-disabled');
38951                 if (nopeDisabled) {
38952                     context.surface()
38953                         .classed('nope', false)
38954                         .classed('nope-suppressed', isInvalid);
38955                 } else {
38956                     context.surface()
38957                         .classed('nope', isInvalid)
38958                         .classed('nope-suppressed', false);
38959                 }
38960
38961                 _lastLoc = loc;
38962             }
38963
38964
38965             // Uses `actionConnect.disabled()` to know whether this connection is ok..
38966             function hasRelationConflict(entity, target, edge, graph) {
38967                 var testGraph = graph.update();  // copy
38968
38969                 // if snapping to way - add midpoint there and consider that the target..
38970                 if (edge) {
38971                     var midpoint = osmNode();
38972                     var action = actionAddMidpoint({
38973                         loc: edge.loc,
38974                         edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
38975                     }, midpoint);
38976
38977                     testGraph = action(testGraph);
38978                     target = midpoint;
38979                 }
38980
38981                 // can we connect to it?
38982                 var ids = [entity.id, target.id];
38983                 return actionConnect(ids).disabled(testGraph);
38984             }
38985
38986
38987             function hasInvalidGeometry(entity, graph) {
38988                 var parents = graph.parentWays(entity);
38989                 var i, j, k;
38990
38991                 for (i = 0; i < parents.length; i++) {
38992                     var parent = parents[i];
38993                     var nodes = [];
38994                     var activeIndex = null;    // which multipolygon ring contains node being dragged
38995
38996                     // test any parent multipolygons for valid geometry
38997                     var relations = graph.parentRelations(parent);
38998                     for (j = 0; j < relations.length; j++) {
38999                         if (!relations[j].isMultipolygon()) continue;
39000
39001                         var rings = osmJoinWays(relations[j].members, graph);
39002
39003                         // find active ring and test it for self intersections
39004                         for (k = 0; k < rings.length; k++) {
39005                             nodes = rings[k].nodes;
39006                             if (nodes.find(function(n) { return n.id === entity.id; })) {
39007                                 activeIndex = k;
39008                                 if (geoHasSelfIntersections(nodes, entity.id)) {
39009                                     return true;
39010                                 }
39011                             }
39012                             rings[k].coords = nodes.map(function(n) { return n.loc; });
39013                         }
39014
39015                         // test active ring for intersections with other rings in the multipolygon
39016                         for (k = 0; k < rings.length; k++) {
39017                             if (k === activeIndex) continue;
39018
39019                             // make sure active ring doesnt cross passive rings
39020                             if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
39021                                 return true;
39022                             }
39023                         }
39024                     }
39025
39026
39027                     // If we still haven't tested this node's parent way for self-intersections.
39028                     // (because it's not a member of a multipolygon), test it now.
39029                     if (activeIndex === null) {
39030                         nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
39031                         if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
39032                             return true;
39033                         }
39034                     }
39035
39036                 }
39037
39038                 return false;
39039             }
39040
39041
39042             function move(entity) {
39043                 if (_isCancelled) return;
39044                 event.sourceEvent.stopPropagation();
39045
39046                 context.surface().classed('nope-disabled', event.sourceEvent.altKey);
39047
39048                 _lastLoc = context.projection.invert(event.point);
39049
39050                 doMove(entity);
39051                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
39052                 if (nudge) {
39053                     startNudge(entity, nudge);
39054                 } else {
39055                     stopNudge();
39056                 }
39057             }
39058
39059             function end(entity) {
39060                 if (_isCancelled) return;
39061
39062                 var wasPoint = entity.geometry(context.graph()) === 'point';
39063
39064                 var d = datum();
39065                 var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
39066                 var target = d && d.properties && d.properties.entity;   // entity to snap to
39067
39068                 if (nope) {   // bounce back
39069                     context.perform(
39070                         _actionBounceBack(entity.id, _startLoc)
39071                     );
39072
39073                 } else if (target && target.type === 'way') {
39074                     var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
39075                     context.replace(
39076                         actionAddMidpoint({
39077                             loc: choice.loc,
39078                             edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
39079                         }, entity),
39080                         connectAnnotation(entity, target)
39081                     );
39082
39083                 } else if (target && target.type === 'node' && shouldSnapToNode(target)) {
39084                     context.replace(
39085                         actionConnect([target.id, entity.id]),
39086                         connectAnnotation(entity, target)
39087                     );
39088
39089                 } else if (_wasMidpoint) {
39090                     context.replace(
39091                         actionNoop(),
39092                         t('operations.add.annotation.vertex')
39093                     );
39094
39095                 } else {
39096                     context.replace(
39097                         actionNoop(),
39098                         moveAnnotation(entity)
39099                     );
39100                 }
39101
39102                 if (wasPoint) {
39103                     context.enter(modeSelect(context, [entity.id]));
39104
39105                 } else {
39106                     var reselection = _restoreSelectedIDs.filter(function(id) {
39107                         return context.graph().hasEntity(id);
39108                     });
39109
39110                     if (reselection.length) {
39111                         context.enter(modeSelect(context, reselection));
39112                     } else {
39113                         context.enter(modeBrowse(context));
39114                     }
39115                 }
39116             }
39117
39118
39119             function _actionBounceBack(nodeID, toLoc) {
39120                 var moveNode = actionMoveNode(nodeID, toLoc);
39121                 var action = function(graph, t) {
39122                     // last time through, pop off the bounceback perform.
39123                     // it will then overwrite the initial perform with a moveNode that does nothing
39124                     if (t === 1) context.pop();
39125                     return moveNode(graph, t);
39126                 };
39127                 action.transitionable = true;
39128                 return action;
39129             }
39130
39131
39132             function cancel() {
39133                 drag.cancel();
39134                 context.enter(modeBrowse(context));
39135             }
39136
39137
39138             var drag = behaviorDrag()
39139                 .selector('.layer-touch.points .target')
39140                 .surface(d3_select('#map').node())
39141                 .origin(origin)
39142                 .on('start', start)
39143                 .on('move', move)
39144                 .on('end', end);
39145
39146
39147             mode.enter = function() {
39148                 context.install(hover);
39149                 context.install(edit);
39150
39151                 d3_select(window)
39152                     .on('keydown.drawWay', keydown)
39153                     .on('keyup.drawWay', keyup);
39154
39155                 context.history()
39156                     .on('undone.drag-node', cancel);
39157             };
39158
39159
39160             mode.exit = function() {
39161                 context.ui().sidebar.hover.cancel();
39162                 context.uninstall(hover);
39163                 context.uninstall(edit);
39164
39165                 d3_select(window)
39166                     .on('keydown.hover', null)
39167                     .on('keyup.hover', null);
39168
39169                 context.history()
39170                     .on('undone.drag-node', null);
39171
39172                 _activeEntity = null;
39173
39174                 context.surface()
39175                     .classed('nope', false)
39176                     .classed('nope-suppressed', false)
39177                     .classed('nope-disabled', false)
39178                     .selectAll('.active')
39179                     .classed('active', false);
39180
39181                 stopNudge();
39182             };
39183
39184
39185             mode.selectedIDs = function() {
39186                 if (!arguments.length) return _activeEntity ? [_activeEntity.id] : [];
39187                 // no assign
39188                 return mode;
39189             };
39190
39191
39192             mode.activeID = function() {
39193                 if (!arguments.length) return _activeEntity && _activeEntity.id;
39194                 // no assign
39195                 return mode;
39196             };
39197
39198
39199             mode.restoreSelectedIDs = function(_) {
39200                 if (!arguments.length) return _restoreSelectedIDs;
39201                 _restoreSelectedIDs = _;
39202                 return mode;
39203             };
39204
39205
39206             mode.behavior = drag;
39207
39208
39209             return mode;
39210         }
39211
39212         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"};
39213         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: \\((.+)\\)"}};
39214
39215         var tiler = utilTiler();
39216         var dispatch$1 = dispatch('loaded');
39217
39218         var _krCache;
39219         var _krZoom = 14;
39220         var _krUrlRoot = 'https://www.keepright.at/';
39221
39222         var _krRuleset = [
39223             // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
39224             30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
39225             190, 191, 192, 193, 194, 195, 196, 197, 198,
39226             200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
39227             230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
39228             290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
39229             320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
39230         ];
39231
39232
39233         function abortRequest(controller) {
39234             if (controller) {
39235                 controller.abort();
39236             }
39237         }
39238
39239         function abortUnwantedRequests(cache, tiles) {
39240             Object.keys(cache.inflightTile).forEach(function(k) {
39241                 var wanted = tiles.find(function(tile) { return k === tile.id; });
39242                 if (!wanted) {
39243                     abortRequest(cache.inflightTile[k]);
39244                     delete cache.inflightTile[k];
39245                 }
39246             });
39247         }
39248
39249
39250         function encodeErrorRtree(d) {
39251             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
39252         }
39253
39254
39255         // replace or remove error from rtree
39256         function updateRtree(item, replace) {
39257             _krCache.rtree.remove(item, function isEql(a, b) {
39258                 return a.data.id === b.data.id;
39259             });
39260
39261             if (replace) {
39262                 _krCache.rtree.insert(item);
39263             }
39264         }
39265
39266
39267         function tokenReplacements(d) {
39268             if (!(d instanceof qaError)) return;
39269
39270             var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
39271             var replacements = {};
39272
39273             var errorTemplate = errorTypes[d.which_type];
39274             if (!errorTemplate) {
39275                 /* eslint-disable no-console */
39276                 console.log('No Template: ', d.which_type);
39277                 console.log('  ', d.description);
39278                 /* eslint-enable no-console */
39279                 return;
39280             }
39281
39282             // some descriptions are just fixed text
39283             if (!errorTemplate.regex) return;
39284
39285             // regex pattern should match description with variable details captured
39286             var errorRegex = new RegExp(errorTemplate.regex, 'i');
39287             var errorMatch = errorRegex.exec(d.description);
39288             if (!errorMatch) {
39289                 /* eslint-disable no-console */
39290                 console.log('Unmatched: ', d.which_type);
39291                 console.log('  ', d.description);
39292                 console.log('  ', errorRegex);
39293                 /* eslint-enable no-console */
39294                 return;
39295             }
39296
39297             for (var i = 1; i < errorMatch.length; i++) {   // skip first
39298                 var capture = errorMatch[i];
39299                 var idType;
39300
39301                 idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
39302                 if (idType && capture) {   // link IDs if present in the capture
39303                     capture = parseError(capture, idType);
39304                 } else if (htmlRegex.test(capture)) {   // escape any html in non-IDs
39305                     capture = '\\' +  capture + '\\';
39306                 } else {
39307                     var compare = capture.toLowerCase();
39308                     if (localizeStrings[compare]) {   // some replacement strings can be localized
39309                         capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
39310                     }
39311                 }
39312
39313                 replacements['var' + i] = capture;
39314             }
39315
39316             return replacements;
39317         }
39318
39319
39320         function parseError(capture, idType) {
39321             var compare = capture.toLowerCase();
39322             if (localizeStrings[compare]) {   // some replacement strings can be localized
39323                 capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
39324             }
39325
39326             switch (idType) {
39327                 // link a string like "this node"
39328                 case 'this':
39329                     capture = linkErrorObject(capture);
39330                     break;
39331
39332                 case 'url':
39333                     capture = linkURL(capture);
39334                     break;
39335
39336                 // link an entity ID
39337                 case 'n':
39338                 case 'w':
39339                 case 'r':
39340                     capture = linkEntity(idType + capture);
39341                     break;
39342
39343                 // some errors have more complex ID lists/variance
39344                 case '20':
39345                     capture = parse20(capture);
39346                     break;
39347                 case '211':
39348                     capture = parse211(capture);
39349                     break;
39350                 case '231':
39351                     capture = parse231(capture);
39352                     break;
39353                 case '294':
39354                     capture = parse294(capture);
39355                     break;
39356                 case '370':
39357                     capture = parse370(capture);
39358                     break;
39359             }
39360
39361             return capture;
39362
39363
39364             function linkErrorObject(d) {
39365                 return '<a class="error_object_link">' + d + '</a>';
39366             }
39367
39368             function linkEntity(d) {
39369                 return '<a class="error_entity_link">' + d + '</a>';
39370             }
39371
39372             function linkURL(d) {
39373                 return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
39374             }
39375
39376             // arbitrary node list of form: #ID, #ID, #ID...
39377             function parse211(capture) {
39378                 var newList = [];
39379                 var items = capture.split(', ');
39380
39381                 items.forEach(function(item) {
39382                     // ID has # at the front
39383                     var id = linkEntity('n' + item.slice(1));
39384                     newList.push(id);
39385                 });
39386
39387                 return newList.join(', ');
39388             }
39389
39390             // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
39391             function parse231(capture) {
39392                 var newList = [];
39393                 // unfortunately 'layer' can itself contain commas, so we split on '),'
39394                 var items = capture.split('),');
39395
39396                 items.forEach(function(item) {
39397                     var match = item.match(/\#(\d+)\((.+)\)?/);
39398                     if (match !== null && match.length > 2) {
39399                         newList.push(linkEntity('w' + match[1]) + ' ' +
39400                             t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
39401                         );
39402                     }
39403                 });
39404
39405                 return newList.join(', ');
39406             }
39407
39408             // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
39409             function parse294(capture) {
39410                 var newList = [];
39411                 var items = capture.split(',');
39412
39413                 items.forEach(function(item) {
39414                     var role;
39415                     var idType;
39416                     var id;
39417
39418                     // item of form "from/to node/relation #ID"
39419                     item = item.split(' ');
39420
39421                     // to/from role is more clear in quotes
39422                     role = '"' + item[0] + '"';
39423
39424                     // first letter of node/relation provides the type
39425                     idType = item[1].slice(0,1);
39426
39427                     // ID has # at the front
39428                     id = item[2].slice(1);
39429                     id = linkEntity(idType + id);
39430
39431                     item = [role, item[1], id].join(' ');
39432                     newList.push(item);
39433                 });
39434
39435                 return newList.join(', ');
39436             }
39437
39438             // may or may not include the string "(including the name 'name')"
39439             function parse370(capture) {
39440                 if (!capture) return '';
39441
39442                 var match = capture.match(/\(including the name (\'.+\')\)/);
39443                 if (match !== null && match.length) {
39444                     return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
39445                 }
39446                 return '';
39447             }
39448
39449             // arbitrary node list of form: #ID,#ID,#ID...
39450             function parse20(capture) {
39451                 var newList = [];
39452                 var items = capture.split(',');
39453
39454                 items.forEach(function(item) {
39455                     // ID has # at the front
39456                     var id = linkEntity('n' + item.slice(1));
39457                     newList.push(id);
39458                 });
39459
39460                 return newList.join(', ');
39461             }
39462         }
39463
39464
39465         var serviceKeepRight = {
39466             init: function() {
39467                 if (!_krCache) {
39468                     this.reset();
39469                 }
39470
39471                 this.event = utilRebind(this, dispatch$1, 'on');
39472             },
39473
39474             reset: function() {
39475                 if (_krCache) {
39476                     Object.values(_krCache.inflightTile).forEach(abortRequest);
39477                 }
39478
39479                 _krCache = {
39480                     data: {},
39481                     loadedTile: {},
39482                     inflightTile: {},
39483                     inflightPost: {},
39484                     closed: {},
39485                     rtree: rbush_1()
39486                 };
39487             },
39488
39489
39490             // KeepRight API:  http://osm.mueschelsoft.de/keepright/interfacing.php
39491             loadErrors: function(projection) {
39492                 var options = { format: 'geojson' };
39493                 var rules = _krRuleset.join();
39494
39495                 // determine the needed tiles to cover the view
39496                 var tiles = tiler
39497                     .zoomExtent([_krZoom, _krZoom])
39498                     .getTiles(projection);
39499
39500                 // abort inflight requests that are no longer needed
39501                 abortUnwantedRequests(_krCache, tiles);
39502
39503                 // issue new requests..
39504                 tiles.forEach(function(tile) {
39505                     if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) return;
39506
39507                     var rect = tile.extent.rectangle();
39508                     var params = Object.assign({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
39509                     var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
39510
39511                     var controller = new AbortController();
39512                     _krCache.inflightTile[tile.id] = controller;
39513
39514                     d3_json(url, { signal: controller.signal })
39515                         .then(function(data) {
39516                             delete _krCache.inflightTile[tile.id];
39517                             _krCache.loadedTile[tile.id] = true;
39518                             if (!data || !data.features || !data.features.length) {
39519                                 throw new Error('No Data');
39520                             }
39521
39522                             data.features.forEach(function(feature) {
39523                                 var loc = feature.geometry.coordinates;
39524                                 var props = feature.properties;
39525
39526                                 // if there is a parent, save its error type e.g.:
39527                                 //  Error 191 = "highway-highway"
39528                                 //  Error 190 = "intersections without junctions"  (parent)
39529                                 var errorType = props.error_type;
39530                                 var errorTemplate = errorTypes[errorType];
39531                                 var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
39532
39533                                 // try to handle error type directly, fallback to parent error type.
39534                                 var whichType = errorTemplate ? errorType : parentErrorType;
39535                                 var whichTemplate = errorTypes[whichType];
39536
39537                                 // Rewrite a few of the errors at this point..
39538                                 // This is done to make them easier to linkify and translate.
39539                                 switch (whichType) {
39540                                     case '170':
39541                                         props.description = 'This feature has a FIXME tag: ' + props.description;
39542                                         break;
39543                                     case '292':
39544                                     case '293':
39545                                         props.description = props.description.replace('A turn-', 'This turn-');
39546                                         break;
39547                                     case '294':
39548                                     case '295':
39549                                     case '296':
39550                                     case '297':
39551                                     case '298':
39552                                         props.description = 'This turn-restriction~' + props.description;
39553                                         break;
39554                                     case '300':
39555                                         props.description = 'This highway is missing a maxspeed tag';
39556                                         break;
39557                                     case '411':
39558                                     case '412':
39559                                     case '413':
39560                                         props.description = 'This feature~' + props.description;
39561                                         break;
39562                                 }
39563
39564                                 // - move markers slightly so it doesn't obscure the geometry,
39565                                 // - then move markers away from other coincident markers
39566                                 var coincident = false;
39567                                 do {
39568                                     // first time, move marker up. after that, move marker right.
39569                                     var delta = coincident ? [0.00001, 0] : [0, 0.00001];
39570                                     loc = geoVecAdd(loc, delta);
39571                                     var bbox = geoExtent(loc).bbox();
39572                                     coincident = _krCache.rtree.search(bbox).length;
39573                                 } while (coincident);
39574
39575                                 var d = new qaError({
39576                                     // Required values
39577                                     loc: loc,
39578                                     service: 'keepRight',
39579                                     error_type: errorType,
39580                                     // Extra values for this service
39581                                     id: props.error_id,
39582                                     comment: props.comment || null,
39583                                     description: props.description || '',
39584                                     error_id: props.error_id,
39585                                     which_type: whichType,
39586                                     parent_error_type: parentErrorType,
39587                                     severity: whichTemplate.severity || 'error',
39588                                     object_id: props.object_id,
39589                                     object_type: props.object_type,
39590                                     schema: props.schema,
39591                                     title: props.title
39592                                 });
39593
39594                                 d.replacements = tokenReplacements(d);
39595
39596                                 _krCache.data[d.id] = d;
39597                                 _krCache.rtree.insert(encodeErrorRtree(d));
39598                             });
39599
39600                             dispatch$1.call('loaded');
39601                         })
39602                         .catch(function() {
39603                             delete _krCache.inflightTile[tile.id];
39604                             _krCache.loadedTile[tile.id] = true;
39605                         });
39606
39607                 });
39608             },
39609
39610
39611             postKeepRightUpdate: function(d, callback) {
39612                 if (_krCache.inflightPost[d.id]) {
39613                     return callback({ message: 'Error update already inflight', status: -2 }, d);
39614                 }
39615
39616                 var that = this;
39617                 var params = { schema: d.schema, id: d.error_id };
39618
39619                 if (d.state) {
39620                     params.st = d.state;
39621                 }
39622                 if (d.newComment !== undefined) {
39623                     params.co = d.newComment;
39624                 }
39625
39626                 // NOTE: This throws a CORS err, but it seems successful.
39627                 // We don't care too much about the response, so this is fine.
39628                 var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
39629
39630                 var controller = new AbortController();
39631                 _krCache.inflightPost[d.id] = controller;
39632
39633                 fetch(url, { method: 'POST', signal: controller.signal })
39634                     .then(function(response) {
39635                         delete _krCache.inflightPost[d.id];
39636                         if (!response.ok) {
39637                             throw new Error(response.status + ' ' + response.statusText);
39638                         }
39639
39640                         if (d.state === 'ignore') {   // ignore permanently (false positive)
39641                             that.removeError(d);
39642
39643                         } else if (d.state === 'ignore_t') {  // ignore temporarily (error fixed)
39644                             that.removeError(d);
39645                             _krCache.closed[d.schema + ':' + d.error_id] = true;
39646
39647                         } else {
39648                             d = that.replaceError(d.update({
39649                                 comment: d.newComment,
39650                                 newComment: undefined,
39651                                 state: undefined
39652                             }));
39653                         }
39654
39655                         if (callback) callback(null, d);
39656                     })
39657                     .catch(function(err) {
39658                         delete _krCache.inflightPost[d.id];
39659                         if (callback) callback(err.message);
39660                     });
39661             },
39662
39663
39664             // get all cached errors covering the viewport
39665             getErrors: function(projection) {
39666                 var viewport = projection.clipExtent();
39667                 var min = [viewport[0][0], viewport[1][1]];
39668                 var max = [viewport[1][0], viewport[0][1]];
39669                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
39670
39671                 return _krCache.rtree.search(bbox).map(function(d) {
39672                     return d.data;
39673                 });
39674             },
39675
39676
39677             // get a single error from the cache
39678             getError: function(id) {
39679                 return _krCache.data[id];
39680             },
39681
39682
39683             // replace a single error in the cache
39684             replaceError: function(error) {
39685                 if (!(error instanceof qaError) || !error.id) return;
39686
39687                 _krCache.data[error.id] = error;
39688                 updateRtree(encodeErrorRtree(error), true); // true = replace
39689                 return error;
39690             },
39691
39692
39693             // remove a single error from the cache
39694             removeError: function(error) {
39695                 if (!(error instanceof qaError) || !error.id) return;
39696
39697                 delete _krCache.data[error.id];
39698                 updateRtree(encodeErrorRtree(error), false); // false = remove
39699             },
39700
39701
39702             errorURL: function(error) {
39703                 return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
39704             },
39705
39706
39707             // Get an array of errors closed during this session.
39708             // Used to populate `closed:keepright` changeset tag
39709             getClosedIDs: function() {
39710                 return Object.keys(_krCache.closed).sort();
39711             }
39712
39713         };
39714
39715         var tiler$1 = utilTiler();
39716         var dispatch$2 = dispatch('loaded');
39717
39718         var _erCache;
39719         var _erZoom = 14;
39720
39721         var _impOsmUrls = {
39722             ow: 'https://directionofflow.skobbler.net/directionOfFlowService',
39723             mr: 'https://missingroads.skobbler.net/missingGeoService',
39724             tr: 'https://turnrestrictionservice.skobbler.net/turnRestrictionService'
39725         };
39726
39727         function abortRequest$1(i) {
39728             Object.values(i).forEach(function(controller) {
39729                 if (controller) {
39730                     controller.abort();
39731                 }
39732             });
39733         }
39734
39735         function abortUnwantedRequests$1(cache, tiles) {
39736             Object.keys(cache.inflightTile).forEach(function(k) {
39737                 var wanted = tiles.find(function(tile) { return k === tile.id; });
39738                 if (!wanted) {
39739                     abortRequest$1(cache.inflightTile[k]);
39740                     delete cache.inflightTile[k];
39741                 }
39742             });
39743         }
39744
39745
39746         function encodeErrorRtree$1(d) {
39747             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
39748         }
39749
39750
39751         // replace or remove error from rtree
39752         function updateRtree$1(item, replace) {
39753             _erCache.rtree.remove(item, function isEql(a, b) {
39754                 return a.data.id === b.data.id;
39755             });
39756
39757             if (replace) {
39758                 _erCache.rtree.insert(item);
39759             }
39760         }
39761
39762         function linkErrorObject(d) {
39763             return '<a class="error_object_link">' + d + '</a>';
39764         }
39765
39766         function linkEntity(d) {
39767             return '<a class="error_entity_link">' + d + '</a>';
39768         }
39769
39770         function pointAverage(points) {
39771             if (points.length) {
39772                 var sum = points.reduce(function(acc, point) {
39773                     return geoVecAdd(acc, [point.lon, point.lat]);
39774                 }, [0,0]);
39775                 return geoVecScale(sum, 1 / points.length);
39776             } else {
39777                 return [0,0];
39778             }
39779         }
39780
39781         function relativeBearing(p1, p2) {
39782             var angle = Math.atan2(p2.lon - p1.lon, p2.lat - p1.lat);
39783             if (angle < 0) {
39784                 angle += 2 * Math.PI;
39785             }
39786
39787             // Return degrees
39788             return angle * 180 / Math.PI;
39789         }
39790
39791         // Assuming range [0,360)
39792         function cardinalDirection(bearing) {
39793             var dir = 45 * Math.round(bearing / 45);
39794             var compass = {
39795                 0: 'north',
39796                 45: 'northeast',
39797                 90: 'east',
39798                 135: 'southeast',
39799                 180: 'south',
39800                 225: 'southwest',
39801                 270: 'west',
39802                 315: 'northwest',
39803                 360: 'north'
39804             };
39805
39806             return t('QA.improveOSM.directions.' + compass[dir]);
39807         }
39808
39809         // Errors shouldn't obscure eachother
39810         function preventCoincident(loc, bumpUp) {
39811             var coincident = false;
39812             do {
39813                 // first time, move marker up. after that, move marker right.
39814                 var delta = coincident ? [0.00001, 0] : (bumpUp ? [0, 0.00001] : [0, 0]);
39815                 loc = geoVecAdd(loc, delta);
39816                 var bbox = geoExtent(loc).bbox();
39817                 coincident = _erCache.rtree.search(bbox).length;
39818             } while (coincident);
39819
39820             return loc;
39821         }
39822
39823         var serviceImproveOSM = {
39824             init: function() {
39825                 if (!_erCache) {
39826                     this.reset();
39827                 }
39828
39829                 this.event = utilRebind(this, dispatch$2, 'on');
39830             },
39831
39832             reset: function() {
39833                 if (_erCache) {
39834                     Object.values(_erCache.inflightTile).forEach(abortRequest$1);
39835                 }
39836                 _erCache = {
39837                     data: {},
39838                     loadedTile: {},
39839                     inflightTile: {},
39840                     inflightPost: {},
39841                     closed: {},
39842                     rtree: rbush_1()
39843                 };
39844             },
39845
39846             loadErrors: function(projection) {
39847                 var options = {
39848                     client: 'iD',
39849                     status: 'OPEN',
39850                     zoom: '19' // Use a high zoom so that clusters aren't returned
39851                 };
39852
39853                 // determine the needed tiles to cover the view
39854                 var tiles = tiler$1
39855                     .zoomExtent([_erZoom, _erZoom])
39856                     .getTiles(projection);
39857
39858                 // abort inflight requests that are no longer needed
39859                 abortUnwantedRequests$1(_erCache, tiles);
39860
39861                 // issue new requests..
39862                 tiles.forEach(function(tile) {
39863                     if (_erCache.loadedTile[tile.id] || _erCache.inflightTile[tile.id]) return;
39864
39865                     var rect = tile.extent.rectangle();
39866                     var params = Object.assign({}, options, { east: rect[0], south: rect[3], west: rect[2], north: rect[1] });
39867
39868                     // 3 separate requests to store for each tile
39869                     var requests = {};
39870
39871                     Object.keys(_impOsmUrls).forEach(function(k) {
39872                         var v = _impOsmUrls[k];
39873                         // We exclude WATER from missing geometry as it doesn't seem useful
39874                         // We use most confident one-way and turn restrictions only, still have false positives
39875                         var kParams = Object.assign({},
39876                             params,
39877                             (k === 'mr') ? { type: 'PARKING,ROAD,BOTH,PATH' } : { confidenceLevel: 'C1' }
39878                         );
39879                         var url = v + '/search?' + utilQsString(kParams);
39880
39881                         var controller = new AbortController();
39882                         requests[k] = controller;
39883
39884                         d3_json(url, { signal: controller.signal })
39885                             .then(function(data) {
39886                                 delete _erCache.inflightTile[tile.id][k];
39887                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
39888                                     delete _erCache.inflightTile[tile.id];
39889                                     _erCache.loadedTile[tile.id] = true;
39890                                 }
39891
39892                                 // Road segments at high zoom == oneways
39893                                 if (data.roadSegments) {
39894                                     data.roadSegments.forEach(function(feature) {
39895                                         // Position error at the approximate middle of the segment
39896                                         var points = feature.points;
39897                                         var mid = points.length / 2;
39898                                         var loc;
39899
39900                                         // Even number of points, find midpoint of the middle two
39901                                         // Odd number of points, use position of very middle point
39902                                         if (mid % 1 === 0) {
39903                                             loc = pointAverage([points[mid - 1], points[mid]]);
39904                                         } else {
39905                                             mid = points[Math.floor(mid)];
39906                                             loc = [mid.lon, mid.lat];
39907                                         }
39908
39909                                         // One-ways can land on same segment in opposite direction
39910                                         loc = preventCoincident(loc, false);
39911
39912                                         var d = new qaError({
39913                                             // Info required for every error
39914                                             loc: loc,
39915                                             service: 'improveOSM',
39916                                             error_type: k,
39917                                             // Extra details needed for this service
39918                                             error_key: k,
39919                                             identifier: { // this is used to post changes to the error
39920                                                 wayId: feature.wayId,
39921                                                 fromNodeId: feature.fromNodeId,
39922                                                 toNodeId: feature.toNodeId
39923                                             },
39924                                             object_id: feature.wayId,
39925                                             object_type: 'way',
39926                                             status: feature.status
39927                                         });
39928
39929                                         // Variables used in the description
39930                                         d.replacements = {
39931                                             percentage: feature.percentOfTrips,
39932                                             num_trips: feature.numberOfTrips,
39933                                             highway: linkErrorObject(t('QA.keepRight.error_parts.highway')),
39934                                             from_node: linkEntity('n' + feature.fromNodeId),
39935                                             to_node: linkEntity('n' + feature.toNodeId)
39936                                         };
39937
39938                                         _erCache.data[d.id] = d;
39939                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
39940                                     });
39941                                 }
39942
39943                                 // Tiles at high zoom == missing roads
39944                                 if (data.tiles) {
39945                                     data.tiles.forEach(function(feature) {
39946                                         var geoType = feature.type.toLowerCase();
39947
39948                                         // Average of recorded points should land on the missing geometry
39949                                         // Missing geometry could happen to land on another error
39950                                         var loc = pointAverage(feature.points);
39951                                         loc = preventCoincident(loc, false);
39952
39953                                         var d = new qaError({
39954                                             // Info required for every error
39955                                             loc: loc,
39956                                             service: 'improveOSM',
39957                                             error_type: k + '-' + geoType,
39958                                             // Extra details needed for this service
39959                                             error_key: k,
39960                                             identifier: { x: feature.x, y: feature.y },
39961                                             status: feature.status
39962                                         });
39963
39964                                         d.replacements = {
39965                                             num_trips: feature.numberOfTrips,
39966                                             geometry_type: t('QA.improveOSM.geometry_types.' + geoType)
39967                                         };
39968
39969                                         // -1 trips indicates data came from a 3rd party
39970                                         if (feature.numberOfTrips === -1) {
39971                                             d.desc = t('QA.improveOSM.error_types.mr.description_alt', d.replacements);
39972                                         }
39973
39974                                         _erCache.data[d.id] = d;
39975                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
39976                                     });
39977                                 }
39978
39979                                 // Entities at high zoom == turn restrictions
39980                                 if (data.entities) {
39981                                     data.entities.forEach(function(feature) {
39982                                         // Turn restrictions could be missing at same junction
39983                                         // We also want to bump the error up so node is accessible
39984                                         var loc = feature.point;
39985                                         loc = preventCoincident([loc.lon, loc.lat], true);
39986
39987                                         // Elements are presented in a strange way
39988                                         var ids = feature.id.split(',');
39989                                         var from_way = ids[0];
39990                                         var via_node = ids[3];
39991                                         var to_way = ids[2].split(':')[1];
39992
39993                                         var d = new qaError({
39994                                             // Info required for every error
39995                                             loc: loc,
39996                                             service: 'improveOSM',
39997                                             error_type: k,
39998                                             // Extra details needed for this service
39999                                             error_key: k,
40000                                             identifier: feature.id,
40001                                             object_id: via_node,
40002                                             object_type: 'node',
40003                                             status: feature.status
40004                                         });
40005
40006                                         // Travel direction along from_way clarifies the turn restriction
40007                                         var p1 = feature.segments[0].points[0];
40008                                         var p2 = feature.segments[0].points[1];
40009
40010                                         var dir_of_travel = cardinalDirection(relativeBearing(p1, p2));
40011
40012                                         // Variables used in the description
40013                                         d.replacements = {
40014                                             num_passed: feature.numberOfPasses,
40015                                             num_trips: feature.segments[0].numberOfTrips,
40016                                             turn_restriction: feature.turnType.toLowerCase(),
40017                                             from_way: linkEntity('w' + from_way),
40018                                             to_way: linkEntity('w' + to_way),
40019                                             travel_direction: dir_of_travel,
40020                                             junction: linkErrorObject(t('QA.keepRight.error_parts.this_node'))
40021                                         };
40022
40023                                         _erCache.data[d.id] = d;
40024                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
40025                                         dispatch$2.call('loaded');
40026                                     });
40027                                 }
40028                             })
40029                             .catch(function() {
40030                                 delete _erCache.inflightTile[tile.id][k];
40031                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
40032                                     delete _erCache.inflightTile[tile.id];
40033                                     _erCache.loadedTile[tile.id] = true;
40034                                 }
40035                             });
40036                     });
40037
40038                     _erCache.inflightTile[tile.id] = requests;
40039                 });
40040             },
40041
40042             getComments: function(d, callback) {
40043                 // If comments already retrieved no need to do so again
40044                 if (d.comments !== undefined) {
40045                     if (callback) callback({}, d);
40046                     return;
40047                 }
40048
40049                 var key = d.error_key;
40050                 var qParams = {};
40051
40052                 if (key === 'ow') {
40053                     qParams = d.identifier;
40054                 } else if (key === 'mr') {
40055                     qParams.tileX = d.identifier.x;
40056                     qParams.tileY = d.identifier.y;
40057                 } else if (key === 'tr') {
40058                     qParams.targetId = d.identifier;
40059                 }
40060
40061                 var url = _impOsmUrls[key] + '/retrieveComments?' + utilQsString(qParams);
40062
40063                 var that = this;
40064                 d3_json(url)
40065                     .then(function(data) {
40066                         // comments are served newest to oldest
40067                         var comments = data.comments ? data.comments.reverse() : [];
40068                         that.replaceError(d.update({ comments: comments }));
40069                         if (callback) callback(null, d);
40070                     })
40071                     .catch(function(err) {
40072                         if (callback) callback(err.message);
40073                     });
40074             },
40075
40076             postUpdate: function(d, callback) {
40077                 if (!serviceOsm.authenticated()) { // Username required in payload
40078                     return callback({ message: 'Not Authenticated', status: -3}, d);
40079                 }
40080                 if (_erCache.inflightPost[d.id]) {
40081                     return callback({ message: 'Error update already inflight', status: -2 }, d);
40082                 }
40083
40084                 var that = this;
40085
40086                 // Payload can only be sent once username is established
40087                 serviceOsm.userDetails(sendPayload);
40088
40089                 function sendPayload(err, user) {
40090                     if (err) { return callback(err, d); }
40091
40092                     var key = d.error_key;
40093                     var url = _impOsmUrls[key] + '/comment';
40094                     var payload = {
40095                         username: user.display_name
40096                     };
40097
40098                     // Each error type has different data for identification
40099                     if (key === 'ow') {
40100                         payload.roadSegments = [ d.identifier ];
40101                     } else if (key === 'mr') {
40102                         payload.tiles = [ d.identifier ];
40103                     } else if (key === 'tr') {
40104                         payload.targetIds = [ d.identifier ];
40105                     }
40106
40107                     if (d.newStatus !== undefined) {
40108                         payload.status = d.newStatus;
40109                         payload.text = 'status changed';
40110                     }
40111
40112                     // Comment take place of default text
40113                     if (d.newComment !== undefined) {
40114                         payload.text = d.newComment;
40115                     }
40116
40117                     var controller = new AbortController();
40118                     _erCache.inflightPost[d.id] = controller;
40119
40120                     var options = {
40121                         method: 'POST',
40122                         signal: controller.signal,
40123                         body: JSON.stringify(payload)
40124                     };
40125
40126                      d3_json(url, options)
40127                         .then(function() {
40128                             delete _erCache.inflightPost[d.id];
40129
40130                             // Just a comment, update error in cache
40131                             if (d.newStatus === undefined) {
40132                                 var now = new Date();
40133                                 var comments = d.comments ? d.comments : [];
40134
40135                                 comments.push({
40136                                     username: payload.username,
40137                                     text: payload.text,
40138                                     timestamp: now.getTime() / 1000
40139                                 });
40140
40141                                 that.replaceError(d.update({
40142                                     comments: comments,
40143                                     newComment: undefined
40144                                 }));
40145                             } else {
40146                                 that.removeError(d);
40147                                 if (d.newStatus === 'SOLVED') {
40148                                     // No pretty identifier, so we just use coordinates
40149                                     var closedID = d.loc[1].toFixed(5) + '/' + d.loc[0].toFixed(5);
40150                                     _erCache.closed[key + ':' + closedID] = true;
40151                                 }
40152                             }
40153                             if (callback) callback(null, d);
40154                         })
40155                         .catch(function(err) {
40156                             delete _erCache.inflightPost[d.id];
40157                             if (callback) callback(err.message);
40158                         });
40159                 }
40160             },
40161
40162
40163             // get all cached errors covering the viewport
40164             getErrors: function(projection) {
40165                 var viewport = projection.clipExtent();
40166                 var min = [viewport[0][0], viewport[1][1]];
40167                 var max = [viewport[1][0], viewport[0][1]];
40168                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
40169
40170                 return _erCache.rtree.search(bbox).map(function(d) {
40171                     return d.data;
40172                 });
40173             },
40174
40175             // get a single error from the cache
40176             getError: function(id) {
40177                 return _erCache.data[id];
40178             },
40179
40180             // replace a single error in the cache
40181             replaceError: function(error) {
40182                 if (!(error instanceof qaError) || !error.id) return;
40183
40184                 _erCache.data[error.id] = error;
40185                 updateRtree$1(encodeErrorRtree$1(error), true); // true = replace
40186                 return error;
40187             },
40188
40189             // remove a single error from the cache
40190             removeError: function(error) {
40191                 if (!(error instanceof qaError) || !error.id) return;
40192
40193                 delete _erCache.data[error.id];
40194                 updateRtree$1(encodeErrorRtree$1(error), false); // false = remove
40195             },
40196
40197             // Used to populate `closed:improveosm` changeset tag
40198             getClosedIDs: function() {
40199                 return Object.keys(_erCache.closed).sort();
40200             }
40201         };
40202
40203         /*
40204             A standalone SVG element that contains only a `defs` sub-element. To be
40205             used once globally, since defs IDs must be unique within a document.
40206         */
40207         function svgDefs(context) {
40208
40209             function drawDefs(selection) {
40210                 var defs = selection.append('defs');
40211
40212                 // add markers
40213                 defs
40214                     .append('marker')
40215                     .attr('id', 'oneway-marker')
40216                     .attr('viewBox', '0 0 10 5')
40217                     .attr('refX', 2.5)
40218                     .attr('refY', 2.5)
40219                     .attr('markerWidth', 2)
40220                     .attr('markerHeight', 2)
40221                     .attr('markerUnits', 'strokeWidth')
40222                     .attr('orient', 'auto')
40223                     .append('path')
40224                     .attr('class', 'oneway-marker-path')
40225                     .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')
40226                     .attr('stroke', 'none')
40227                     .attr('fill', '#000')
40228                     .attr('opacity', '0.75');
40229
40230                 // SVG markers have to be given a colour where they're defined
40231                 // (they can't inherit it from the line they're attached to),
40232                 // so we need to manually define markers for each color of tag
40233                 // (also, it's slightly nicer if we can control the
40234                 // positioning for different tags)
40235                 function addSidedMarker(name, color, offset) {
40236                     defs
40237                         .append('marker')
40238                         .attr('id', 'sided-marker-' + name)
40239                         .attr('viewBox', '0 0 2 2')
40240                         .attr('refX', 1)
40241                         .attr('refY', -offset)
40242                         .attr('markerWidth', 1.5)
40243                         .attr('markerHeight', 1.5)
40244                         .attr('markerUnits', 'strokeWidth')
40245                         .attr('orient', 'auto')
40246                         .append('path')
40247                         .attr('class', 'sided-marker-path sided-marker-' + name + '-path')
40248                         .attr('d', 'M 0,0 L 1,1 L 2,0 z')
40249                         .attr('stroke', 'none')
40250                         .attr('fill', color);
40251                 }
40252                 addSidedMarker('natural', 'rgb(140, 208, 95)', 0);
40253                 // for a coastline, the arrows are (somewhat unintuitively) on
40254                 // the water side, so let's color them blue (with a gap) to
40255                 // give a stronger indication
40256                 addSidedMarker('coastline', '#77dede', 1);
40257                 addSidedMarker('waterway', '#77dede', 1);
40258                 // barriers have a dashed line, and separating the triangle
40259                 // from the line visually suits that
40260                 addSidedMarker('barrier', '#ddd', 1);
40261                 addSidedMarker('man_made', '#fff', 0);
40262
40263                 defs
40264                     .append('marker')
40265                     .attr('id', 'viewfield-marker')
40266                     .attr('viewBox', '0 0 16 16')
40267                     .attr('refX', 8)
40268                     .attr('refY', 16)
40269                     .attr('markerWidth', 4)
40270                     .attr('markerHeight', 4)
40271                     .attr('markerUnits', 'strokeWidth')
40272                     .attr('orient', 'auto')
40273                     .append('path')
40274                     .attr('class', 'viewfield-marker-path')
40275                     .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')
40276                     .attr('fill', '#333')
40277                     .attr('fill-opacity', '0.75')
40278                     .attr('stroke', '#fff')
40279                     .attr('stroke-width', '0.5px')
40280                     .attr('stroke-opacity', '0.75');
40281
40282                 defs
40283                     .append('marker')
40284                     .attr('id', 'viewfield-marker-wireframe')
40285                     .attr('viewBox', '0 0 16 16')
40286                     .attr('refX', 8)
40287                     .attr('refY', 16)
40288                     .attr('markerWidth', 4)
40289                     .attr('markerHeight', 4)
40290                     .attr('markerUnits', 'strokeWidth')
40291                     .attr('orient', 'auto')
40292                     .append('path')
40293                     .attr('class', 'viewfield-marker-path')
40294                     .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')
40295                     .attr('fill', 'none')
40296                     .attr('stroke', '#fff')
40297                     .attr('stroke-width', '0.5px')
40298                     .attr('stroke-opacity', '0.75');
40299
40300                 // add patterns
40301                 var patterns = defs.selectAll('pattern')
40302                     .data([
40303                         // pattern name, pattern image name
40304                         ['beach', 'dots'],
40305                         ['construction', 'construction'],
40306                         ['cemetery', 'cemetery'],
40307                         ['cemetery_christian', 'cemetery_christian'],
40308                         ['cemetery_buddhist', 'cemetery_buddhist'],
40309                         ['cemetery_muslim', 'cemetery_muslim'],
40310                         ['cemetery_jewish', 'cemetery_jewish'],
40311                         ['farmland', 'farmland'],
40312                         ['farmyard', 'farmyard'],
40313                         ['forest', 'forest'],
40314                         ['forest_broadleaved', 'forest_broadleaved'],
40315                         ['forest_needleleaved', 'forest_needleleaved'],
40316                         ['forest_leafless', 'forest_leafless'],
40317                         ['grass', 'grass'],
40318                         ['landfill', 'landfill'],
40319                         ['meadow', 'grass'],
40320                         ['orchard', 'orchard'],
40321                         ['pond', 'pond'],
40322                         ['quarry', 'quarry'],
40323                         ['scrub', 'bushes'],
40324                         ['vineyard', 'vineyard'],
40325                         ['water_standing', 'lines'],
40326                         ['waves', 'waves'],
40327                         ['wetland', 'wetland'],
40328                         ['wetland_marsh', 'wetland_marsh'],
40329                         ['wetland_swamp', 'wetland_swamp'],
40330                         ['wetland_bog', 'wetland_bog'],
40331                         ['wetland_reedbed', 'wetland_reedbed']
40332                     ])
40333                     .enter()
40334                     .append('pattern')
40335                     .attr('id', function (d) { return 'pattern-' + d[0]; })
40336                     .attr('width', 32)
40337                     .attr('height', 32)
40338                     .attr('patternUnits', 'userSpaceOnUse');
40339
40340                 patterns
40341                     .append('rect')
40342                     .attr('x', 0)
40343                     .attr('y', 0)
40344                     .attr('width', 32)
40345                     .attr('height', 32)
40346                     .attr('class', function (d) { return 'pattern-color-' + d[0]; });
40347
40348                 patterns
40349                     .append('image')
40350                     .attr('x', 0)
40351                     .attr('y', 0)
40352                     .attr('width', 32)
40353                     .attr('height', 32)
40354                     .attr('xlink:href', function (d) {
40355                         return context.imagePath('pattern/' + d[1] + '.png');
40356                     });
40357
40358                 // add clip paths
40359                 defs.selectAll('clipPath')
40360                     .data([12, 18, 20, 32, 45])
40361                     .enter()
40362                     .append('clipPath')
40363                     .attr('id', function (d) { return 'clip-square-' + d; })
40364                     .append('rect')
40365                     .attr('x', 0)
40366                     .attr('y', 0)
40367                     .attr('width', function (d) { return d; })
40368                     .attr('height', function (d) { return d; });
40369
40370                 // add symbol spritesheets
40371                 defs
40372                     .call(drawDefs.addSprites, [
40373                         'iD-sprite', 'maki-sprite', 'temaki-sprite', 'fa-sprite', 'tnp-sprite', 'community-sprite'
40374                     ], true);
40375             }
40376
40377
40378             drawDefs.addSprites = function(selection, ids, overrideColors) {
40379                 var spritesheets = selection.selectAll('.spritesheet');
40380                 var currData = spritesheets.data();
40381                 var data = utilArrayUniq(currData.concat(ids));
40382
40383                 spritesheets
40384                     .data(data)
40385                     .enter()
40386                     .append('g')
40387                     .attr('class', function(d) { return 'spritesheet spritesheet-' + d; })
40388                     .each(function(d) {
40389                         var url = context.imagePath(d + '.svg');
40390                         var node = d3_select(this).node();
40391
40392                         svg(url)
40393                             .then(function(svg) {
40394                                 node.appendChild(
40395                                     d3_select(svg.documentElement).attr('id', d).node()
40396                                 );
40397                                 if (overrideColors && d !== 'iD-sprite') {   // allow icon colors to be overridden..
40398                                     d3_select(node).selectAll('path')
40399                                         .attr('fill', 'currentColor');
40400                                 }
40401                             })
40402                             .catch(function() {
40403                                 /* ignore */
40404                             });
40405                     });
40406             };
40407
40408
40409             return drawDefs;
40410         }
40411
40412         /* global Mapillary:false */
40413
40414
40415         var apibase = 'https://a.mapillary.com/v3/';
40416         var viewercss = 'mapillary-js/mapillary.min.css';
40417         var viewerjs = 'mapillary-js/mapillary.min.js';
40418         var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
40419         var maxResults = 1000;
40420         var tileZoom = 14;
40421         var tiler$2 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
40422         var dispatch$3 = dispatch('loadedImages', 'loadedSigns', 'bearingChanged');
40423         var _mlyFallback = false;
40424         var _mlyCache;
40425         var _mlyClicks;
40426         var _mlySelectedImage;
40427         var _mlyViewer;
40428
40429
40430         function abortRequest$2(controller) {
40431             controller.abort();
40432         }
40433
40434
40435         function maxPageAtZoom(z) {
40436             if (z < 15)   return 2;
40437             if (z === 15) return 5;
40438             if (z === 16) return 10;
40439             if (z === 17) return 20;
40440             if (z === 18) return 40;
40441             if (z > 18)   return 80;
40442         }
40443
40444
40445         function loadTiles(which, url, projection) {
40446             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
40447             var tiles = tiler$2.getTiles(projection);
40448
40449             // abort inflight requests that are no longer needed
40450             var cache = _mlyCache[which];
40451             Object.keys(cache.inflight).forEach(function(k) {
40452                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
40453                 if (!wanted) {
40454                     abortRequest$2(cache.inflight[k]);
40455                     delete cache.inflight[k];
40456                 }
40457             });
40458
40459             tiles.forEach(function(tile) {
40460                 loadNextTilePage(which, currZoom, url, tile);
40461             });
40462         }
40463
40464
40465         function loadNextTilePage(which, currZoom, url, tile) {
40466             var cache = _mlyCache[which];
40467             var rect = tile.extent.rectangle();
40468             var maxPages = maxPageAtZoom(currZoom);
40469             var nextPage = cache.nextPage[tile.id] || 0;
40470             var nextURL = cache.nextURL[tile.id] || url +
40471                 utilQsString({
40472                     per_page: maxResults,
40473                     page: nextPage,
40474                     client_id: clientId,
40475                     bbox: [rect[0], rect[1], rect[2], rect[3]].join(','),
40476                 });
40477
40478             if (nextPage > maxPages) return;
40479
40480             var id = tile.id + ',' + String(nextPage);
40481             if (cache.loaded[id] || cache.inflight[id]) return;
40482
40483             var controller = new AbortController();
40484             cache.inflight[id] = controller;
40485
40486             var options = {
40487                 method: 'GET',
40488                 signal: controller.signal,
40489                 headers: { 'Content-Type': 'application/json' }
40490             };
40491
40492             fetch(nextURL, options)
40493                 .then(function(response) {
40494                     if (!response.ok) {
40495                         throw new Error(response.status + ' ' + response.statusText);
40496                     }
40497                     var linkHeader = response.headers.get('Link');
40498                     if (linkHeader) {
40499                         var pagination = parsePagination(linkHeader);
40500                         if (pagination.next) {
40501                             cache.nextURL[tile.id] = pagination.next;
40502                         }
40503                     }
40504                     return response.json();
40505                 })
40506                 .then(function(data) {
40507                     cache.loaded[id] = true;
40508                     delete cache.inflight[id];
40509                     if (!data || !data.features || !data.features.length) {
40510                         throw new Error('No Data');
40511                     }
40512
40513                     var features = data.features.map(function(feature) {
40514                         var loc = feature.geometry.coordinates;
40515                         var d;
40516
40517                         // An image (shown as a green dot on the map) is a single street photo with extra
40518                         // information such as location, camera angle (CA), camera model, and so on.
40519                         // Each image feature is a GeoJSON Point
40520                         if (which === 'images') {
40521                             d = {
40522                                 loc: loc,
40523                                 key: feature.properties.key,
40524                                 ca: feature.properties.ca,
40525                                 captured_at: feature.properties.captured_at,
40526                                 captured_by: feature.properties.username,
40527                                 pano: feature.properties.pano
40528                             };
40529
40530                             cache.forImageKey[d.key] = d;     // cache imageKey -> image
40531
40532                         // Mapillary organizes images as sequences. A sequence of images are continuously captured
40533                         // by a user at a give time. Sequences are shown on the map as green lines.
40534                         // Each sequence feature is a GeoJSON LineString
40535                         } else if (which === 'sequences') {
40536                             var sequenceKey = feature.properties.key;
40537                             cache.lineString[sequenceKey] = feature;           // cache sequenceKey -> lineString
40538                             feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
40539                                 cache.forImageKey[imageKey] = sequenceKey;     // cache imageKey -> sequenceKey
40540                             });
40541                             return false;    // because no `d` data worth loading into an rbush
40542
40543                         // An image detection is a semantic pixel area on an image. The area could indicate
40544                         // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
40545                         // Each image_detection feature is a GeoJSON Point (located where the image was taken)
40546                         } else if (which === 'image_detections') {
40547                             d = {
40548                                 key: feature.properties.key,
40549                                 image_key: feature.properties.image_key,
40550                                 value: feature.properties.value,
40551                                 package: feature.properties.package,
40552                                 shape: feature.properties.shape
40553                             };
40554
40555                             // cache imageKey -> image_detections
40556                             if (!cache.forImageKey[d.image_key]) {
40557                                 cache.forImageKey[d.image_key] = [];
40558                             }
40559                             cache.forImageKey[d.image_key].push(d);
40560                             return false;    // because no `d` data worth loading into an rbush
40561
40562
40563                         // A map feature is a real world object that can be shown on a map. It could be any object
40564                         // recognized from images, manually added in images, or added on the map.
40565                         // Each map feature is a GeoJSON Point (located where the feature is)
40566                         } else if (which === 'map_features') {
40567                             d = {
40568                                 loc: loc,
40569                                 key: feature.properties.key,
40570                                 value: feature.properties.value,
40571                                 package: feature.properties.package,
40572                                 detections: feature.properties.detections
40573                             };
40574                         }
40575
40576                         return {
40577                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
40578                         };
40579
40580                     }).filter(Boolean);
40581
40582                     if (cache.rtree && features) {
40583                         cache.rtree.load(features);
40584                     }
40585
40586                     if (data.features.length === maxResults) {  // more pages to load
40587                         cache.nextPage[tile.id] = nextPage + 1;
40588                         loadNextTilePage(which, currZoom, url, tile);
40589                     } else {
40590                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
40591                     }
40592
40593                     if (which === 'images' || which === 'sequences') {
40594                         dispatch$3.call('loadedImages');
40595                     } else if (which === 'map_features') {
40596                         dispatch$3.call('loadedSigns');
40597                     }
40598                 })
40599                 .catch(function() {
40600                     cache.loaded[id] = true;
40601                     delete cache.inflight[id];
40602                 });
40603         }
40604
40605         // extract links to pages of API results
40606         function parsePagination(links) {
40607             return links.split(',').map(function(rel) {
40608                 var elements = rel.split(';');
40609                 if (elements.length === 2) {
40610                     return [
40611                         /<(.+)>/.exec(elements[0])[1],
40612                         /rel="(.+)"/.exec(elements[1])[1]
40613                     ];
40614                 } else {
40615                     return ['',''];
40616                 }
40617             }).reduce(function(pagination, val) {
40618                 pagination[val[1]] = val[0];
40619                 return pagination;
40620             }, {});
40621         }
40622
40623
40624         // partition viewport into higher zoom tiles
40625         function partitionViewport(projection) {
40626             var z = geoScaleToZoom(projection.scale());
40627             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
40628             var tiler = utilTiler().zoomExtent([z2, z2]);
40629
40630             return tiler.getTiles(projection)
40631                 .map(function(tile) { return tile.extent; });
40632         }
40633
40634
40635         // no more than `limit` results per partition.
40636         function searchLimited(limit, projection, rtree) {
40637             limit = limit || 5;
40638
40639             return partitionViewport(projection)
40640                 .reduce(function(result, extent) {
40641                     var found = rtree.search(extent.bbox())
40642                         .slice(0, limit)
40643                         .map(function(d) { return d.data; });
40644
40645                     return (found.length ? result.concat(found) : result);
40646                 }, []);
40647         }
40648
40649
40650
40651         var serviceMapillary = {
40652
40653             init: function() {
40654                 if (!_mlyCache) {
40655                     this.reset();
40656                 }
40657
40658                 this.event = utilRebind(this, dispatch$3, 'on');
40659             },
40660
40661             reset: function() {
40662                 if (_mlyCache) {
40663                     Object.values(_mlyCache.images.inflight).forEach(abortRequest$2);
40664                     Object.values(_mlyCache.image_detections.inflight).forEach(abortRequest$2);
40665                     Object.values(_mlyCache.map_features.inflight).forEach(abortRequest$2);
40666                     Object.values(_mlyCache.sequences.inflight).forEach(abortRequest$2);
40667                 }
40668
40669                 _mlyCache = {
40670                     images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {} },
40671                     image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
40672                     map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() },
40673                     sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {}, lineString: {} }
40674                 };
40675
40676                 _mlySelectedImage = null;
40677                 _mlyClicks = [];
40678             },
40679
40680
40681             images: function(projection) {
40682                 var limit = 5;
40683                 return searchLimited(limit, projection, _mlyCache.images.rtree);
40684             },
40685
40686
40687             signs: function(projection) {
40688                 var limit = 5;
40689                 return searchLimited(limit, projection, _mlyCache.map_features.rtree);
40690             },
40691
40692
40693             cachedImage: function(imageKey) {
40694                 return _mlyCache.images.forImageKey[imageKey];
40695             },
40696
40697
40698             sequences: function(projection) {
40699                 var viewport = projection.clipExtent();
40700                 var min = [viewport[0][0], viewport[1][1]];
40701                 var max = [viewport[1][0], viewport[0][1]];
40702                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
40703                 var sequenceKeys = {};
40704
40705                 // all sequences for images in viewport
40706                 _mlyCache.images.rtree.search(bbox)
40707                     .forEach(function(d) {
40708                         var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
40709                         if (sequenceKey) {
40710                             sequenceKeys[sequenceKey] = true;
40711                         }
40712                     });
40713
40714                 // Return lineStrings for the sequences
40715                 return Object.keys(sequenceKeys).map(function(sequenceKey) {
40716                     return _mlyCache.sequences.lineString[sequenceKey];
40717                 });
40718             },
40719
40720
40721             signsSupported: function() {
40722                 return true;
40723             },
40724
40725
40726             loadImages: function(projection) {
40727                 loadTiles('images', apibase + 'images?', projection);
40728                 loadTiles('sequences', apibase + 'sequences?', projection);
40729             },
40730
40731
40732             loadSigns: function(projection) {
40733                 // if we are looking at signs, we'll actually need to fetch images too
40734                 loadTiles('images', apibase + 'images?', projection);
40735                 loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=1&', projection);
40736                 loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&', projection);
40737             },
40738
40739
40740             loadViewer: function(context) {
40741                 // add mly-wrapper
40742                 var wrap = d3_select('#photoviewer').selectAll('.mly-wrapper')
40743                     .data([0]);
40744
40745                 wrap.enter()
40746                     .append('div')
40747                     .attr('id', 'mly')
40748                     .attr('class', 'photo-wrapper mly-wrapper')
40749                     .classed('hide', true);
40750
40751                 // load mapillary-viewercss
40752                 d3_select('head').selectAll('#mapillary-viewercss')
40753                     .data([0])
40754                     .enter()
40755                     .append('link')
40756                     .attr('id', 'mapillary-viewercss')
40757                     .attr('rel', 'stylesheet')
40758                     .attr('href', context.asset(viewercss));
40759
40760                 // load mapillary-viewerjs
40761                 d3_select('head').selectAll('#mapillary-viewerjs')
40762                     .data([0])
40763                     .enter()
40764                     .append('script')
40765                     .attr('id', 'mapillary-viewerjs')
40766                     .attr('src', context.asset(viewerjs));
40767
40768                 // load mapillary signs sprite
40769                 var defs = context.container().select('defs');
40770                 defs.call(svgDefs(context).addSprites, ['mapillary-sprite'], false /* don't override colors */ );
40771
40772                 // Register viewer resize handler
40773                 context.ui().photoviewer.on('resize.mapillary', function() {
40774                     if (_mlyViewer) {
40775                         _mlyViewer.resize();
40776                     }
40777                 });
40778             },
40779
40780
40781             showViewer: function() {
40782                 var wrap = d3_select('#photoviewer')
40783                     .classed('hide', false);
40784
40785                 var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
40786
40787                 if (isHidden && _mlyViewer) {
40788                     wrap
40789                         .selectAll('.photo-wrapper:not(.mly-wrapper)')
40790                         .classed('hide', true);
40791
40792                     wrap
40793                         .selectAll('.photo-wrapper.mly-wrapper')
40794                         .classed('hide', false);
40795
40796                     _mlyViewer.resize();
40797                 }
40798
40799                 return this;
40800             },
40801
40802
40803             hideViewer: function() {
40804                 _mlySelectedImage = null;
40805
40806                 if (!_mlyFallback && _mlyViewer) {
40807                     _mlyViewer.getComponent('sequence').stop();
40808                 }
40809
40810                 var viewer = d3_select('#photoviewer');
40811                 if (!viewer.empty()) viewer.datum(null);
40812
40813                 viewer
40814                     .classed('hide', true)
40815                     .selectAll('.photo-wrapper')
40816                     .classed('hide', true);
40817
40818                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
40819                     .classed('currentView', false);
40820
40821                 return this.setStyles(null, true);
40822             },
40823
40824
40825             parsePagination: parsePagination,
40826
40827
40828             updateViewer: function(imageKey, context) {
40829                 if (!imageKey) return this;
40830
40831                 if (!_mlyViewer) {
40832                     this.initViewer(imageKey, context);
40833                 } else {
40834                     _mlyViewer.moveToKey(imageKey)
40835                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
40836                 }
40837
40838                 return this;
40839             },
40840
40841
40842             initViewer: function(imageKey, context) {
40843                 var that = this;
40844                 if (window.Mapillary && imageKey) {
40845                     var opts = {
40846                         baseImageSize: 320,
40847                         component: {
40848                             cover: false,
40849                             keyboard: false,
40850                             tag: true
40851                         }
40852                     };
40853
40854                     // Disable components requiring WebGL support
40855                     if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
40856                         _mlyFallback = true;
40857                         opts.component = {
40858                             cover: false,
40859                             direction: false,
40860                             imagePlane: false,
40861                             keyboard: false,
40862                             mouse: false,
40863                             sequence: false,
40864                             tag: false,
40865                             image: true,        // fallback
40866                             navigation: true    // fallback
40867                         };
40868                     }
40869
40870                     _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
40871                     _mlyViewer.on('nodechanged', nodeChanged);
40872                     _mlyViewer.on('bearingchanged', bearingChanged);
40873                     _mlyViewer.moveToKey(imageKey)
40874                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
40875                 }
40876
40877                 // nodeChanged: called after the viewer has changed images and is ready.
40878                 //
40879                 // There is some logic here to batch up clicks into a _mlyClicks array
40880                 // because the user might click on a lot of markers quickly and nodechanged
40881                 // may be called out of order asychronously.
40882                 //
40883                 // Clicks are added to the array in `selectedImage` and removed here.
40884                 //
40885                 function nodeChanged(node) {
40886                     if (!_mlyFallback) {
40887                         _mlyViewer.getComponent('tag').removeAll();  // remove previous detections
40888                     }
40889
40890                     var clicks = _mlyClicks;
40891                     var index = clicks.indexOf(node.key);
40892                     var selectedKey = _mlySelectedImage && _mlySelectedImage.key;
40893
40894                     if (index > -1) {              // `nodechanged` initiated from clicking on a marker..
40895                         clicks.splice(index, 1);   // remove the click
40896                         // If `node.key` matches the current _mlySelectedImage, call `selectImage()`
40897                         // one more time to update the detections and attribution..
40898                         if (node.key === selectedKey) {
40899                             that.selectImage(_mlySelectedImage, node.key, true);
40900                         }
40901                     } else {             // `nodechanged` initiated from the Mapillary viewer controls..
40902                         var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
40903                         context.map().centerEase(loc);
40904                         that.selectImage(undefined, node.key, true);
40905                     }
40906                 }
40907
40908                 function bearingChanged(e) {
40909                     dispatch$3.call('bearingChanged', undefined, e);
40910                 }
40911             },
40912
40913
40914             // Pass the image datum itself in `d` or the `imageKey` string.
40915             // This allows images to be selected from places that dont have access
40916             // to the full image datum (like the street signs layer or the js viewer)
40917             selectImage: function(d, imageKey, fromViewer) {
40918                 if (!d && imageKey) {
40919                     // If the user clicked on something that's not an image marker, we
40920                     // might get in here.. Cache lookup can fail, e.g. if the user
40921                     // clicked a streetsign, but images are loading slowly asynchronously.
40922                     // We'll try to carry on anyway if there is no datum.  There just
40923                     // might be a delay before user sees detections, captured_at, etc.
40924                     d = _mlyCache.images.forImageKey[imageKey];
40925                 }
40926
40927                 _mlySelectedImage = d;
40928                 var viewer = d3_select('#photoviewer');
40929                 if (!viewer.empty()) viewer.datum(d);
40930
40931                 imageKey = (d && d.key) || imageKey;
40932                 if (!fromViewer && imageKey) {
40933                     _mlyClicks.push(imageKey);
40934                 }
40935
40936                 this.setStyles(null, true);
40937
40938                 // if signs signs are shown, highlight the ones that appear in this image
40939                 d3_selectAll('.layer-mapillary-signs .icon-sign')
40940                     .classed('currentView', function(d) {
40941                         return d.detections.some(function(detection) {
40942                             return detection.image_key === imageKey;
40943                         });
40944                     });
40945
40946                 if (d) {
40947                     this.updateDetections(d);
40948                 }
40949
40950                 return this;
40951             },
40952
40953
40954             getSelectedImage: function() {
40955                 return _mlySelectedImage;
40956             },
40957
40958
40959             getSequenceKeyForImage: function(d) {
40960                 var imageKey = d && d.key;
40961                 return imageKey && _mlyCache.sequences.forImageKey[imageKey];
40962             },
40963
40964
40965             // Updates the currently highlighted sequence and selected bubble.
40966             // Reset is only necessary when interacting with the viewport because
40967             // this implicitly changes the currently selected bubble/sequence
40968             setStyles: function(hovered, reset) {
40969                 if (reset) {  // reset all layers
40970                     d3_selectAll('.viewfield-group')
40971                         .classed('highlighted', false)
40972                         .classed('hovered', false)
40973                         .classed('currentView', false);
40974
40975                     d3_selectAll('.sequence')
40976                         .classed('highlighted', false)
40977                         .classed('currentView', false);
40978                 }
40979
40980                 var hoveredImageKey = hovered && hovered.key;
40981                 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
40982                 var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
40983                 var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
40984
40985                 var viewer = d3_select('#photoviewer');
40986                 var selected = viewer.empty() ? undefined : viewer.datum();
40987                 var selectedImageKey = selected && selected.key;
40988                 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
40989                 var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
40990                 var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
40991
40992                 // highlight sibling viewfields on either the selected or the hovered sequences
40993                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
40994
40995                 d3_selectAll('.layer-mapillary .viewfield-group')
40996                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
40997                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
40998                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
40999
41000                 d3_selectAll('.layer-mapillary .sequence')
41001                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
41002                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
41003
41004                 // update viewfields if needed
41005                 d3_selectAll('.viewfield-group .viewfield')
41006                     .attr('d', viewfieldPath);
41007
41008                 function viewfieldPath() {
41009                     var d = this.parentNode.__data__;
41010                     if (d.pano && d.key !== selectedImageKey) {
41011                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
41012                     } else {
41013                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
41014                     }
41015                 }
41016
41017                 return this;
41018             },
41019
41020
41021             updateDetections: function(d) {
41022                 if (!_mlyViewer || _mlyFallback) return;
41023
41024                 var imageKey = d && d.key;
41025                 if (!imageKey) return;
41026
41027                 var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
41028                 detections.forEach(function(data) {
41029                     var tag = makeTag(data);
41030                     if (tag) {
41031                         var tagComponent = _mlyViewer.getComponent('tag');
41032                         tagComponent.add([tag]);
41033                     }
41034                 });
41035
41036                 function makeTag(data) {
41037                     var valueParts = data.value.split('--');
41038                     if (valueParts.length !== 3) return;
41039
41040                     var text = valueParts[1].replace(/-/g, ' ');
41041                     var tag;
41042
41043                     // Currently only two shapes <Polygon|Point>
41044                     if (data.shape.type === 'Polygon') {
41045                         var polygonGeometry = new Mapillary
41046                             .TagComponent
41047                             .PolygonGeometry(data.shape.coordinates[0]);
41048
41049                         tag = new Mapillary.TagComponent.OutlineTag(
41050                             data.key,
41051                             polygonGeometry,
41052                             {
41053                                 text: text,
41054                                 textColor: 0xffff00,
41055                                 lineColor: 0xffff00,
41056                                 lineWidth: 2,
41057                                 fillColor: 0xffff00,
41058                                 fillOpacity: 0.3,
41059                             }
41060                         );
41061
41062                     } else if (data.shape.type === 'Point') {
41063                         var pointGeometry = new Mapillary
41064                             .TagComponent
41065                             .PointGeometry(data.shape.coordinates[0]);
41066
41067                         tag = new Mapillary.TagComponent.SpotTag(
41068                             data.key,
41069                             pointGeometry,
41070                             {
41071                                 text: text,
41072                                 color: 0xffff00,
41073                                 textColor: 0xffff00
41074                             }
41075                         );
41076                     }
41077
41078                     return tag;
41079                 }
41080             },
41081
41082
41083             cache: function() {
41084                 return _mlyCache;
41085             }
41086
41087         };
41088
41089         function validationIssue(attrs) {
41090             this.type = attrs.type;                // required - name of rule that created the issue (e.g. 'missing_tag')
41091             this.subtype = attrs.subtype;          // optional - category of the issue within the type (e.g. 'relation_type' under 'missing_tag')
41092             this.severity = attrs.severity;        // required - 'warning' or 'error'
41093             this.message = attrs.message;          // required - function returning localized string
41094             this.reference = attrs.reference;      // optional - function(selection) to render reference information
41095             this.entityIds = attrs.entityIds;      // optional - array of IDs of entities involved in the issue
41096             this.loc = attrs.loc;                  // optional - [lon, lat] to zoom in on to see the issue
41097             this.data = attrs.data;                // optional - object containing extra data for the fixes
41098             this.fixes = attrs.fixes || [];              // optional - array of validationIssueFix objects
41099             this.hash = attrs.hash;                // optional - string to further differentiate the issue
41100
41101             this.id = generateID.apply(this);      // generated - see below
41102             this.autoFix = null;                   // generated - if autofix exists, will be set below
41103
41104             // A unique, deterministic string hash.
41105             // Issues with identical id values are considered identical.
41106             function generateID() {
41107                 var parts = [this.type];
41108
41109                 if (this.hash) {   // subclasses can pass in their own differentiator
41110                     parts.push(this.hash);
41111                 }
41112
41113                 if (this.subtype) {
41114                     parts.push(this.subtype);
41115                 }
41116
41117                 // include the entities this issue is for
41118                 // (sort them so the id is deterministic)
41119                 if (this.entityIds) {
41120                     var entityKeys = this.entityIds.slice().sort();
41121                     parts.push.apply(parts, entityKeys);
41122                 }
41123
41124                 return parts.join(':');
41125             }
41126
41127             this.extent = function(resolver) {
41128                 if (this.loc) {
41129                     return geoExtent(this.loc);
41130                 }
41131                 if (this.entityIds && this.entityIds.length) {
41132                     return this.entityIds.reduce(function(extent, entityId) {
41133                         return extent.extend(resolver.entity(entityId).extent(resolver));
41134                     }, geoExtent());
41135                 }
41136                 return null;
41137             };
41138
41139
41140             if (this.fixes) {   // add a reference in the fixes to the issue for use in fix actions
41141                 for (var i = 0; i < this.fixes.length; i++) {
41142                     var fix = this.fixes[i];
41143                     fix.issue = this;
41144                     if (fix.autoArgs) {
41145                         this.autoFix = fix;
41146                     }
41147                 }
41148             }
41149         }
41150
41151
41152         function validationIssueFix(attrs) {
41153             this.title = attrs.title;                 // Required
41154             this.onClick = attrs.onClick;             // Required
41155             this.icon = attrs.icon;                   // Optional - shows 'iD-icon-wrench' if not set
41156             this.entityIds = attrs.entityIds || [];   // Optional - Used for hover-higlighting.
41157             this.autoArgs = attrs.autoArgs;           // Optional - pass [actions, annotation] arglist if this fix can automatically run
41158
41159             this.issue = null;    // Generated link - added by ValidationIssue constructor
41160         }
41161
41162         var buildRuleChecks = function() {
41163             return {
41164                 equals: function (equals) {
41165                     return function(tags) {
41166                         return Object.keys(equals).every(function(k) {
41167                             return equals[k] === tags[k];
41168                         });
41169                     };
41170                 },
41171                 notEquals: function (notEquals) {
41172                     return function(tags) {
41173                         return Object.keys(notEquals).some(function(k) {
41174                             return notEquals[k] !== tags[k];
41175                         });
41176                     };
41177                 },
41178                 absence: function(absence) {
41179                     return function(tags) {
41180                         return Object.keys(tags).indexOf(absence) === -1;
41181                     };
41182                 },
41183                 presence: function(presence) {
41184                     return function(tags) {
41185                         return Object.keys(tags).indexOf(presence) > -1;
41186                     };
41187                 },
41188                 greaterThan: function(greaterThan) {
41189                     var key = Object.keys(greaterThan)[0];
41190                     var value = greaterThan[key];
41191
41192                     return function(tags) {
41193                         return tags[key] > value;
41194                     };
41195                 },
41196                 greaterThanEqual: function(greaterThanEqual) {
41197                     var key = Object.keys(greaterThanEqual)[0];
41198                     var value = greaterThanEqual[key];
41199
41200                     return function(tags) {
41201                         return tags[key] >= value;
41202                     };
41203                 },
41204                 lessThan: function(lessThan) {
41205                     var key = Object.keys(lessThan)[0];
41206                     var value = lessThan[key];
41207
41208                     return function(tags) {
41209                         return tags[key] < value;
41210                     };
41211                 },
41212                 lessThanEqual: function(lessThanEqual) {
41213                     var key = Object.keys(lessThanEqual)[0];
41214                     var value = lessThanEqual[key];
41215
41216                     return function(tags) {
41217                         return tags[key] <= value;
41218                     };
41219                 },
41220                 positiveRegex: function(positiveRegex) {
41221                     var tagKey = Object.keys(positiveRegex)[0];
41222                     var expression = positiveRegex[tagKey].join('|');
41223                     var regex = new RegExp(expression);
41224
41225                     return function(tags) {
41226                         return regex.test(tags[tagKey]);
41227                     };
41228                 },
41229                 negativeRegex: function(negativeRegex) {
41230                     var tagKey = Object.keys(negativeRegex)[0];
41231                     var expression = negativeRegex[tagKey].join('|');
41232                     var regex = new RegExp(expression);
41233
41234                     return function(tags) {
41235                         return !regex.test(tags[tagKey]);
41236                     };
41237                 }
41238             };
41239         };
41240
41241         var buildLineKeys = function() {
41242             return {
41243                 highway: {
41244                     rest_area: true,
41245                     services: true
41246                 },
41247                 railway: {
41248                     roundhouse: true,
41249                     station: true,
41250                     traverser: true,
41251                     turntable: true,
41252                     wash: true
41253                 }
41254             };
41255         };
41256
41257         var serviceMapRules = {
41258             init: function() {
41259                 this._ruleChecks  = buildRuleChecks();
41260                 this._validationRules = [];
41261                 this._areaKeys = osmAreaKeys;
41262                 this._lineKeys = buildLineKeys();
41263             },
41264
41265             // list of rules only relevant to tag checks...
41266             filterRuleChecks: function(selector) {
41267                 var _ruleChecks = this._ruleChecks;
41268                 return Object.keys(selector).reduce(function(rules, key) {
41269                     if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
41270                         rules.push(_ruleChecks[key](selector[key]));
41271                     }
41272                     return rules;
41273                 }, []);
41274             },
41275
41276             // builds tagMap from mapcss-parse selector object...
41277             buildTagMap: function(selector) {
41278                 var getRegexValues = function(regexes) {
41279                     return regexes.map(function(regex) {
41280                         return regex.replace(/\$|\^/g, '');
41281                     });
41282                 };
41283
41284                 var tagMap = Object.keys(selector).reduce(function (expectedTags, key) {
41285                     var values;
41286                     var isRegex = /regex/gi.test(key);
41287                     var isEqual = /equals/gi.test(key);
41288
41289                     if (isRegex || isEqual) {
41290                         Object.keys(selector[key]).forEach(function(selectorKey) {
41291                             values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
41292
41293                             if (expectedTags.hasOwnProperty(selectorKey)) {
41294                                 values = values.concat(expectedTags[selectorKey]);
41295                             }
41296
41297                             expectedTags[selectorKey] = values;
41298                         });
41299
41300                     } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
41301                         var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
41302
41303                         values = [selector[key][tagKey]];
41304
41305                         if (expectedTags.hasOwnProperty(tagKey)) {
41306                             values = values.concat(expectedTags[tagKey]);
41307                         }
41308
41309                         expectedTags[tagKey] = values;
41310                     }
41311
41312                     return expectedTags;
41313                 }, {});
41314
41315                 return tagMap;
41316             },
41317
41318             // inspired by osmWay#isArea()
41319             inferGeometry: function(tagMap) {
41320                 var _lineKeys = this._lineKeys;
41321                 var _areaKeys = this._areaKeys;
41322
41323                 var isAreaKeyBlackList = function(key) {
41324                     return utilArrayIntersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
41325                 };
41326                 var isLineKeysWhiteList = function(key) {
41327                     return utilArrayIntersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
41328                 };
41329
41330                 if (tagMap.hasOwnProperty('area')) {
41331                     if (tagMap.area.indexOf('yes') > -1) {
41332                         return 'area';
41333                     }
41334                     if (tagMap.area.indexOf('no') > -1) {
41335                         return 'line';
41336                     }
41337                 }
41338
41339                 for (var key in tagMap) {
41340                     if (key in _areaKeys && !isAreaKeyBlackList(key)) {
41341                         return 'area';
41342                     }
41343                     if (key in _lineKeys && isLineKeysWhiteList(key)) {
41344                         return 'area';
41345                     }
41346                 }
41347
41348                 return 'line';
41349             },
41350
41351             // adds from mapcss-parse selector check...
41352             addRule: function(selector) {
41353                 var rule = {
41354                     // checks relevant to mapcss-selector
41355                     checks: this.filterRuleChecks(selector),
41356                     // true if all conditions for a tag error are true..
41357                     matches: function(entity) {
41358                         return this.checks.every(function(check) {
41359                             return check(entity.tags);
41360                         });
41361                     },
41362                     // borrowed from Way#isArea()
41363                     inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
41364                     geometryMatches: function(entity, graph) {
41365                         if (entity.type === 'node' || entity.type === 'relation') {
41366                             return selector.geometry === entity.type;
41367                         } else if (entity.type === 'way') {
41368                             return this.inferredGeometry === entity.geometry(graph);
41369                         }
41370                     },
41371                     // when geometries match and tag matches are present, return a warning...
41372                     findIssues: function (entity, graph, issues) {
41373                         if (this.geometryMatches(entity, graph) && this.matches(entity)) {
41374                             var severity = Object.keys(selector).indexOf('error') > -1
41375                                     ? 'error'
41376                                     : 'warning';
41377                             var message = selector[severity];
41378                             issues.push(new validationIssue({
41379                                 type: 'maprules',
41380                                 severity: severity,
41381                                 message: function() {
41382                                     return message;
41383                                 },
41384                                 entityIds: [entity.id]
41385                             }));
41386                         }
41387                     }
41388                 };
41389                 this._validationRules.push(rule);
41390             },
41391
41392             clearRules: function() { this._validationRules = []; },
41393
41394             // returns validationRules...
41395             validationRules: function() { return this._validationRules; },
41396
41397             // returns ruleChecks
41398             ruleChecks: function() { return this._ruleChecks; }
41399         };
41400
41401         var apibase$1 = 'https://nominatim.openstreetmap.org/';
41402         var _inflight = {};
41403         var _nominatimCache;
41404
41405
41406         var serviceNominatim = {
41407
41408             init: function() {
41409                 _inflight = {};
41410                 _nominatimCache = rbush_1();
41411             },
41412
41413             reset: function() {
41414                 Object.values(_inflight).forEach(function(controller) { controller.abort(); });
41415                 _inflight = {};
41416                 _nominatimCache = rbush_1();
41417             },
41418
41419
41420             countryCode: function (location, callback) {
41421                 this.reverse(location, function(err, result) {
41422                     if (err) {
41423                         return callback(err);
41424                     } else if (result.address) {
41425                         return callback(null, result.address.country_code);
41426                     } else {
41427                         return callback('Unable to geocode', null);
41428                     }
41429                 });
41430             },
41431
41432
41433             reverse: function (loc, callback) {
41434                 var cached = _nominatimCache.search(
41435                     { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] }
41436                 );
41437
41438                 if (cached.length > 0) {
41439                     if (callback) callback(null, cached[0].data);
41440                     return;
41441                 }
41442
41443                 var params = { zoom: 13, format: 'json', addressdetails: 1, lat: loc[1], lon: loc[0] };
41444                 var url = apibase$1 + 'reverse?' + utilQsString(params);
41445
41446                 if (_inflight[url]) return;
41447                 var controller = new AbortController();
41448                 _inflight[url] = controller;
41449
41450                 d3_json(url, { signal: controller.signal })
41451                     .then(function(result) {
41452                         delete _inflight[url];
41453                         if (result && result.error) {
41454                             throw new Error(result.error);
41455                         }
41456                         var extent = geoExtent(loc).padByMeters(200);
41457                         _nominatimCache.insert(Object.assign(extent.bbox(), {data: result}));
41458                         if (callback) callback(null, result);
41459                     })
41460                     .catch(function(err) {
41461                         delete _inflight[url];
41462                         if (err.name === 'AbortError') return;
41463                         if (callback) callback(err.message);
41464                     });
41465             },
41466
41467
41468             search: function (val, callback) {
41469                 var searchVal = encodeURIComponent(val);
41470                 var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
41471
41472                 if (_inflight[url]) return;
41473                 var controller = new AbortController();
41474                 _inflight[url] = controller;
41475
41476                 d3_json(url, { signal: controller.signal })
41477                     .then(function(result) {
41478                         delete _inflight[url];
41479                         if (result && result.error) {
41480                             throw new Error(result.error);
41481                         }
41482                         if (callback) callback(null, result);
41483                     })
41484                     .catch(function(err) {
41485                         delete _inflight[url];
41486                         if (err.name === 'AbortError') return;
41487                         if (callback) callback(err.message);
41488                     });
41489             }
41490
41491         };
41492
41493         var apibase$2 = 'https://openstreetcam.org';
41494         var maxResults$1 = 1000;
41495         var tileZoom$1 = 14;
41496         var tiler$3 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
41497         var dispatch$4 = dispatch('loadedImages');
41498         var imgZoom = d3_zoom()
41499             .extent([[0, 0], [320, 240]])
41500             .translateExtent([[0, 0], [320, 240]])
41501             .scaleExtent([1, 15])
41502             .on('zoom', zoomPan);
41503         var _oscCache;
41504         var _oscSelectedImage;
41505
41506
41507         function abortRequest$3(controller) {
41508             controller.abort();
41509         }
41510
41511
41512         function maxPageAtZoom$1(z) {
41513             if (z < 15)   return 2;
41514             if (z === 15) return 5;
41515             if (z === 16) return 10;
41516             if (z === 17) return 20;
41517             if (z === 18) return 40;
41518             if (z > 18)   return 80;
41519         }
41520
41521
41522         function loadTiles$1(which, url, projection) {
41523             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
41524             var tiles = tiler$3.getTiles(projection);
41525
41526             // abort inflight requests that are no longer needed
41527             var cache = _oscCache[which];
41528             Object.keys(cache.inflight).forEach(function(k) {
41529                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
41530                 if (!wanted) {
41531                     abortRequest$3(cache.inflight[k]);
41532                     delete cache.inflight[k];
41533                 }
41534             });
41535
41536             tiles.forEach(function(tile) {
41537                 loadNextTilePage$1(which, currZoom, url, tile);
41538             });
41539         }
41540
41541
41542         function loadNextTilePage$1(which, currZoom, url, tile) {
41543             var cache = _oscCache[which];
41544             var bbox = tile.extent.bbox();
41545             var maxPages = maxPageAtZoom$1(currZoom);
41546             var nextPage = cache.nextPage[tile.id] || 1;
41547             var params = utilQsString({
41548                 ipp: maxResults$1,
41549                 page: nextPage,
41550                 // client_id: clientId,
41551                 bbTopLeft: [bbox.maxY, bbox.minX].join(','),
41552                 bbBottomRight: [bbox.minY, bbox.maxX].join(',')
41553             }, true);
41554
41555             if (nextPage > maxPages) return;
41556
41557             var id = tile.id + ',' + String(nextPage);
41558             if (cache.loaded[id] || cache.inflight[id]) return;
41559
41560             var controller = new AbortController();
41561             cache.inflight[id] = controller;
41562
41563             var options = {
41564                 method: 'POST',
41565                 signal: controller.signal,
41566                 body: params,
41567                 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
41568             };
41569
41570             d3_json(url, options)
41571                 .then(function(data) {
41572                     cache.loaded[id] = true;
41573                     delete cache.inflight[id];
41574                     if (!data || !data.currentPageItems || !data.currentPageItems.length) {
41575                         throw new Error('No Data');
41576                     }
41577
41578                     var features = data.currentPageItems.map(function(item) {
41579                         var loc = [+item.lng, +item.lat];
41580                         var d;
41581
41582                         if (which === 'images') {
41583                             d = {
41584                                 loc: loc,
41585                                 key: item.id,
41586                                 ca: +item.heading,
41587                                 captured_at: (item.shot_date || item.date_added),
41588                                 captured_by: item.username,
41589                                 imagePath: item.lth_name,
41590                                 sequence_id: item.sequence_id,
41591                                 sequence_index: +item.sequence_index
41592                             };
41593
41594                             // cache sequence info
41595                             var seq = _oscCache.sequences[d.sequence_id];
41596                             if (!seq) {
41597                                 seq = { rotation: 0, images: [] };
41598                                 _oscCache.sequences[d.sequence_id] = seq;
41599                             }
41600                             seq.images[d.sequence_index] = d;
41601                         }
41602
41603                         return {
41604                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
41605                         };
41606                     });
41607
41608                     cache.rtree.load(features);
41609
41610                     if (data.currentPageItems.length === maxResults$1) {  // more pages to load
41611                         cache.nextPage[tile.id] = nextPage + 1;
41612                         loadNextTilePage$1(which, currZoom, url, tile);
41613                     } else {
41614                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
41615                     }
41616
41617                     if (which === 'images') {
41618                         dispatch$4.call('loadedImages');
41619                     }
41620                 })
41621                 .catch(function() {
41622                     cache.loaded[id] = true;
41623                     delete cache.inflight[id];
41624                 });
41625         }
41626
41627
41628         // partition viewport into higher zoom tiles
41629         function partitionViewport$1(projection) {
41630             var z = geoScaleToZoom(projection.scale());
41631             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
41632             var tiler = utilTiler().zoomExtent([z2, z2]);
41633
41634             return tiler.getTiles(projection)
41635                 .map(function(tile) { return tile.extent; });
41636         }
41637
41638
41639         // no more than `limit` results per partition.
41640         function searchLimited$1(limit, projection, rtree) {
41641             limit = limit || 5;
41642
41643             return partitionViewport$1(projection)
41644                 .reduce(function(result, extent) {
41645                     var found = rtree.search(extent.bbox())
41646                         .slice(0, limit)
41647                         .map(function(d) { return d.data; });
41648
41649                     return (found.length ? result.concat(found) : result);
41650                 }, []);
41651         }
41652
41653
41654         function zoomPan() {
41655             var t = event.transform;
41656             d3_select('#photoviewer .osc-image-wrap')
41657                 .call(utilSetTransform, t.x, t.y, t.k);
41658         }
41659
41660
41661         var serviceOpenstreetcam = {
41662
41663             init: function() {
41664                 if (!_oscCache) {
41665                     this.reset();
41666                 }
41667
41668                 this.event = utilRebind(this, dispatch$4, 'on');
41669             },
41670
41671             reset: function() {
41672                 if (_oscCache) {
41673                     Object.values(_oscCache.images.inflight).forEach(abortRequest$3);
41674                 }
41675
41676                 _oscCache = {
41677                     images: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1() },
41678                     sequences: {}
41679                 };
41680
41681                 _oscSelectedImage = null;
41682             },
41683
41684
41685             images: function(projection) {
41686                 var limit = 5;
41687                 return searchLimited$1(limit, projection, _oscCache.images.rtree);
41688             },
41689
41690
41691             sequences: function(projection) {
41692                 var viewport = projection.clipExtent();
41693                 var min = [viewport[0][0], viewport[1][1]];
41694                 var max = [viewport[1][0], viewport[0][1]];
41695                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
41696                 var sequenceKeys = {};
41697
41698                 // all sequences for images in viewport
41699                 _oscCache.images.rtree.search(bbox)
41700                     .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
41701
41702                 // make linestrings from those sequences
41703                 var lineStrings = [];
41704                 Object.keys(sequenceKeys)
41705                     .forEach(function(sequenceKey) {
41706                         var seq = _oscCache.sequences[sequenceKey];
41707                         var images = seq && seq.images;
41708                         if (images) {
41709                             lineStrings.push({
41710                                 type: 'LineString',
41711                                 coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
41712                                 properties: { key: sequenceKey }
41713                             });
41714                         }
41715                     });
41716                 return lineStrings;
41717             },
41718
41719
41720             loadImages: function(projection) {
41721                 var url = apibase$2 + '/1.0/list/nearby-photos/';
41722                 loadTiles$1('images', url, projection);
41723             },
41724
41725
41726             loadViewer: function(context) {
41727                 var that = this;
41728
41729                 // add osc-wrapper
41730                 var wrap = d3_select('#photoviewer').selectAll('.osc-wrapper')
41731                     .data([0]);
41732
41733                 var wrapEnter = wrap.enter()
41734                     .append('div')
41735                     .attr('class', 'photo-wrapper osc-wrapper')
41736                     .classed('hide', true)
41737                     .call(imgZoom)
41738                     .on('dblclick.zoom', null);
41739
41740                 wrapEnter
41741                     .append('div')
41742                     .attr('class', 'photo-attribution fillD');
41743
41744                 var controlsEnter = wrapEnter
41745                     .append('div')
41746                     .attr('class', 'photo-controls-wrap')
41747                     .append('div')
41748                     .attr('class', 'photo-controls');
41749
41750                 controlsEnter
41751                     .append('button')
41752                     .on('click.back', step(-1))
41753                     .text('◄');
41754
41755                 controlsEnter
41756                     .append('button')
41757                     .on('click.rotate-ccw', rotate(-90))
41758                     .text('⤿');
41759
41760                 controlsEnter
41761                     .append('button')
41762                     .on('click.rotate-cw', rotate(90))
41763                     .text('⤾');
41764
41765                 controlsEnter
41766                     .append('button')
41767                     .on('click.forward', step(1))
41768                     .text('►');
41769
41770                 wrapEnter
41771                     .append('div')
41772                     .attr('class', 'osc-image-wrap');
41773
41774
41775                 // Register viewer resize handler
41776                 context.ui().photoviewer.on('resize.openstreetcam', function(dimensions) {
41777                     imgZoom = d3_zoom()
41778                         .extent([[0, 0], dimensions])
41779                         .translateExtent([[0, 0], dimensions])
41780                         .scaleExtent([1, 15])
41781                         .on('zoom', zoomPan);
41782                 });
41783
41784
41785                 function rotate(deg) {
41786                     return function() {
41787                         if (!_oscSelectedImage) return;
41788                         var sequenceKey = _oscSelectedImage.sequence_id;
41789                         var sequence = _oscCache.sequences[sequenceKey];
41790                         if (!sequence) return;
41791
41792                         var r = sequence.rotation || 0;
41793                         r += deg;
41794
41795                         if (r > 180) r -= 360;
41796                         if (r < -180) r += 360;
41797                         sequence.rotation = r;
41798
41799                         var wrap = d3_select('#photoviewer .osc-wrapper');
41800
41801                         wrap
41802                             .transition()
41803                             .duration(100)
41804                             .call(imgZoom.transform, identity$8);
41805
41806                         wrap.selectAll('.osc-image')
41807                             .transition()
41808                             .duration(100)
41809                             .style('transform', 'rotate(' + r + 'deg)');
41810                     };
41811                 }
41812
41813                 function step(stepBy) {
41814                     return function() {
41815                         if (!_oscSelectedImage) return;
41816                         var sequenceKey = _oscSelectedImage.sequence_id;
41817                         var sequence = _oscCache.sequences[sequenceKey];
41818                         if (!sequence) return;
41819
41820                         var nextIndex = _oscSelectedImage.sequence_index + stepBy;
41821                         var nextImage = sequence.images[nextIndex];
41822                         if (!nextImage) return;
41823
41824                         context.map().centerEase(nextImage.loc);
41825
41826                         that
41827                             .selectImage(nextImage)
41828                             .updateViewer(nextImage);
41829                     };
41830                 }
41831             },
41832
41833
41834             showViewer: function() {
41835                 var viewer = d3_select('#photoviewer')
41836                     .classed('hide', false);
41837
41838                 var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
41839
41840                 if (isHidden) {
41841                     viewer
41842                         .selectAll('.photo-wrapper:not(.osc-wrapper)')
41843                         .classed('hide', true);
41844
41845                     viewer
41846                         .selectAll('.photo-wrapper.osc-wrapper')
41847                         .classed('hide', false);
41848                 }
41849
41850                 return this;
41851             },
41852
41853
41854             hideViewer: function() {
41855                 _oscSelectedImage = null;
41856
41857                 var viewer = d3_select('#photoviewer');
41858                 if (!viewer.empty()) viewer.datum(null);
41859
41860                 viewer
41861                     .classed('hide', true)
41862                     .selectAll('.photo-wrapper')
41863                     .classed('hide', true);
41864
41865                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
41866                     .classed('currentView', false);
41867
41868                 return this.setStyles(null, true);
41869             },
41870
41871
41872             updateViewer: function(d) {
41873                 var wrap = d3_select('#photoviewer .osc-wrapper');
41874                 var imageWrap = wrap.selectAll('.osc-image-wrap');
41875                 var attribution = wrap.selectAll('.photo-attribution').html('');
41876
41877                 wrap
41878                     .transition()
41879                     .duration(100)
41880                     .call(imgZoom.transform, identity$8);
41881
41882                 imageWrap
41883                     .selectAll('.osc-image')
41884                     .remove();
41885
41886                 if (d) {
41887                     var sequence = _oscCache.sequences[d.sequence_id];
41888                     var r = (sequence && sequence.rotation) || 0;
41889
41890                     imageWrap
41891                         .append('img')
41892                         .attr('class', 'osc-image')
41893                         .attr('src', apibase$2 + '/' + d.imagePath)
41894                         .style('transform', 'rotate(' + r + 'deg)');
41895
41896                     if (d.captured_by) {
41897                         attribution
41898                             .append('a')
41899                             .attr('class', 'captured_by')
41900                             .attr('target', '_blank')
41901                             .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
41902                             .text('@' + d.captured_by);
41903
41904                         attribution
41905                             .append('span')
41906                             .text('|');
41907                     }
41908
41909                     if (d.captured_at) {
41910                         attribution
41911                             .append('span')
41912                             .attr('class', 'captured_at')
41913                             .text(localeDateString(d.captured_at));
41914
41915                         attribution
41916                             .append('span')
41917                             .text('|');
41918                     }
41919
41920                     attribution
41921                         .append('a')
41922                         .attr('class', 'image-link')
41923                         .attr('target', '_blank')
41924                         .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
41925                         .text('openstreetcam.org');
41926                 }
41927
41928                 return this;
41929
41930
41931                 function localeDateString(s) {
41932                     if (!s) return null;
41933                     var detected = utilDetect();
41934                     var options = { day: 'numeric', month: 'short', year: 'numeric' };
41935                     var d = new Date(s);
41936                     if (isNaN(d.getTime())) return null;
41937                     return d.toLocaleDateString(detected.locale, options);
41938                 }
41939             },
41940
41941
41942             selectImage: function(d) {
41943                 _oscSelectedImage = d;
41944                 var viewer = d3_select('#photoviewer');
41945                 if (!viewer.empty()) viewer.datum(d);
41946
41947                 this.setStyles(null, true);
41948
41949                 d3_selectAll('.icon-sign')
41950                     .classed('currentView', false);
41951
41952                 return this;
41953             },
41954
41955
41956             getSelectedImage: function() {
41957                 return _oscSelectedImage;
41958             },
41959
41960
41961             getSequenceKeyForImage: function(d) {
41962                 return d && d.sequence_id;
41963             },
41964
41965
41966             // Updates the currently highlighted sequence and selected bubble.
41967             // Reset is only necessary when interacting with the viewport because
41968             // this implicitly changes the currently selected bubble/sequence
41969             setStyles: function(hovered, reset) {
41970                 if (reset) {  // reset all layers
41971                     d3_selectAll('.viewfield-group')
41972                         .classed('highlighted', false)
41973                         .classed('hovered', false)
41974                         .classed('currentView', false);
41975
41976                     d3_selectAll('.sequence')
41977                         .classed('highlighted', false)
41978                         .classed('currentView', false);
41979                 }
41980
41981                 var hoveredImageKey = hovered && hovered.key;
41982                 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
41983                 var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
41984                 var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
41985
41986                 var viewer = d3_select('#photoviewer');
41987                 var selected = viewer.empty() ? undefined : viewer.datum();
41988                 var selectedImageKey = selected && selected.key;
41989                 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
41990                 var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
41991                 var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
41992
41993                 // highlight sibling viewfields on either the selected or the hovered sequences
41994                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
41995
41996                 d3_selectAll('.layer-openstreetcam .viewfield-group')
41997                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
41998                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
41999                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
42000
42001                 d3_selectAll('.layer-openstreetcam .sequence')
42002                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
42003                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
42004
42005                 // update viewfields if needed
42006                 d3_selectAll('.viewfield-group .viewfield')
42007                     .attr('d', viewfieldPath);
42008
42009                 function viewfieldPath() {
42010                     var d = this.parentNode.__data__;
42011                     if (d.pano && d.key !== selectedImageKey) {
42012                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
42013                     } else {
42014                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
42015                     }
42016                 }
42017
42018                 return this;
42019             },
42020
42021
42022             cache: function() {
42023                 return _oscCache;
42024             }
42025
42026         };
42027
42028         /**
42029          * Checks if `value` is the
42030          * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
42031          * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
42032          *
42033          * @static
42034          * @memberOf _
42035          * @since 0.1.0
42036          * @category Lang
42037          * @param {*} value The value to check.
42038          * @returns {boolean} Returns `true` if `value` is an object, else `false`.
42039          * @example
42040          *
42041          * _.isObject({});
42042          * // => true
42043          *
42044          * _.isObject([1, 2, 3]);
42045          * // => true
42046          *
42047          * _.isObject(_.noop);
42048          * // => true
42049          *
42050          * _.isObject(null);
42051          * // => false
42052          */
42053         function isObject$1(value) {
42054           var type = typeof value;
42055           return value != null && (type == 'object' || type == 'function');
42056         }
42057
42058         /** Detect free variable `global` from Node.js. */
42059         var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
42060
42061         /** Detect free variable `self`. */
42062         var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
42063
42064         /** Used as a reference to the global object. */
42065         var root$3 = freeGlobal || freeSelf || Function('return this')();
42066
42067         /**
42068          * Gets the timestamp of the number of milliseconds that have elapsed since
42069          * the Unix epoch (1 January 1970 00:00:00 UTC).
42070          *
42071          * @static
42072          * @memberOf _
42073          * @since 2.4.0
42074          * @category Date
42075          * @returns {number} Returns the timestamp.
42076          * @example
42077          *
42078          * _.defer(function(stamp) {
42079          *   console.log(_.now() - stamp);
42080          * }, _.now());
42081          * // => Logs the number of milliseconds it took for the deferred invocation.
42082          */
42083         var now$1 = function() {
42084           return root$3.Date.now();
42085         };
42086
42087         /** Built-in value references. */
42088         var Symbol$1 = root$3.Symbol;
42089
42090         /** Used for built-in method references. */
42091         var objectProto = Object.prototype;
42092
42093         /** Used to check objects for own properties. */
42094         var hasOwnProperty$1 = objectProto.hasOwnProperty;
42095
42096         /**
42097          * Used to resolve the
42098          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
42099          * of values.
42100          */
42101         var nativeObjectToString = objectProto.toString;
42102
42103         /** Built-in value references. */
42104         var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
42105
42106         /**
42107          * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
42108          *
42109          * @private
42110          * @param {*} value The value to query.
42111          * @returns {string} Returns the raw `toStringTag`.
42112          */
42113         function getRawTag(value) {
42114           var isOwn = hasOwnProperty$1.call(value, symToStringTag),
42115               tag = value[symToStringTag];
42116
42117           try {
42118             value[symToStringTag] = undefined;
42119             var unmasked = true;
42120           } catch (e) {}
42121
42122           var result = nativeObjectToString.call(value);
42123           if (unmasked) {
42124             if (isOwn) {
42125               value[symToStringTag] = tag;
42126             } else {
42127               delete value[symToStringTag];
42128             }
42129           }
42130           return result;
42131         }
42132
42133         /** Used for built-in method references. */
42134         var objectProto$1 = Object.prototype;
42135
42136         /**
42137          * Used to resolve the
42138          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
42139          * of values.
42140          */
42141         var nativeObjectToString$1 = objectProto$1.toString;
42142
42143         /**
42144          * Converts `value` to a string using `Object.prototype.toString`.
42145          *
42146          * @private
42147          * @param {*} value The value to convert.
42148          * @returns {string} Returns the converted string.
42149          */
42150         function objectToString(value) {
42151           return nativeObjectToString$1.call(value);
42152         }
42153
42154         /** `Object#toString` result references. */
42155         var nullTag = '[object Null]',
42156             undefinedTag = '[object Undefined]';
42157
42158         /** Built-in value references. */
42159         var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;
42160
42161         /**
42162          * The base implementation of `getTag` without fallbacks for buggy environments.
42163          *
42164          * @private
42165          * @param {*} value The value to query.
42166          * @returns {string} Returns the `toStringTag`.
42167          */
42168         function baseGetTag(value) {
42169           if (value == null) {
42170             return value === undefined ? undefinedTag : nullTag;
42171           }
42172           return (symToStringTag$1 && symToStringTag$1 in Object(value))
42173             ? getRawTag(value)
42174             : objectToString(value);
42175         }
42176
42177         /**
42178          * Checks if `value` is object-like. A value is object-like if it's not `null`
42179          * and has a `typeof` result of "object".
42180          *
42181          * @static
42182          * @memberOf _
42183          * @since 4.0.0
42184          * @category Lang
42185          * @param {*} value The value to check.
42186          * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
42187          * @example
42188          *
42189          * _.isObjectLike({});
42190          * // => true
42191          *
42192          * _.isObjectLike([1, 2, 3]);
42193          * // => true
42194          *
42195          * _.isObjectLike(_.noop);
42196          * // => false
42197          *
42198          * _.isObjectLike(null);
42199          * // => false
42200          */
42201         function isObjectLike(value) {
42202           return value != null && typeof value == 'object';
42203         }
42204
42205         /** `Object#toString` result references. */
42206         var symbolTag = '[object Symbol]';
42207
42208         /**
42209          * Checks if `value` is classified as a `Symbol` primitive or object.
42210          *
42211          * @static
42212          * @memberOf _
42213          * @since 4.0.0
42214          * @category Lang
42215          * @param {*} value The value to check.
42216          * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
42217          * @example
42218          *
42219          * _.isSymbol(Symbol.iterator);
42220          * // => true
42221          *
42222          * _.isSymbol('abc');
42223          * // => false
42224          */
42225         function isSymbol$2(value) {
42226           return typeof value == 'symbol' ||
42227             (isObjectLike(value) && baseGetTag(value) == symbolTag);
42228         }
42229
42230         /** Used as references for various `Number` constants. */
42231         var NAN = 0 / 0;
42232
42233         /** Used to match leading and trailing whitespace. */
42234         var reTrim = /^\s+|\s+$/g;
42235
42236         /** Used to detect bad signed hexadecimal string values. */
42237         var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
42238
42239         /** Used to detect binary string values. */
42240         var reIsBinary = /^0b[01]+$/i;
42241
42242         /** Used to detect octal string values. */
42243         var reIsOctal = /^0o[0-7]+$/i;
42244
42245         /** Built-in method references without a dependency on `root`. */
42246         var freeParseInt = parseInt;
42247
42248         /**
42249          * Converts `value` to a number.
42250          *
42251          * @static
42252          * @memberOf _
42253          * @since 4.0.0
42254          * @category Lang
42255          * @param {*} value The value to process.
42256          * @returns {number} Returns the number.
42257          * @example
42258          *
42259          * _.toNumber(3.2);
42260          * // => 3.2
42261          *
42262          * _.toNumber(Number.MIN_VALUE);
42263          * // => 5e-324
42264          *
42265          * _.toNumber(Infinity);
42266          * // => Infinity
42267          *
42268          * _.toNumber('3.2');
42269          * // => 3.2
42270          */
42271         function toNumber(value) {
42272           if (typeof value == 'number') {
42273             return value;
42274           }
42275           if (isSymbol$2(value)) {
42276             return NAN;
42277           }
42278           if (isObject$1(value)) {
42279             var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
42280             value = isObject$1(other) ? (other + '') : other;
42281           }
42282           if (typeof value != 'string') {
42283             return value === 0 ? value : +value;
42284           }
42285           value = value.replace(reTrim, '');
42286           var isBinary = reIsBinary.test(value);
42287           return (isBinary || reIsOctal.test(value))
42288             ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
42289             : (reIsBadHex.test(value) ? NAN : +value);
42290         }
42291
42292         /** Error message constants. */
42293         var FUNC_ERROR_TEXT = 'Expected a function';
42294
42295         /* Built-in method references for those with the same name as other `lodash` methods. */
42296         var nativeMax = Math.max,
42297             nativeMin = Math.min;
42298
42299         /**
42300          * Creates a debounced function that delays invoking `func` until after `wait`
42301          * milliseconds have elapsed since the last time the debounced function was
42302          * invoked. The debounced function comes with a `cancel` method to cancel
42303          * delayed `func` invocations and a `flush` method to immediately invoke them.
42304          * Provide `options` to indicate whether `func` should be invoked on the
42305          * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
42306          * with the last arguments provided to the debounced function. Subsequent
42307          * calls to the debounced function return the result of the last `func`
42308          * invocation.
42309          *
42310          * **Note:** If `leading` and `trailing` options are `true`, `func` is
42311          * invoked on the trailing edge of the timeout only if the debounced function
42312          * is invoked more than once during the `wait` timeout.
42313          *
42314          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
42315          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
42316          *
42317          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
42318          * for details over the differences between `_.debounce` and `_.throttle`.
42319          *
42320          * @static
42321          * @memberOf _
42322          * @since 0.1.0
42323          * @category Function
42324          * @param {Function} func The function to debounce.
42325          * @param {number} [wait=0] The number of milliseconds to delay.
42326          * @param {Object} [options={}] The options object.
42327          * @param {boolean} [options.leading=false]
42328          *  Specify invoking on the leading edge of the timeout.
42329          * @param {number} [options.maxWait]
42330          *  The maximum time `func` is allowed to be delayed before it's invoked.
42331          * @param {boolean} [options.trailing=true]
42332          *  Specify invoking on the trailing edge of the timeout.
42333          * @returns {Function} Returns the new debounced function.
42334          * @example
42335          *
42336          * // Avoid costly calculations while the window size is in flux.
42337          * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
42338          *
42339          * // Invoke `sendMail` when clicked, debouncing subsequent calls.
42340          * jQuery(element).on('click', _.debounce(sendMail, 300, {
42341          *   'leading': true,
42342          *   'trailing': false
42343          * }));
42344          *
42345          * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
42346          * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
42347          * var source = new EventSource('/stream');
42348          * jQuery(source).on('message', debounced);
42349          *
42350          * // Cancel the trailing debounced invocation.
42351          * jQuery(window).on('popstate', debounced.cancel);
42352          */
42353         function debounce(func, wait, options) {
42354           var lastArgs,
42355               lastThis,
42356               maxWait,
42357               result,
42358               timerId,
42359               lastCallTime,
42360               lastInvokeTime = 0,
42361               leading = false,
42362               maxing = false,
42363               trailing = true;
42364
42365           if (typeof func != 'function') {
42366             throw new TypeError(FUNC_ERROR_TEXT);
42367           }
42368           wait = toNumber(wait) || 0;
42369           if (isObject$1(options)) {
42370             leading = !!options.leading;
42371             maxing = 'maxWait' in options;
42372             maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
42373             trailing = 'trailing' in options ? !!options.trailing : trailing;
42374           }
42375
42376           function invokeFunc(time) {
42377             var args = lastArgs,
42378                 thisArg = lastThis;
42379
42380             lastArgs = lastThis = undefined;
42381             lastInvokeTime = time;
42382             result = func.apply(thisArg, args);
42383             return result;
42384           }
42385
42386           function leadingEdge(time) {
42387             // Reset any `maxWait` timer.
42388             lastInvokeTime = time;
42389             // Start the timer for the trailing edge.
42390             timerId = setTimeout(timerExpired, wait);
42391             // Invoke the leading edge.
42392             return leading ? invokeFunc(time) : result;
42393           }
42394
42395           function remainingWait(time) {
42396             var timeSinceLastCall = time - lastCallTime,
42397                 timeSinceLastInvoke = time - lastInvokeTime,
42398                 timeWaiting = wait - timeSinceLastCall;
42399
42400             return maxing
42401               ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
42402               : timeWaiting;
42403           }
42404
42405           function shouldInvoke(time) {
42406             var timeSinceLastCall = time - lastCallTime,
42407                 timeSinceLastInvoke = time - lastInvokeTime;
42408
42409             // Either this is the first call, activity has stopped and we're at the
42410             // trailing edge, the system time has gone backwards and we're treating
42411             // it as the trailing edge, or we've hit the `maxWait` limit.
42412             return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
42413               (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
42414           }
42415
42416           function timerExpired() {
42417             var time = now$1();
42418             if (shouldInvoke(time)) {
42419               return trailingEdge(time);
42420             }
42421             // Restart the timer.
42422             timerId = setTimeout(timerExpired, remainingWait(time));
42423           }
42424
42425           function trailingEdge(time) {
42426             timerId = undefined;
42427
42428             // Only invoke if we have `lastArgs` which means `func` has been
42429             // debounced at least once.
42430             if (trailing && lastArgs) {
42431               return invokeFunc(time);
42432             }
42433             lastArgs = lastThis = undefined;
42434             return result;
42435           }
42436
42437           function cancel() {
42438             if (timerId !== undefined) {
42439               clearTimeout(timerId);
42440             }
42441             lastInvokeTime = 0;
42442             lastArgs = lastCallTime = lastThis = timerId = undefined;
42443           }
42444
42445           function flush() {
42446             return timerId === undefined ? result : trailingEdge(now$1());
42447           }
42448
42449           function debounced() {
42450             var time = now$1(),
42451                 isInvoking = shouldInvoke(time);
42452
42453             lastArgs = arguments;
42454             lastThis = this;
42455             lastCallTime = time;
42456
42457             if (isInvoking) {
42458               if (timerId === undefined) {
42459                 return leadingEdge(lastCallTime);
42460               }
42461               if (maxing) {
42462                 // Handle invocations in a tight loop.
42463                 clearTimeout(timerId);
42464                 timerId = setTimeout(timerExpired, wait);
42465                 return invokeFunc(lastCallTime);
42466               }
42467             }
42468             if (timerId === undefined) {
42469               timerId = setTimeout(timerExpired, wait);
42470             }
42471             return result;
42472           }
42473           debounced.cancel = cancel;
42474           debounced.flush = flush;
42475           return debounced;
42476         }
42477
42478         /** Error message constants. */
42479         var FUNC_ERROR_TEXT$1 = 'Expected a function';
42480
42481         /**
42482          * Creates a throttled function that only invokes `func` at most once per
42483          * every `wait` milliseconds. The throttled function comes with a `cancel`
42484          * method to cancel delayed `func` invocations and a `flush` method to
42485          * immediately invoke them. Provide `options` to indicate whether `func`
42486          * should be invoked on the leading and/or trailing edge of the `wait`
42487          * timeout. The `func` is invoked with the last arguments provided to the
42488          * throttled function. Subsequent calls to the throttled function return the
42489          * result of the last `func` invocation.
42490          *
42491          * **Note:** If `leading` and `trailing` options are `true`, `func` is
42492          * invoked on the trailing edge of the timeout only if the throttled function
42493          * is invoked more than once during the `wait` timeout.
42494          *
42495          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
42496          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
42497          *
42498          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
42499          * for details over the differences between `_.throttle` and `_.debounce`.
42500          *
42501          * @static
42502          * @memberOf _
42503          * @since 0.1.0
42504          * @category Function
42505          * @param {Function} func The function to throttle.
42506          * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
42507          * @param {Object} [options={}] The options object.
42508          * @param {boolean} [options.leading=true]
42509          *  Specify invoking on the leading edge of the timeout.
42510          * @param {boolean} [options.trailing=true]
42511          *  Specify invoking on the trailing edge of the timeout.
42512          * @returns {Function} Returns the new throttled function.
42513          * @example
42514          *
42515          * // Avoid excessively updating the position while scrolling.
42516          * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
42517          *
42518          * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
42519          * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
42520          * jQuery(element).on('click', throttled);
42521          *
42522          * // Cancel the trailing throttled invocation.
42523          * jQuery(window).on('popstate', throttled.cancel);
42524          */
42525         function throttle(func, wait, options) {
42526           var leading = true,
42527               trailing = true;
42528
42529           if (typeof func != 'function') {
42530             throw new TypeError(FUNC_ERROR_TEXT$1);
42531           }
42532           if (isObject$1(options)) {
42533             leading = 'leading' in options ? !!options.leading : leading;
42534             trailing = 'trailing' in options ? !!options.trailing : trailing;
42535           }
42536           return debounce(func, wait, {
42537             'leading': leading,
42538             'maxWait': wait,
42539             'trailing': trailing
42540           });
42541         }
42542
42543         var hashes = createCommonjsModule(function (module, exports) {
42544         /**
42545          * jshashes - https://github.com/h2non/jshashes
42546          * Released under the "New BSD" license
42547          *
42548          * Algorithms specification:
42549          *
42550          * MD5 - http://www.ietf.org/rfc/rfc1321.txt
42551          * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
42552          * SHA1   - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42553          * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42554          * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42555          * HMAC - http://www.ietf.org/rfc/rfc2104.txt
42556          */
42557         (function() {
42558           var Hashes;
42559
42560           function utf8Encode(str) {
42561             var x, y, output = '',
42562               i = -1,
42563               l;
42564
42565             if (str && str.length) {
42566               l = str.length;
42567               while ((i += 1) < l) {
42568                 /* Decode utf-16 surrogate pairs */
42569                 x = str.charCodeAt(i);
42570                 y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
42571                 if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
42572                   x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
42573                   i += 1;
42574                 }
42575                 /* Encode output as utf-8 */
42576                 if (x <= 0x7F) {
42577                   output += String.fromCharCode(x);
42578                 } else if (x <= 0x7FF) {
42579                   output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
42580                     0x80 | (x & 0x3F));
42581                 } else if (x <= 0xFFFF) {
42582                   output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
42583                     0x80 | ((x >>> 6) & 0x3F),
42584                     0x80 | (x & 0x3F));
42585                 } else if (x <= 0x1FFFFF) {
42586                   output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
42587                     0x80 | ((x >>> 12) & 0x3F),
42588                     0x80 | ((x >>> 6) & 0x3F),
42589                     0x80 | (x & 0x3F));
42590                 }
42591               }
42592             }
42593             return output;
42594           }
42595
42596           function utf8Decode(str) {
42597             var i, ac, c1, c2, c3, arr = [],
42598               l;
42599             i = ac = c1 = c2 = c3 = 0;
42600
42601             if (str && str.length) {
42602               l = str.length;
42603               str += '';
42604
42605               while (i < l) {
42606                 c1 = str.charCodeAt(i);
42607                 ac += 1;
42608                 if (c1 < 128) {
42609                   arr[ac] = String.fromCharCode(c1);
42610                   i += 1;
42611                 } else if (c1 > 191 && c1 < 224) {
42612                   c2 = str.charCodeAt(i + 1);
42613                   arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
42614                   i += 2;
42615                 } else {
42616                   c2 = str.charCodeAt(i + 1);
42617                   c3 = str.charCodeAt(i + 2);
42618                   arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
42619                   i += 3;
42620                 }
42621               }
42622             }
42623             return arr.join('');
42624           }
42625
42626           /**
42627            * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42628            * to work around bugs in some JS interpreters.
42629            */
42630
42631           function safe_add(x, y) {
42632             var lsw = (x & 0xFFFF) + (y & 0xFFFF),
42633               msw = (x >> 16) + (y >> 16) + (lsw >> 16);
42634             return (msw << 16) | (lsw & 0xFFFF);
42635           }
42636
42637           /**
42638            * Bitwise rotate a 32-bit number to the left.
42639            */
42640
42641           function bit_rol(num, cnt) {
42642             return (num << cnt) | (num >>> (32 - cnt));
42643           }
42644
42645           /**
42646            * Convert a raw string to a hex string
42647            */
42648
42649           function rstr2hex(input, hexcase) {
42650             var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
42651               output = '',
42652               x, i = 0,
42653               l = input.length;
42654             for (; i < l; i += 1) {
42655               x = input.charCodeAt(i);
42656               output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
42657             }
42658             return output;
42659           }
42660
42661           /**
42662            * Convert an array of big-endian words to a string
42663            */
42664
42665           function binb2rstr(input) {
42666             var i, l = input.length * 32,
42667               output = '';
42668             for (i = 0; i < l; i += 8) {
42669               output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
42670             }
42671             return output;
42672           }
42673
42674           /**
42675            * Convert an array of little-endian words to a string
42676            */
42677
42678           function binl2rstr(input) {
42679             var i, l = input.length * 32,
42680               output = '';
42681             for (i = 0; i < l; i += 8) {
42682               output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
42683             }
42684             return output;
42685           }
42686
42687           /**
42688            * Convert a raw string to an array of little-endian words
42689            * Characters >255 have their high-byte silently ignored.
42690            */
42691
42692           function rstr2binl(input) {
42693             var i, l = input.length * 8,
42694               output = Array(input.length >> 2),
42695               lo = output.length;
42696             for (i = 0; i < lo; i += 1) {
42697               output[i] = 0;
42698             }
42699             for (i = 0; i < l; i += 8) {
42700               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
42701             }
42702             return output;
42703           }
42704
42705           /**
42706            * Convert a raw string to an array of big-endian words
42707            * Characters >255 have their high-byte silently ignored.
42708            */
42709
42710           function rstr2binb(input) {
42711             var i, l = input.length * 8,
42712               output = Array(input.length >> 2),
42713               lo = output.length;
42714             for (i = 0; i < lo; i += 1) {
42715               output[i] = 0;
42716             }
42717             for (i = 0; i < l; i += 8) {
42718               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
42719             }
42720             return output;
42721           }
42722
42723           /**
42724            * Convert a raw string to an arbitrary string encoding
42725            */
42726
42727           function rstr2any(input, encoding) {
42728             var divisor = encoding.length,
42729               remainders = Array(),
42730               i, q, x, ld, quotient, dividend, output, full_length;
42731
42732             /* Convert to an array of 16-bit big-endian values, forming the dividend */
42733             dividend = Array(Math.ceil(input.length / 2));
42734             ld = dividend.length;
42735             for (i = 0; i < ld; i += 1) {
42736               dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
42737             }
42738
42739             /**
42740              * Repeatedly perform a long division. The binary array forms the dividend,
42741              * the length of the encoding is the divisor. Once computed, the quotient
42742              * forms the dividend for the next step. We stop when the dividend is zerHashes.
42743              * All remainders are stored for later use.
42744              */
42745             while (dividend.length > 0) {
42746               quotient = Array();
42747               x = 0;
42748               for (i = 0; i < dividend.length; i += 1) {
42749                 x = (x << 16) + dividend[i];
42750                 q = Math.floor(x / divisor);
42751                 x -= q * divisor;
42752                 if (quotient.length > 0 || q > 0) {
42753                   quotient[quotient.length] = q;
42754                 }
42755               }
42756               remainders[remainders.length] = x;
42757               dividend = quotient;
42758             }
42759
42760             /* Convert the remainders to the output string */
42761             output = '';
42762             for (i = remainders.length - 1; i >= 0; i--) {
42763               output += encoding.charAt(remainders[i]);
42764             }
42765
42766             /* Append leading zero equivalents */
42767             full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
42768             for (i = output.length; i < full_length; i += 1) {
42769               output = encoding[0] + output;
42770             }
42771             return output;
42772           }
42773
42774           /**
42775            * Convert a raw string to a base-64 string
42776            */
42777
42778           function rstr2b64(input, b64pad) {
42779             var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
42780               output = '',
42781               len = input.length,
42782               i, j, triplet;
42783             b64pad = b64pad || '=';
42784             for (i = 0; i < len; i += 3) {
42785               triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
42786               for (j = 0; j < 4; j += 1) {
42787                 if (i * 8 + j * 6 > input.length * 8) {
42788                   output += b64pad;
42789                 } else {
42790                   output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
42791                 }
42792               }
42793             }
42794             return output;
42795           }
42796
42797           Hashes = {
42798             /**
42799              * @property {String} version
42800              * @readonly
42801              */
42802             VERSION: '1.0.6',
42803             /**
42804              * @member Hashes
42805              * @class Base64
42806              * @constructor
42807              */
42808             Base64: function() {
42809               // private properties
42810               var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
42811                 pad = '=', // default pad according with the RFC standard
42812                 utf8 = true; // by default enable UTF-8 support encoding
42813
42814               // public method for encoding
42815               this.encode = function(input) {
42816                 var i, j, triplet,
42817                   output = '',
42818                   len = input.length;
42819
42820                 pad = pad || '=';
42821                 input = (utf8) ? utf8Encode(input) : input;
42822
42823                 for (i = 0; i < len; i += 3) {
42824                   triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
42825                   for (j = 0; j < 4; j += 1) {
42826                     if (i * 8 + j * 6 > len * 8) {
42827                       output += pad;
42828                     } else {
42829                       output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
42830                     }
42831                   }
42832                 }
42833                 return output;
42834               };
42835
42836               // public method for decoding
42837               this.decode = function(input) {
42838                 // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
42839                 var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
42840                   dec = '',
42841                   arr = [];
42842                 if (!input) {
42843                   return input;
42844                 }
42845
42846                 i = ac = 0;
42847                 input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
42848                 //input += '';
42849
42850                 do { // unpack four hexets into three octets using index points in b64
42851                   h1 = tab.indexOf(input.charAt(i += 1));
42852                   h2 = tab.indexOf(input.charAt(i += 1));
42853                   h3 = tab.indexOf(input.charAt(i += 1));
42854                   h4 = tab.indexOf(input.charAt(i += 1));
42855
42856                   bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
42857
42858                   o1 = bits >> 16 & 0xff;
42859                   o2 = bits >> 8 & 0xff;
42860                   o3 = bits & 0xff;
42861                   ac += 1;
42862
42863                   if (h3 === 64) {
42864                     arr[ac] = String.fromCharCode(o1);
42865                   } else if (h4 === 64) {
42866                     arr[ac] = String.fromCharCode(o1, o2);
42867                   } else {
42868                     arr[ac] = String.fromCharCode(o1, o2, o3);
42869                   }
42870                 } while (i < input.length);
42871
42872                 dec = arr.join('');
42873                 dec = (utf8) ? utf8Decode(dec) : dec;
42874
42875                 return dec;
42876               };
42877
42878               // set custom pad string
42879               this.setPad = function(str) {
42880                 pad = str || pad;
42881                 return this;
42882               };
42883               // set custom tab string characters
42884               this.setTab = function(str) {
42885                 tab = str || tab;
42886                 return this;
42887               };
42888               this.setUTF8 = function(bool) {
42889                 if (typeof bool === 'boolean') {
42890                   utf8 = bool;
42891                 }
42892                 return this;
42893               };
42894             },
42895
42896             /**
42897              * CRC-32 calculation
42898              * @member Hashes
42899              * @method CRC32
42900              * @static
42901              * @param {String} str Input String
42902              * @return {String}
42903              */
42904             CRC32: function(str) {
42905               var crc = 0,
42906                 x = 0,
42907                 y = 0,
42908                 table, i, iTop;
42909               str = utf8Encode(str);
42910
42911               table = [
42912                 '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
42913                 '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
42914                 '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
42915                 '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
42916                 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
42917                 '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
42918                 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
42919                 '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
42920                 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
42921                 '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
42922                 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
42923                 '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
42924                 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
42925                 '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
42926                 '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
42927                 '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
42928                 '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
42929                 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
42930                 '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
42931                 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
42932                 '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
42933                 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
42934                 '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
42935                 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
42936                 '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
42937                 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
42938               ].join('');
42939
42940               crc = crc ^ (-1);
42941               for (i = 0, iTop = str.length; i < iTop; i += 1) {
42942                 y = (crc ^ str.charCodeAt(i)) & 0xFF;
42943                 x = '0x' + table.substr(y * 9, 8);
42944                 crc = (crc >>> 8) ^ x;
42945               }
42946               // always return a positive number (that's what >>> 0 does)
42947               return (crc ^ (-1)) >>> 0;
42948             },
42949             /**
42950              * @member Hashes
42951              * @class MD5
42952              * @constructor
42953              * @param {Object} [config]
42954              *
42955              * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42956              * Digest Algorithm, as defined in RFC 1321.
42957              * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
42958              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42959              * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
42960              */
42961             MD5: function(options) {
42962               /**
42963                * Private config properties. You may need to tweak these to be compatible with
42964                * the server-side, but the defaults work in most cases.
42965                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
42966                */
42967               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
42968                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
42969                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
42970
42971               // privileged (public) methods
42972               this.hex = function(s) {
42973                 return rstr2hex(rstr(s), hexcase);
42974               };
42975               this.b64 = function(s) {
42976                 return rstr2b64(rstr(s), b64pad);
42977               };
42978               this.any = function(s, e) {
42979                 return rstr2any(rstr(s), e);
42980               };
42981               this.raw = function(s) {
42982                 return rstr(s);
42983               };
42984               this.hex_hmac = function(k, d) {
42985                 return rstr2hex(rstr_hmac(k, d), hexcase);
42986               };
42987               this.b64_hmac = function(k, d) {
42988                 return rstr2b64(rstr_hmac(k, d), b64pad);
42989               };
42990               this.any_hmac = function(k, d, e) {
42991                 return rstr2any(rstr_hmac(k, d), e);
42992               };
42993               /**
42994                * Perform a simple self-test to see if the VM is working
42995                * @return {String} Hexadecimal hash sample
42996                */
42997               this.vm_test = function() {
42998                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
42999               };
43000               /**
43001                * Enable/disable uppercase hexadecimal returned string
43002                * @param {Boolean}
43003                * @return {Object} this
43004                */
43005               this.setUpperCase = function(a) {
43006                 if (typeof a === 'boolean') {
43007                   hexcase = a;
43008                 }
43009                 return this;
43010               };
43011               /**
43012                * Defines a base64 pad string
43013                * @param {String} Pad
43014                * @return {Object} this
43015                */
43016               this.setPad = function(a) {
43017                 b64pad = a || b64pad;
43018                 return this;
43019               };
43020               /**
43021                * Defines a base64 pad string
43022                * @param {Boolean}
43023                * @return {Object} [this]
43024                */
43025               this.setUTF8 = function(a) {
43026                 if (typeof a === 'boolean') {
43027                   utf8 = a;
43028                 }
43029                 return this;
43030               };
43031
43032               // private methods
43033
43034               /**
43035                * Calculate the MD5 of a raw string
43036                */
43037
43038               function rstr(s) {
43039                 s = (utf8) ? utf8Encode(s) : s;
43040                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
43041               }
43042
43043               /**
43044                * Calculate the HMAC-MD5, of a key and some data (raw strings)
43045                */
43046
43047               function rstr_hmac(key, data) {
43048                 var bkey, ipad, opad, hash, i;
43049
43050                 key = (utf8) ? utf8Encode(key) : key;
43051                 data = (utf8) ? utf8Encode(data) : data;
43052                 bkey = rstr2binl(key);
43053                 if (bkey.length > 16) {
43054                   bkey = binl(bkey, key.length * 8);
43055                 }
43056
43057                 ipad = Array(16), opad = Array(16);
43058                 for (i = 0; i < 16; i += 1) {
43059                   ipad[i] = bkey[i] ^ 0x36363636;
43060                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43061                 }
43062                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
43063                 return binl2rstr(binl(opad.concat(hash), 512 + 128));
43064               }
43065
43066               /**
43067                * Calculate the MD5 of an array of little-endian words, and a bit length.
43068                */
43069
43070               function binl(x, len) {
43071                 var i, olda, oldb, oldc, oldd,
43072                   a = 1732584193,
43073                   b = -271733879,
43074                   c = -1732584194,
43075                   d = 271733878;
43076
43077                 /* append padding */
43078                 x[len >> 5] |= 0x80 << ((len) % 32);
43079                 x[(((len + 64) >>> 9) << 4) + 14] = len;
43080
43081                 for (i = 0; i < x.length; i += 16) {
43082                   olda = a;
43083                   oldb = b;
43084                   oldc = c;
43085                   oldd = d;
43086
43087                   a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
43088                   d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
43089                   c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
43090                   b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
43091                   a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
43092                   d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
43093                   c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
43094                   b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
43095                   a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
43096                   d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
43097                   c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
43098                   b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
43099                   a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
43100                   d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
43101                   c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
43102                   b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
43103
43104                   a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
43105                   d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
43106                   c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
43107                   b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
43108                   a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
43109                   d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
43110                   c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
43111                   b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
43112                   a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
43113                   d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
43114                   c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
43115                   b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
43116                   a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
43117                   d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
43118                   c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
43119                   b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
43120
43121                   a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
43122                   d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
43123                   c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
43124                   b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
43125                   a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
43126                   d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
43127                   c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
43128                   b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
43129                   a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
43130                   d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
43131                   c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
43132                   b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
43133                   a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
43134                   d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
43135                   c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
43136                   b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
43137
43138                   a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
43139                   d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
43140                   c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
43141                   b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
43142                   a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
43143                   d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
43144                   c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
43145                   b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
43146                   a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
43147                   d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
43148                   c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
43149                   b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
43150                   a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
43151                   d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
43152                   c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
43153                   b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
43154
43155                   a = safe_add(a, olda);
43156                   b = safe_add(b, oldb);
43157                   c = safe_add(c, oldc);
43158                   d = safe_add(d, oldd);
43159                 }
43160                 return Array(a, b, c, d);
43161               }
43162
43163               /**
43164                * These functions implement the four basic operations the algorithm uses.
43165                */
43166
43167               function md5_cmn(q, a, b, x, s, t) {
43168                 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
43169               }
43170
43171               function md5_ff(a, b, c, d, x, s, t) {
43172                 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
43173               }
43174
43175               function md5_gg(a, b, c, d, x, s, t) {
43176                 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
43177               }
43178
43179               function md5_hh(a, b, c, d, x, s, t) {
43180                 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
43181               }
43182
43183               function md5_ii(a, b, c, d, x, s, t) {
43184                 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
43185               }
43186             },
43187             /**
43188              * @member Hashes
43189              * @class Hashes.SHA1
43190              * @param {Object} [config]
43191              * @constructor
43192              *
43193              * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
43194              * Version 2.2 Copyright Paul Johnston 2000 - 2009.
43195              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43196              * See http://pajhome.org.uk/crypt/md5 for details.
43197              */
43198             SHA1: function(options) {
43199               /**
43200                * Private config properties. You may need to tweak these to be compatible with
43201                * the server-side, but the defaults work in most cases.
43202                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
43203                */
43204               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
43205                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
43206                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
43207
43208               // public methods
43209               this.hex = function(s) {
43210                 return rstr2hex(rstr(s), hexcase);
43211               };
43212               this.b64 = function(s) {
43213                 return rstr2b64(rstr(s), b64pad);
43214               };
43215               this.any = function(s, e) {
43216                 return rstr2any(rstr(s), e);
43217               };
43218               this.raw = function(s) {
43219                 return rstr(s);
43220               };
43221               this.hex_hmac = function(k, d) {
43222                 return rstr2hex(rstr_hmac(k, d));
43223               };
43224               this.b64_hmac = function(k, d) {
43225                 return rstr2b64(rstr_hmac(k, d), b64pad);
43226               };
43227               this.any_hmac = function(k, d, e) {
43228                 return rstr2any(rstr_hmac(k, d), e);
43229               };
43230               /**
43231                * Perform a simple self-test to see if the VM is working
43232                * @return {String} Hexadecimal hash sample
43233                * @public
43234                */
43235               this.vm_test = function() {
43236                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43237               };
43238               /**
43239                * @description Enable/disable uppercase hexadecimal returned string
43240                * @param {boolean}
43241                * @return {Object} this
43242                * @public
43243                */
43244               this.setUpperCase = function(a) {
43245                 if (typeof a === 'boolean') {
43246                   hexcase = a;
43247                 }
43248                 return this;
43249               };
43250               /**
43251                * @description Defines a base64 pad string
43252                * @param {string} Pad
43253                * @return {Object} this
43254                * @public
43255                */
43256               this.setPad = function(a) {
43257                 b64pad = a || b64pad;
43258                 return this;
43259               };
43260               /**
43261                * @description Defines a base64 pad string
43262                * @param {boolean}
43263                * @return {Object} this
43264                * @public
43265                */
43266               this.setUTF8 = function(a) {
43267                 if (typeof a === 'boolean') {
43268                   utf8 = a;
43269                 }
43270                 return this;
43271               };
43272
43273               // private methods
43274
43275               /**
43276                * Calculate the SHA-512 of a raw string
43277                */
43278
43279               function rstr(s) {
43280                 s = (utf8) ? utf8Encode(s) : s;
43281                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43282               }
43283
43284               /**
43285                * Calculate the HMAC-SHA1 of a key and some data (raw strings)
43286                */
43287
43288               function rstr_hmac(key, data) {
43289                 var bkey, ipad, opad, i, hash;
43290                 key = (utf8) ? utf8Encode(key) : key;
43291                 data = (utf8) ? utf8Encode(data) : data;
43292                 bkey = rstr2binb(key);
43293
43294                 if (bkey.length > 16) {
43295                   bkey = binb(bkey, key.length * 8);
43296                 }
43297                 ipad = Array(16), opad = Array(16);
43298                 for (i = 0; i < 16; i += 1) {
43299                   ipad[i] = bkey[i] ^ 0x36363636;
43300                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43301                 }
43302                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
43303                 return binb2rstr(binb(opad.concat(hash), 512 + 160));
43304               }
43305
43306               /**
43307                * Calculate the SHA-1 of an array of big-endian words, and a bit length
43308                */
43309
43310               function binb(x, len) {
43311                 var i, j, t, olda, oldb, oldc, oldd, olde,
43312                   w = Array(80),
43313                   a = 1732584193,
43314                   b = -271733879,
43315                   c = -1732584194,
43316                   d = 271733878,
43317                   e = -1009589776;
43318
43319                 /* append padding */
43320                 x[len >> 5] |= 0x80 << (24 - len % 32);
43321                 x[((len + 64 >> 9) << 4) + 15] = len;
43322
43323                 for (i = 0; i < x.length; i += 16) {
43324                   olda = a;
43325                   oldb = b;
43326                   oldc = c;
43327                   oldd = d;
43328                   olde = e;
43329
43330                   for (j = 0; j < 80; j += 1) {
43331                     if (j < 16) {
43332                       w[j] = x[i + j];
43333                     } else {
43334                       w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
43335                     }
43336                     t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
43337                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
43338                     e = d;
43339                     d = c;
43340                     c = bit_rol(b, 30);
43341                     b = a;
43342                     a = t;
43343                   }
43344
43345                   a = safe_add(a, olda);
43346                   b = safe_add(b, oldb);
43347                   c = safe_add(c, oldc);
43348                   d = safe_add(d, oldd);
43349                   e = safe_add(e, olde);
43350                 }
43351                 return Array(a, b, c, d, e);
43352               }
43353
43354               /**
43355                * Perform the appropriate triplet combination function for the current
43356                * iteration
43357                */
43358
43359               function sha1_ft(t, b, c, d) {
43360                 if (t < 20) {
43361                   return (b & c) | ((~b) & d);
43362                 }
43363                 if (t < 40) {
43364                   return b ^ c ^ d;
43365                 }
43366                 if (t < 60) {
43367                   return (b & c) | (b & d) | (c & d);
43368                 }
43369                 return b ^ c ^ d;
43370               }
43371
43372               /**
43373                * Determine the appropriate additive constant for the current iteration
43374                */
43375
43376               function sha1_kt(t) {
43377                 return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
43378                   (t < 60) ? -1894007588 : -899497514;
43379               }
43380             },
43381             /**
43382              * @class Hashes.SHA256
43383              * @param {config}
43384              *
43385              * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
43386              * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
43387              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43388              * See http://pajhome.org.uk/crypt/md5 for details.
43389              * Also http://anmar.eu.org/projects/jssha2/
43390              */
43391             SHA256: function(options) {
43392               /**
43393                * Private properties configuration variables. You may need to tweak these to be compatible with
43394                * the server-side, but the defaults work in most cases.
43395                * @see this.setUpperCase() method
43396                * @see this.setPad() method
43397                */
43398               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase  */
43399                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
43400                 /* base-64 pad character. Default '=' for strict RFC compliance   */
43401                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
43402                 /* enable/disable utf8 encoding */
43403                 sha256_K;
43404
43405               /* privileged (public) methods */
43406               this.hex = function(s) {
43407                 return rstr2hex(rstr(s, utf8));
43408               };
43409               this.b64 = function(s) {
43410                 return rstr2b64(rstr(s, utf8), b64pad);
43411               };
43412               this.any = function(s, e) {
43413                 return rstr2any(rstr(s, utf8), e);
43414               };
43415               this.raw = function(s) {
43416                 return rstr(s, utf8);
43417               };
43418               this.hex_hmac = function(k, d) {
43419                 return rstr2hex(rstr_hmac(k, d));
43420               };
43421               this.b64_hmac = function(k, d) {
43422                 return rstr2b64(rstr_hmac(k, d), b64pad);
43423               };
43424               this.any_hmac = function(k, d, e) {
43425                 return rstr2any(rstr_hmac(k, d), e);
43426               };
43427               /**
43428                * Perform a simple self-test to see if the VM is working
43429                * @return {String} Hexadecimal hash sample
43430                * @public
43431                */
43432               this.vm_test = function() {
43433                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43434               };
43435               /**
43436                * Enable/disable uppercase hexadecimal returned string
43437                * @param {boolean}
43438                * @return {Object} this
43439                * @public
43440                */
43441               this.setUpperCase = function(a) {
43442                 if (typeof a === 'boolean') {
43443                   hexcase = a;
43444                 }
43445                 return this;
43446               };
43447               /**
43448                * @description Defines a base64 pad string
43449                * @param {string} Pad
43450                * @return {Object} this
43451                * @public
43452                */
43453               this.setPad = function(a) {
43454                 b64pad = a || b64pad;
43455                 return this;
43456               };
43457               /**
43458                * Defines a base64 pad string
43459                * @param {boolean}
43460                * @return {Object} this
43461                * @public
43462                */
43463               this.setUTF8 = function(a) {
43464                 if (typeof a === 'boolean') {
43465                   utf8 = a;
43466                 }
43467                 return this;
43468               };
43469
43470               // private methods
43471
43472               /**
43473                * Calculate the SHA-512 of a raw string
43474                */
43475
43476               function rstr(s, utf8) {
43477                 s = (utf8) ? utf8Encode(s) : s;
43478                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43479               }
43480
43481               /**
43482                * Calculate the HMAC-sha256 of a key and some data (raw strings)
43483                */
43484
43485               function rstr_hmac(key, data) {
43486                 key = (utf8) ? utf8Encode(key) : key;
43487                 data = (utf8) ? utf8Encode(data) : data;
43488                 var hash, i = 0,
43489                   bkey = rstr2binb(key),
43490                   ipad = Array(16),
43491                   opad = Array(16);
43492
43493                 if (bkey.length > 16) {
43494                   bkey = binb(bkey, key.length * 8);
43495                 }
43496
43497                 for (; i < 16; i += 1) {
43498                   ipad[i] = bkey[i] ^ 0x36363636;
43499                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43500                 }
43501
43502                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
43503                 return binb2rstr(binb(opad.concat(hash), 512 + 256));
43504               }
43505
43506               /*
43507                * Main sha256 function, with its support functions
43508                */
43509
43510               function sha256_S(X, n) {
43511                 return (X >>> n) | (X << (32 - n));
43512               }
43513
43514               function sha256_R(X, n) {
43515                 return (X >>> n);
43516               }
43517
43518               function sha256_Ch(x, y, z) {
43519                 return ((x & y) ^ ((~x) & z));
43520               }
43521
43522               function sha256_Maj(x, y, z) {
43523                 return ((x & y) ^ (x & z) ^ (y & z));
43524               }
43525
43526               function sha256_Sigma0256(x) {
43527                 return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
43528               }
43529
43530               function sha256_Sigma1256(x) {
43531                 return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
43532               }
43533
43534               function sha256_Gamma0256(x) {
43535                 return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
43536               }
43537
43538               function sha256_Gamma1256(x) {
43539                 return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
43540               }
43541
43542               sha256_K = [
43543                 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
43544                 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
43545                 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
43546                 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
43547                 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
43548                 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
43549                 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
43550               ];
43551
43552               function binb(m, l) {
43553                 var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
43554                   1359893119, -1694144372, 528734635, 1541459225
43555                 ];
43556                 var W = new Array(64);
43557                 var a, b, c, d, e, f, g, h;
43558                 var i, j, T1, T2;
43559
43560                 /* append padding */
43561                 m[l >> 5] |= 0x80 << (24 - l % 32);
43562                 m[((l + 64 >> 9) << 4) + 15] = l;
43563
43564                 for (i = 0; i < m.length; i += 16) {
43565                   a = HASH[0];
43566                   b = HASH[1];
43567                   c = HASH[2];
43568                   d = HASH[3];
43569                   e = HASH[4];
43570                   f = HASH[5];
43571                   g = HASH[6];
43572                   h = HASH[7];
43573
43574                   for (j = 0; j < 64; j += 1) {
43575                     if (j < 16) {
43576                       W[j] = m[j + i];
43577                     } else {
43578                       W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
43579                         sha256_Gamma0256(W[j - 15])), W[j - 16]);
43580                     }
43581
43582                     T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
43583                       sha256_K[j]), W[j]);
43584                     T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
43585                     h = g;
43586                     g = f;
43587                     f = e;
43588                     e = safe_add(d, T1);
43589                     d = c;
43590                     c = b;
43591                     b = a;
43592                     a = safe_add(T1, T2);
43593                   }
43594
43595                   HASH[0] = safe_add(a, HASH[0]);
43596                   HASH[1] = safe_add(b, HASH[1]);
43597                   HASH[2] = safe_add(c, HASH[2]);
43598                   HASH[3] = safe_add(d, HASH[3]);
43599                   HASH[4] = safe_add(e, HASH[4]);
43600                   HASH[5] = safe_add(f, HASH[5]);
43601                   HASH[6] = safe_add(g, HASH[6]);
43602                   HASH[7] = safe_add(h, HASH[7]);
43603                 }
43604                 return HASH;
43605               }
43606
43607             },
43608
43609             /**
43610              * @class Hashes.SHA512
43611              * @param {config}
43612              *
43613              * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
43614              * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
43615              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43616              * See http://pajhome.org.uk/crypt/md5 for details.
43617              */
43618             SHA512: function(options) {
43619               /**
43620                * Private properties configuration variables. You may need to tweak these to be compatible with
43621                * the server-side, but the defaults work in most cases.
43622                * @see this.setUpperCase() method
43623                * @see this.setPad() method
43624                */
43625               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
43626                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
43627                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
43628                 /* base-64 pad character. Default '=' for strict RFC compliance   */
43629                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
43630                 /* enable/disable utf8 encoding */
43631                 sha512_k;
43632
43633               /* privileged (public) methods */
43634               this.hex = function(s) {
43635                 return rstr2hex(rstr(s));
43636               };
43637               this.b64 = function(s) {
43638                 return rstr2b64(rstr(s), b64pad);
43639               };
43640               this.any = function(s, e) {
43641                 return rstr2any(rstr(s), e);
43642               };
43643               this.raw = function(s) {
43644                 return rstr(s);
43645               };
43646               this.hex_hmac = function(k, d) {
43647                 return rstr2hex(rstr_hmac(k, d));
43648               };
43649               this.b64_hmac = function(k, d) {
43650                 return rstr2b64(rstr_hmac(k, d), b64pad);
43651               };
43652               this.any_hmac = function(k, d, e) {
43653                 return rstr2any(rstr_hmac(k, d), e);
43654               };
43655               /**
43656                * Perform a simple self-test to see if the VM is working
43657                * @return {String} Hexadecimal hash sample
43658                * @public
43659                */
43660               this.vm_test = function() {
43661                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43662               };
43663               /**
43664                * @description Enable/disable uppercase hexadecimal returned string
43665                * @param {boolean}
43666                * @return {Object} this
43667                * @public
43668                */
43669               this.setUpperCase = function(a) {
43670                 if (typeof a === 'boolean') {
43671                   hexcase = a;
43672                 }
43673                 return this;
43674               };
43675               /**
43676                * @description Defines a base64 pad string
43677                * @param {string} Pad
43678                * @return {Object} this
43679                * @public
43680                */
43681               this.setPad = function(a) {
43682                 b64pad = a || b64pad;
43683                 return this;
43684               };
43685               /**
43686                * @description Defines a base64 pad string
43687                * @param {boolean}
43688                * @return {Object} this
43689                * @public
43690                */
43691               this.setUTF8 = function(a) {
43692                 if (typeof a === 'boolean') {
43693                   utf8 = a;
43694                 }
43695                 return this;
43696               };
43697
43698               /* private methods */
43699
43700               /**
43701                * Calculate the SHA-512 of a raw string
43702                */
43703
43704               function rstr(s) {
43705                 s = (utf8) ? utf8Encode(s) : s;
43706                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43707               }
43708               /*
43709                * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
43710                */
43711
43712               function rstr_hmac(key, data) {
43713                 key = (utf8) ? utf8Encode(key) : key;
43714                 data = (utf8) ? utf8Encode(data) : data;
43715
43716                 var hash, i = 0,
43717                   bkey = rstr2binb(key),
43718                   ipad = Array(32),
43719                   opad = Array(32);
43720
43721                 if (bkey.length > 32) {
43722                   bkey = binb(bkey, key.length * 8);
43723                 }
43724
43725                 for (; i < 32; i += 1) {
43726                   ipad[i] = bkey[i] ^ 0x36363636;
43727                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43728                 }
43729
43730                 hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
43731                 return binb2rstr(binb(opad.concat(hash), 1024 + 512));
43732               }
43733
43734               /**
43735                * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
43736                */
43737
43738               function binb(x, len) {
43739                 var j, i, l,
43740                   W = new Array(80),
43741                   hash = new Array(16),
43742                   //Initial hash values
43743                   H = [
43744                     new int64(0x6a09e667, -205731576),
43745                     new int64(-1150833019, -2067093701),
43746                     new int64(0x3c6ef372, -23791573),
43747                     new int64(-1521486534, 0x5f1d36f1),
43748                     new int64(0x510e527f, -1377402159),
43749                     new int64(-1694144372, 0x2b3e6c1f),
43750                     new int64(0x1f83d9ab, -79577749),
43751                     new int64(0x5be0cd19, 0x137e2179)
43752                   ],
43753                   T1 = new int64(0, 0),
43754                   T2 = new int64(0, 0),
43755                   a = new int64(0, 0),
43756                   b = new int64(0, 0),
43757                   c = new int64(0, 0),
43758                   d = new int64(0, 0),
43759                   e = new int64(0, 0),
43760                   f = new int64(0, 0),
43761                   g = new int64(0, 0),
43762                   h = new int64(0, 0),
43763                   //Temporary variables not specified by the document
43764                   s0 = new int64(0, 0),
43765                   s1 = new int64(0, 0),
43766                   Ch = new int64(0, 0),
43767                   Maj = new int64(0, 0),
43768                   r1 = new int64(0, 0),
43769                   r2 = new int64(0, 0),
43770                   r3 = new int64(0, 0);
43771
43772                 if (sha512_k === undefined) {
43773                   //SHA512 constants
43774                   sha512_k = [
43775                     new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
43776                     new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
43777                     new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
43778                     new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
43779                     new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
43780                     new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
43781                     new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
43782                     new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
43783                     new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
43784                     new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
43785                     new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
43786                     new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
43787                     new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
43788                     new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
43789                     new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
43790                     new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
43791                     new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
43792                     new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
43793                     new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
43794                     new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
43795                     new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
43796                     new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
43797                     new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
43798                     new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
43799                     new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
43800                     new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
43801                     new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
43802                     new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
43803                     new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
43804                     new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
43805                     new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
43806                     new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
43807                     new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
43808                     new int64(-354779690, -840897762), new int64(-176337025, -294727304),
43809                     new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
43810                     new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
43811                     new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
43812                     new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
43813                     new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
43814                     new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
43815                   ];
43816                 }
43817
43818                 for (i = 0; i < 80; i += 1) {
43819                   W[i] = new int64(0, 0);
43820                 }
43821
43822                 // append padding to the source string. The format is described in the FIPS.
43823                 x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
43824                 x[((len + 128 >> 10) << 5) + 31] = len;
43825                 l = x.length;
43826                 for (i = 0; i < l; i += 32) { //32 dwords is the block size
43827                   int64copy(a, H[0]);
43828                   int64copy(b, H[1]);
43829                   int64copy(c, H[2]);
43830                   int64copy(d, H[3]);
43831                   int64copy(e, H[4]);
43832                   int64copy(f, H[5]);
43833                   int64copy(g, H[6]);
43834                   int64copy(h, H[7]);
43835
43836                   for (j = 0; j < 16; j += 1) {
43837                     W[j].h = x[i + 2 * j];
43838                     W[j].l = x[i + 2 * j + 1];
43839                   }
43840
43841                   for (j = 16; j < 80; j += 1) {
43842                     //sigma1
43843                     int64rrot(r1, W[j - 2], 19);
43844                     int64revrrot(r2, W[j - 2], 29);
43845                     int64shr(r3, W[j - 2], 6);
43846                     s1.l = r1.l ^ r2.l ^ r3.l;
43847                     s1.h = r1.h ^ r2.h ^ r3.h;
43848                     //sigma0
43849                     int64rrot(r1, W[j - 15], 1);
43850                     int64rrot(r2, W[j - 15], 8);
43851                     int64shr(r3, W[j - 15], 7);
43852                     s0.l = r1.l ^ r2.l ^ r3.l;
43853                     s0.h = r1.h ^ r2.h ^ r3.h;
43854
43855                     int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
43856                   }
43857
43858                   for (j = 0; j < 80; j += 1) {
43859                     //Ch
43860                     Ch.l = (e.l & f.l) ^ (~e.l & g.l);
43861                     Ch.h = (e.h & f.h) ^ (~e.h & g.h);
43862
43863                     //Sigma1
43864                     int64rrot(r1, e, 14);
43865                     int64rrot(r2, e, 18);
43866                     int64revrrot(r3, e, 9);
43867                     s1.l = r1.l ^ r2.l ^ r3.l;
43868                     s1.h = r1.h ^ r2.h ^ r3.h;
43869
43870                     //Sigma0
43871                     int64rrot(r1, a, 28);
43872                     int64revrrot(r2, a, 2);
43873                     int64revrrot(r3, a, 7);
43874                     s0.l = r1.l ^ r2.l ^ r3.l;
43875                     s0.h = r1.h ^ r2.h ^ r3.h;
43876
43877                     //Maj
43878                     Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
43879                     Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
43880
43881                     int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
43882                     int64add(T2, s0, Maj);
43883
43884                     int64copy(h, g);
43885                     int64copy(g, f);
43886                     int64copy(f, e);
43887                     int64add(e, d, T1);
43888                     int64copy(d, c);
43889                     int64copy(c, b);
43890                     int64copy(b, a);
43891                     int64add(a, T1, T2);
43892                   }
43893                   int64add(H[0], H[0], a);
43894                   int64add(H[1], H[1], b);
43895                   int64add(H[2], H[2], c);
43896                   int64add(H[3], H[3], d);
43897                   int64add(H[4], H[4], e);
43898                   int64add(H[5], H[5], f);
43899                   int64add(H[6], H[6], g);
43900                   int64add(H[7], H[7], h);
43901                 }
43902
43903                 //represent the hash as an array of 32-bit dwords
43904                 for (i = 0; i < 8; i += 1) {
43905                   hash[2 * i] = H[i].h;
43906                   hash[2 * i + 1] = H[i].l;
43907                 }
43908                 return hash;
43909               }
43910
43911               //A constructor for 64-bit numbers
43912
43913               function int64(h, l) {
43914                 this.h = h;
43915                 this.l = l;
43916                 //this.toString = int64toString;
43917               }
43918
43919               //Copies src into dst, assuming both are 64-bit numbers
43920
43921               function int64copy(dst, src) {
43922                 dst.h = src.h;
43923                 dst.l = src.l;
43924               }
43925
43926               //Right-rotates a 64-bit number by shift
43927               //Won't handle cases of shift>=32
43928               //The function revrrot() is for that
43929
43930               function int64rrot(dst, x, shift) {
43931                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
43932                 dst.h = (x.h >>> shift) | (x.l << (32 - shift));
43933               }
43934
43935               //Reverses the dwords of the source and then rotates right by shift.
43936               //This is equivalent to rotation by 32+shift
43937
43938               function int64revrrot(dst, x, shift) {
43939                 dst.l = (x.h >>> shift) | (x.l << (32 - shift));
43940                 dst.h = (x.l >>> shift) | (x.h << (32 - shift));
43941               }
43942
43943               //Bitwise-shifts right a 64-bit number by shift
43944               //Won't handle shift>=32, but it's never needed in SHA512
43945
43946               function int64shr(dst, x, shift) {
43947                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
43948                 dst.h = (x.h >>> shift);
43949               }
43950
43951               //Adds two 64-bit numbers
43952               //Like the original implementation, does not rely on 32-bit operations
43953
43954               function int64add(dst, x, y) {
43955                 var w0 = (x.l & 0xffff) + (y.l & 0xffff);
43956                 var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
43957                 var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
43958                 var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
43959                 dst.l = (w0 & 0xffff) | (w1 << 16);
43960                 dst.h = (w2 & 0xffff) | (w3 << 16);
43961               }
43962
43963               //Same, except with 4 addends. Works faster than adding them one by one.
43964
43965               function int64add4(dst, a, b, c, d) {
43966                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
43967                 var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
43968                 var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
43969                 var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
43970                 dst.l = (w0 & 0xffff) | (w1 << 16);
43971                 dst.h = (w2 & 0xffff) | (w3 << 16);
43972               }
43973
43974               //Same, except with 5 addends
43975
43976               function int64add5(dst, a, b, c, d, e) {
43977                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
43978                   w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
43979                   w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
43980                   w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
43981                 dst.l = (w0 & 0xffff) | (w1 << 16);
43982                 dst.h = (w2 & 0xffff) | (w3 << 16);
43983               }
43984             },
43985             /**
43986              * @class Hashes.RMD160
43987              * @constructor
43988              * @param {Object} [config]
43989              *
43990              * A JavaScript implementation of the RIPEMD-160 Algorithm
43991              * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
43992              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43993              * See http://pajhome.org.uk/crypt/md5 for details.
43994              * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
43995              */
43996             RMD160: function(options) {
43997               /**
43998                * Private properties configuration variables. You may need to tweak these to be compatible with
43999                * the server-side, but the defaults work in most cases.
44000                * @see this.setUpperCase() method
44001                * @see this.setPad() method
44002                */
44003               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
44004                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
44005                 b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
44006                 /* base-64 pad character. Default '=' for strict RFC compliance   */
44007                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
44008                 /* enable/disable utf8 encoding */
44009                 rmd160_r1 = [
44010                   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
44011                   7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
44012                   3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
44013                   1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
44014                   4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
44015                 ],
44016                 rmd160_r2 = [
44017                   5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
44018                   6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
44019                   15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
44020                   8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
44021                   12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
44022                 ],
44023                 rmd160_s1 = [
44024                   11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
44025                   7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
44026                   11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
44027                   11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
44028                   9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
44029                 ],
44030                 rmd160_s2 = [
44031                   8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
44032                   9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
44033                   9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
44034                   15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
44035                   8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
44036                 ];
44037
44038               /* privileged (public) methods */
44039               this.hex = function(s) {
44040                 return rstr2hex(rstr(s));
44041               };
44042               this.b64 = function(s) {
44043                 return rstr2b64(rstr(s), b64pad);
44044               };
44045               this.any = function(s, e) {
44046                 return rstr2any(rstr(s), e);
44047               };
44048               this.raw = function(s) {
44049                 return rstr(s);
44050               };
44051               this.hex_hmac = function(k, d) {
44052                 return rstr2hex(rstr_hmac(k, d));
44053               };
44054               this.b64_hmac = function(k, d) {
44055                 return rstr2b64(rstr_hmac(k, d), b64pad);
44056               };
44057               this.any_hmac = function(k, d, e) {
44058                 return rstr2any(rstr_hmac(k, d), e);
44059               };
44060               /**
44061                * Perform a simple self-test to see if the VM is working
44062                * @return {String} Hexadecimal hash sample
44063                * @public
44064                */
44065               this.vm_test = function() {
44066                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
44067               };
44068               /**
44069                * @description Enable/disable uppercase hexadecimal returned string
44070                * @param {boolean}
44071                * @return {Object} this
44072                * @public
44073                */
44074               this.setUpperCase = function(a) {
44075                 if (typeof a === 'boolean') {
44076                   hexcase = a;
44077                 }
44078                 return this;
44079               };
44080               /**
44081                * @description Defines a base64 pad string
44082                * @param {string} Pad
44083                * @return {Object} this
44084                * @public
44085                */
44086               this.setPad = function(a) {
44087                 if (typeof a !== 'undefined') {
44088                   b64pad = a;
44089                 }
44090                 return this;
44091               };
44092               /**
44093                * @description Defines a base64 pad string
44094                * @param {boolean}
44095                * @return {Object} this
44096                * @public
44097                */
44098               this.setUTF8 = function(a) {
44099                 if (typeof a === 'boolean') {
44100                   utf8 = a;
44101                 }
44102                 return this;
44103               };
44104
44105               /* private methods */
44106
44107               /**
44108                * Calculate the rmd160 of a raw string
44109                */
44110
44111               function rstr(s) {
44112                 s = (utf8) ? utf8Encode(s) : s;
44113                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
44114               }
44115
44116               /**
44117                * Calculate the HMAC-rmd160 of a key and some data (raw strings)
44118                */
44119
44120               function rstr_hmac(key, data) {
44121                 key = (utf8) ? utf8Encode(key) : key;
44122                 data = (utf8) ? utf8Encode(data) : data;
44123                 var i, hash,
44124                   bkey = rstr2binl(key),
44125                   ipad = Array(16),
44126                   opad = Array(16);
44127
44128                 if (bkey.length > 16) {
44129                   bkey = binl(bkey, key.length * 8);
44130                 }
44131
44132                 for (i = 0; i < 16; i += 1) {
44133                   ipad[i] = bkey[i] ^ 0x36363636;
44134                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
44135                 }
44136                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
44137                 return binl2rstr(binl(opad.concat(hash), 512 + 160));
44138               }
44139
44140               /**
44141                * Convert an array of little-endian words to a string
44142                */
44143
44144               function binl2rstr(input) {
44145                 var i, output = '',
44146                   l = input.length * 32;
44147                 for (i = 0; i < l; i += 8) {
44148                   output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
44149                 }
44150                 return output;
44151               }
44152
44153               /**
44154                * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
44155                */
44156
44157               function binl(x, len) {
44158                 var T, j, i, l,
44159                   h0 = 0x67452301,
44160                   h1 = 0xefcdab89,
44161                   h2 = 0x98badcfe,
44162                   h3 = 0x10325476,
44163                   h4 = 0xc3d2e1f0,
44164                   A1, B1, C1, D1, E1,
44165                   A2, B2, C2, D2, E2;
44166
44167                 /* append padding */
44168                 x[len >> 5] |= 0x80 << (len % 32);
44169                 x[(((len + 64) >>> 9) << 4) + 14] = len;
44170                 l = x.length;
44171
44172                 for (i = 0; i < l; i += 16) {
44173                   A1 = A2 = h0;
44174                   B1 = B2 = h1;
44175                   C1 = C2 = h2;
44176                   D1 = D2 = h3;
44177                   E1 = E2 = h4;
44178                   for (j = 0; j <= 79; j += 1) {
44179                     T = safe_add(A1, rmd160_f(j, B1, C1, D1));
44180                     T = safe_add(T, x[i + rmd160_r1[j]]);
44181                     T = safe_add(T, rmd160_K1(j));
44182                     T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
44183                     A1 = E1;
44184                     E1 = D1;
44185                     D1 = bit_rol(C1, 10);
44186                     C1 = B1;
44187                     B1 = T;
44188                     T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
44189                     T = safe_add(T, x[i + rmd160_r2[j]]);
44190                     T = safe_add(T, rmd160_K2(j));
44191                     T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
44192                     A2 = E2;
44193                     E2 = D2;
44194                     D2 = bit_rol(C2, 10);
44195                     C2 = B2;
44196                     B2 = T;
44197                   }
44198
44199                   T = safe_add(h1, safe_add(C1, D2));
44200                   h1 = safe_add(h2, safe_add(D1, E2));
44201                   h2 = safe_add(h3, safe_add(E1, A2));
44202                   h3 = safe_add(h4, safe_add(A1, B2));
44203                   h4 = safe_add(h0, safe_add(B1, C2));
44204                   h0 = T;
44205                 }
44206                 return [h0, h1, h2, h3, h4];
44207               }
44208
44209               // specific algorithm methods
44210
44211               function rmd160_f(j, x, y, z) {
44212                 return (0 <= j && j <= 15) ? (x ^ y ^ z) :
44213                   (16 <= j && j <= 31) ? (x & y) | (~x & z) :
44214                   (32 <= j && j <= 47) ? (x | ~y) ^ z :
44215                   (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
44216                   (64 <= j && j <= 79) ? x ^ (y | ~z) :
44217                   'rmd160_f: j out of range';
44218               }
44219
44220               function rmd160_K1(j) {
44221                 return (0 <= j && j <= 15) ? 0x00000000 :
44222                   (16 <= j && j <= 31) ? 0x5a827999 :
44223                   (32 <= j && j <= 47) ? 0x6ed9eba1 :
44224                   (48 <= j && j <= 63) ? 0x8f1bbcdc :
44225                   (64 <= j && j <= 79) ? 0xa953fd4e :
44226                   'rmd160_K1: j out of range';
44227               }
44228
44229               function rmd160_K2(j) {
44230                 return (0 <= j && j <= 15) ? 0x50a28be6 :
44231                   (16 <= j && j <= 31) ? 0x5c4dd124 :
44232                   (32 <= j && j <= 47) ? 0x6d703ef3 :
44233                   (48 <= j && j <= 63) ? 0x7a6d76e9 :
44234                   (64 <= j && j <= 79) ? 0x00000000 :
44235                   'rmd160_K2: j out of range';
44236               }
44237             }
44238           };
44239
44240           // exposes Hashes
44241           (function(window, undefined$1) {
44242             var freeExports = false;
44243             {
44244               freeExports = exports;
44245               if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
44246                 window = commonjsGlobal;
44247               }
44248             }
44249
44250             if (typeof undefined$1 === 'function' && typeof undefined$1.amd === 'object' && undefined$1.amd) {
44251               // define as an anonymous module, so, through path mapping, it can be aliased
44252               undefined$1(function() {
44253                 return Hashes;
44254               });
44255             } else if (freeExports) {
44256               // in Node.js or RingoJS v0.8.0+
44257               if ( module && module.exports === freeExports) {
44258                 module.exports = Hashes;
44259               }
44260               // in Narwhal or RingoJS v0.7.0-
44261               else {
44262                 freeExports.Hashes = Hashes;
44263               }
44264             } else {
44265               // in a browser or Rhino
44266               window.Hashes = Hashes;
44267             }
44268           }(this));
44269         }()); // IIFE
44270         });
44271
44272         var immutable = extend$2;
44273
44274         var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
44275
44276         function extend$2() {
44277             var target = {};
44278
44279             for (var i = 0; i < arguments.length; i++) {
44280                 var source = arguments[i];
44281
44282                 for (var key in source) {
44283                     if (hasOwnProperty$2.call(source, key)) {
44284                         target[key] = source[key];
44285                     }
44286                 }
44287             }
44288
44289             return target
44290         }
44291
44292         var sha1 = new hashes.SHA1();
44293
44294         var ohauth = {};
44295
44296         ohauth.qsString = function(obj) {
44297             return Object.keys(obj).sort().map(function(key) {
44298                 return ohauth.percentEncode(key) + '=' +
44299                     ohauth.percentEncode(obj[key]);
44300             }).join('&');
44301         };
44302
44303         ohauth.stringQs = function(str) {
44304             return str.split('&').filter(function (pair) {
44305                 return pair !== '';
44306             }).reduce(function(obj, pair){
44307                 var parts = pair.split('=');
44308                 obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
44309                     '' : decodeURIComponent(parts[1]);
44310                 return obj;
44311             }, {});
44312         };
44313
44314         ohauth.rawxhr = function(method, url, data, headers, callback) {
44315             var xhr = new XMLHttpRequest(),
44316                 twoHundred = /^20\d$/;
44317             xhr.onreadystatechange = function() {
44318                 if (4 === xhr.readyState && 0 !== xhr.status) {
44319                     if (twoHundred.test(xhr.status)) callback(null, xhr);
44320                     else return callback(xhr, null);
44321                 }
44322             };
44323             xhr.onerror = function(e) { return callback(e, null); };
44324             xhr.open(method, url, true);
44325             for (var h in headers) xhr.setRequestHeader(h, headers[h]);
44326             xhr.send(data);
44327             return xhr;
44328         };
44329
44330         ohauth.xhr = function(method, url, auth, data, options, callback) {
44331             var headers = (options && options.header) || {
44332                 'Content-Type': 'application/x-www-form-urlencoded'
44333             };
44334             headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
44335             return ohauth.rawxhr(method, url, data, headers, callback);
44336         };
44337
44338         ohauth.nonce = function() {
44339             for (var o = ''; o.length < 6;) {
44340                 o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
44341             }
44342             return o;
44343         };
44344
44345         ohauth.authHeader = function(obj) {
44346             return Object.keys(obj).sort().map(function(key) {
44347                 return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
44348             }).join(', ');
44349         };
44350
44351         ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
44352
44353         ohauth.percentEncode = function(s) {
44354             return encodeURIComponent(s)
44355                 .replace(/\!/g, '%21').replace(/\'/g, '%27')
44356                 .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
44357         };
44358
44359         ohauth.baseString = function(method, url, params) {
44360             if (params.oauth_signature) delete params.oauth_signature;
44361             return [
44362                 method,
44363                 ohauth.percentEncode(url),
44364                 ohauth.percentEncode(ohauth.qsString(params))].join('&');
44365         };
44366
44367         ohauth.signature = function(oauth_secret, token_secret, baseString) {
44368             return sha1.b64_hmac(
44369                 ohauth.percentEncode(oauth_secret) + '&' +
44370                 ohauth.percentEncode(token_secret),
44371                 baseString);
44372         };
44373
44374         /**
44375          * Takes an options object for configuration (consumer_key,
44376          * consumer_secret, version, signature_method, token, token_secret)
44377          * and returns a function that generates the Authorization header
44378          * for given data.
44379          *
44380          * The returned function takes these parameters:
44381          * - method: GET/POST/...
44382          * - uri: full URI with protocol, port, path and query string
44383          * - extra_params: any extra parameters (that are passed in the POST data),
44384          *   can be an object or a from-urlencoded string.
44385          *
44386          * Returned function returns full OAuth header with "OAuth" string in it.
44387          */
44388
44389         ohauth.headerGenerator = function(options) {
44390             options = options || {};
44391             var consumer_key = options.consumer_key || '',
44392                 consumer_secret = options.consumer_secret || '',
44393                 signature_method = options.signature_method || 'HMAC-SHA1',
44394                 version = options.version || '1.0',
44395                 token = options.token || '',
44396                 token_secret = options.token_secret || '';
44397
44398             return function(method, uri, extra_params) {
44399                 method = method.toUpperCase();
44400                 if (typeof extra_params === 'string' && extra_params.length > 0) {
44401                     extra_params = ohauth.stringQs(extra_params);
44402                 }
44403
44404                 var uri_parts = uri.split('?', 2),
44405                 base_uri = uri_parts[0];
44406
44407                 var query_params = uri_parts.length === 2 ?
44408                     ohauth.stringQs(uri_parts[1]) : {};
44409
44410                 var oauth_params = {
44411                     oauth_consumer_key: consumer_key,
44412                     oauth_signature_method: signature_method,
44413                     oauth_version: version,
44414                     oauth_timestamp: ohauth.timestamp(),
44415                     oauth_nonce: ohauth.nonce()
44416                 };
44417
44418                 if (token) oauth_params.oauth_token = token;
44419
44420                 var all_params = immutable({}, oauth_params, query_params, extra_params),
44421                     base_str = ohauth.baseString(method, base_uri, all_params);
44422
44423                 oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
44424
44425                 return 'OAuth ' + ohauth.authHeader(oauth_params);
44426             };
44427         };
44428
44429         var ohauth_1 = ohauth;
44430
44431         var resolveUrl = createCommonjsModule(function (module, exports) {
44432         // Copyright 2014 Simon Lydell
44433         // X11 (“MIT”) Licensed. (See LICENSE.)
44434
44435         void (function(root, factory) {
44436           {
44437             module.exports = factory();
44438           }
44439         }(commonjsGlobal, function() {
44440
44441           function resolveUrl(/* ...urls */) {
44442             var numUrls = arguments.length;
44443
44444             if (numUrls === 0) {
44445               throw new Error("resolveUrl requires at least one argument; got none.")
44446             }
44447
44448             var base = document.createElement("base");
44449             base.href = arguments[0];
44450
44451             if (numUrls === 1) {
44452               return base.href
44453             }
44454
44455             var head = document.getElementsByTagName("head")[0];
44456             head.insertBefore(base, head.firstChild);
44457
44458             var a = document.createElement("a");
44459             var resolved;
44460
44461             for (var index = 1; index < numUrls; index++) {
44462               a.href = arguments[index];
44463               resolved = a.href;
44464               base.href = resolved;
44465             }
44466
44467             head.removeChild(base);
44468
44469             return resolved
44470           }
44471
44472           return resolveUrl
44473
44474         }));
44475         });
44476
44477         var assign$2 = make_assign();
44478         var create$7 = make_create();
44479         var trim$1 = make_trim();
44480         var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
44481
44482         var util = {
44483                 assign: assign$2,
44484                 create: create$7,
44485                 trim: trim$1,
44486                 bind: bind$3,
44487                 slice: slice$b,
44488                 each: each,
44489                 map: map$5,
44490                 pluck: pluck,
44491                 isList: isList,
44492                 isFunction: isFunction$2,
44493                 isObject: isObject$2,
44494                 Global: Global
44495         };
44496
44497         function make_assign() {
44498                 if (Object.assign) {
44499                         return Object.assign
44500                 } else {
44501                         return function shimAssign(obj, props1, props2, etc) {
44502                                 for (var i = 1; i < arguments.length; i++) {
44503                                         each(Object(arguments[i]), function(val, key) {
44504                                                 obj[key] = val;
44505                                         });
44506                                 }                       
44507                                 return obj
44508                         }
44509                 }
44510         }
44511
44512         function make_create() {
44513                 if (Object.create) {
44514                         return function create(obj, assignProps1, assignProps2, etc) {
44515                                 var assignArgsList = slice$b(arguments, 1);
44516                                 return assign$2.apply(this, [Object.create(obj)].concat(assignArgsList))
44517                         }
44518                 } else {
44519                         function F() {} // eslint-disable-line no-inner-declarations
44520                         return function create(obj, assignProps1, assignProps2, etc) {
44521                                 var assignArgsList = slice$b(arguments, 1);
44522                                 F.prototype = obj;
44523                                 return assign$2.apply(this, [new F()].concat(assignArgsList))
44524                         }
44525                 }
44526         }
44527
44528         function make_trim() {
44529                 if (String.prototype.trim) {
44530                         return function trim(str) {
44531                                 return String.prototype.trim.call(str)
44532                         }
44533                 } else {
44534                         return function trim(str) {
44535                                 return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
44536                         }
44537                 }
44538         }
44539
44540         function bind$3(obj, fn) {
44541                 return function() {
44542                         return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
44543                 }
44544         }
44545
44546         function slice$b(arr, index) {
44547                 return Array.prototype.slice.call(arr, index || 0)
44548         }
44549
44550         function each(obj, fn) {
44551                 pluck(obj, function(val, key) {
44552                         fn(val, key);
44553                         return false
44554                 });
44555         }
44556
44557         function map$5(obj, fn) {
44558                 var res = (isList(obj) ? [] : {});
44559                 pluck(obj, function(v, k) {
44560                         res[k] = fn(v, k);
44561                         return false
44562                 });
44563                 return res
44564         }
44565
44566         function pluck(obj, fn) {
44567                 if (isList(obj)) {
44568                         for (var i=0; i<obj.length; i++) {
44569                                 if (fn(obj[i], i)) {
44570                                         return obj[i]
44571                                 }
44572                         }
44573                 } else {
44574                         for (var key in obj) {
44575                                 if (obj.hasOwnProperty(key)) {
44576                                         if (fn(obj[key], key)) {
44577                                                 return obj[key]
44578                                         }
44579                                 }
44580                         }
44581                 }
44582         }
44583
44584         function isList(val) {
44585                 return (val != null && typeof val != 'function' && typeof val.length == 'number')
44586         }
44587
44588         function isFunction$2(val) {
44589                 return val && {}.toString.call(val) === '[object Function]'
44590         }
44591
44592         function isObject$2(val) {
44593                 return val && {}.toString.call(val) === '[object Object]'
44594         }
44595
44596         var slice$c = util.slice;
44597         var pluck$1 = util.pluck;
44598         var each$1 = util.each;
44599         var bind$4 = util.bind;
44600         var create$8 = util.create;
44601         var isList$1 = util.isList;
44602         var isFunction$3 = util.isFunction;
44603         var isObject$3 = util.isObject;
44604
44605         var storeEngine = {
44606                 createStore: createStore
44607         };
44608
44609         var storeAPI = {
44610                 version: '2.0.12',
44611                 enabled: false,
44612                 
44613                 // get returns the value of the given key. If that value
44614                 // is undefined, it returns optionalDefaultValue instead.
44615                 get: function(key, optionalDefaultValue) {
44616                         var data = this.storage.read(this._namespacePrefix + key);
44617                         return this._deserialize(data, optionalDefaultValue)
44618                 },
44619
44620                 // set will store the given value at key and returns value.
44621                 // Calling set with value === undefined is equivalent to calling remove.
44622                 set: function(key, value) {
44623                         if (value === undefined) {
44624                                 return this.remove(key)
44625                         }
44626                         this.storage.write(this._namespacePrefix + key, this._serialize(value));
44627                         return value
44628                 },
44629
44630                 // remove deletes the key and value stored at the given key.
44631                 remove: function(key) {
44632                         this.storage.remove(this._namespacePrefix + key);
44633                 },
44634
44635                 // each will call the given callback once for each key-value pair
44636                 // in this store.
44637                 each: function(callback) {
44638                         var self = this;
44639                         this.storage.each(function(val, namespacedKey) {
44640                                 callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
44641                         });
44642                 },
44643
44644                 // clearAll will remove all the stored key-value pairs in this store.
44645                 clearAll: function() {
44646                         this.storage.clearAll();
44647                 },
44648
44649                 // additional functionality that can't live in plugins
44650                 // ---------------------------------------------------
44651
44652                 // hasNamespace returns true if this store instance has the given namespace.
44653                 hasNamespace: function(namespace) {
44654                         return (this._namespacePrefix == '__storejs_'+namespace+'_')
44655                 },
44656
44657                 // createStore creates a store.js instance with the first
44658                 // functioning storage in the list of storage candidates,
44659                 // and applies the the given mixins to the instance.
44660                 createStore: function() {
44661                         return createStore.apply(this, arguments)
44662                 },
44663                 
44664                 addPlugin: function(plugin) {
44665                         this._addPlugin(plugin);
44666                 },
44667                 
44668                 namespace: function(namespace) {
44669                         return createStore(this.storage, this.plugins, namespace)
44670                 }
44671         };
44672
44673         function _warn() {
44674                 var _console = (typeof console == 'undefined' ? null : console);
44675                 if (!_console) { return }
44676                 var fn = (_console.warn ? _console.warn : _console.log);
44677                 fn.apply(_console, arguments);
44678         }
44679
44680         function createStore(storages, plugins, namespace) {
44681                 if (!namespace) {
44682                         namespace = '';
44683                 }
44684                 if (storages && !isList$1(storages)) {
44685                         storages = [storages];
44686                 }
44687                 if (plugins && !isList$1(plugins)) {
44688                         plugins = [plugins];
44689                 }
44690
44691                 var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
44692                 var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
44693                 var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
44694                 if (!legalNamespaces.test(namespace)) {
44695                         throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
44696                 }
44697                 
44698                 var _privateStoreProps = {
44699                         _namespacePrefix: namespacePrefix,
44700                         _namespaceRegexp: namespaceRegexp,
44701
44702                         _testStorage: function(storage) {
44703                                 try {
44704                                         var testStr = '__storejs__test__';
44705                                         storage.write(testStr, testStr);
44706                                         var ok = (storage.read(testStr) === testStr);
44707                                         storage.remove(testStr);
44708                                         return ok
44709                                 } catch(e) {
44710                                         return false
44711                                 }
44712                         },
44713
44714                         _assignPluginFnProp: function(pluginFnProp, propName) {
44715                                 var oldFn = this[propName];
44716                                 this[propName] = function pluginFn() {
44717                                         var args = slice$c(arguments, 0);
44718                                         var self = this;
44719
44720                                         // super_fn calls the old function which was overwritten by
44721                                         // this mixin.
44722                                         function super_fn() {
44723                                                 if (!oldFn) { return }
44724                                                 each$1(arguments, function(arg, i) {
44725                                                         args[i] = arg;
44726                                                 });
44727                                                 return oldFn.apply(self, args)
44728                                         }
44729
44730                                         // Give mixing function access to super_fn by prefixing all mixin function
44731                                         // arguments with super_fn.
44732                                         var newFnArgs = [super_fn].concat(args);
44733
44734                                         return pluginFnProp.apply(self, newFnArgs)
44735                                 };
44736                         },
44737
44738                         _serialize: function(obj) {
44739                                 return JSON.stringify(obj)
44740                         },
44741
44742                         _deserialize: function(strVal, defaultVal) {
44743                                 if (!strVal) { return defaultVal }
44744                                 // It is possible that a raw string value has been previously stored
44745                                 // in a storage without using store.js, meaning it will be a raw
44746                                 // string value instead of a JSON serialized string. By defaulting
44747                                 // to the raw string value in case of a JSON parse error, we allow
44748                                 // for past stored values to be forwards-compatible with store.js
44749                                 var val = '';
44750                                 try { val = JSON.parse(strVal); }
44751                                 catch(e) { val = strVal; }
44752
44753                                 return (val !== undefined ? val : defaultVal)
44754                         },
44755                         
44756                         _addStorage: function(storage) {
44757                                 if (this.enabled) { return }
44758                                 if (this._testStorage(storage)) {
44759                                         this.storage = storage;
44760                                         this.enabled = true;
44761                                 }
44762                         },
44763
44764                         _addPlugin: function(plugin) {
44765                                 var self = this;
44766
44767                                 // If the plugin is an array, then add all plugins in the array.
44768                                 // This allows for a plugin to depend on other plugins.
44769                                 if (isList$1(plugin)) {
44770                                         each$1(plugin, function(plugin) {
44771                                                 self._addPlugin(plugin);
44772                                         });
44773                                         return
44774                                 }
44775
44776                                 // Keep track of all plugins we've seen so far, so that we
44777                                 // don't add any of them twice.
44778                                 var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
44779                                         return (plugin === seenPlugin)
44780                                 });
44781                                 if (seenPlugin) {
44782                                         return
44783                                 }
44784                                 this.plugins.push(plugin);
44785
44786                                 // Check that the plugin is properly formed
44787                                 if (!isFunction$3(plugin)) {
44788                                         throw new Error('Plugins must be function values that return objects')
44789                                 }
44790
44791                                 var pluginProperties = plugin.call(this);
44792                                 if (!isObject$3(pluginProperties)) {
44793                                         throw new Error('Plugins must return an object of function properties')
44794                                 }
44795
44796                                 // Add the plugin function properties to this store instance.
44797                                 each$1(pluginProperties, function(pluginFnProp, propName) {
44798                                         if (!isFunction$3(pluginFnProp)) {
44799                                                 throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
44800                                         }
44801                                         self._assignPluginFnProp(pluginFnProp, propName);
44802                                 });
44803                         },
44804                         
44805                         // Put deprecated properties in the private API, so as to not expose it to accidential
44806                         // discovery through inspection of the store object.
44807                         
44808                         // Deprecated: addStorage
44809                         addStorage: function(storage) {
44810                                 _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
44811                                 this._addStorage(storage);
44812                         }
44813                 };
44814
44815                 var store = create$8(_privateStoreProps, storeAPI, {
44816                         plugins: []
44817                 });
44818                 store.raw = {};
44819                 each$1(store, function(prop, propName) {
44820                         if (isFunction$3(prop)) {
44821                                 store.raw[propName] = bind$4(store, prop);                      
44822                         }
44823                 });
44824                 each$1(storages, function(storage) {
44825                         store._addStorage(storage);
44826                 });
44827                 each$1(plugins, function(plugin) {
44828                         store._addPlugin(plugin);
44829                 });
44830                 return store
44831         }
44832
44833         var Global$1 = util.Global;
44834
44835         var localStorage_1 = {
44836                 name: 'localStorage',
44837                 read: read,
44838                 write: write,
44839                 each: each$2,
44840                 remove: remove$2,
44841                 clearAll: clearAll,
44842         };
44843
44844         function localStorage$1() {
44845                 return Global$1.localStorage
44846         }
44847
44848         function read(key) {
44849                 return localStorage$1().getItem(key)
44850         }
44851
44852         function write(key, data) {
44853                 return localStorage$1().setItem(key, data)
44854         }
44855
44856         function each$2(fn) {
44857                 for (var i = localStorage$1().length - 1; i >= 0; i--) {
44858                         var key = localStorage$1().key(i);
44859                         fn(read(key), key);
44860                 }
44861         }
44862
44863         function remove$2(key) {
44864                 return localStorage$1().removeItem(key)
44865         }
44866
44867         function clearAll() {
44868                 return localStorage$1().clear()
44869         }
44870
44871         // oldFF-globalStorage provides storage for Firefox
44872         // versions 6 and 7, where no localStorage, etc
44873         // is available.
44874
44875
44876         var Global$2 = util.Global;
44877
44878         var oldFFGlobalStorage = {
44879                 name: 'oldFF-globalStorage',
44880                 read: read$1,
44881                 write: write$1,
44882                 each: each$3,
44883                 remove: remove$3,
44884                 clearAll: clearAll$1,
44885         };
44886
44887         var globalStorage = Global$2.globalStorage;
44888
44889         function read$1(key) {
44890                 return globalStorage[key]
44891         }
44892
44893         function write$1(key, data) {
44894                 globalStorage[key] = data;
44895         }
44896
44897         function each$3(fn) {
44898                 for (var i = globalStorage.length - 1; i >= 0; i--) {
44899                         var key = globalStorage.key(i);
44900                         fn(globalStorage[key], key);
44901                 }
44902         }
44903
44904         function remove$3(key) {
44905                 return globalStorage.removeItem(key)
44906         }
44907
44908         function clearAll$1() {
44909                 each$3(function(key, _) {
44910                         delete globalStorage[key];
44911                 });
44912         }
44913
44914         // oldIE-userDataStorage provides storage for Internet Explorer
44915         // versions 6 and 7, where no localStorage, sessionStorage, etc
44916         // is available.
44917
44918
44919         var Global$3 = util.Global;
44920
44921         var oldIEUserDataStorage = {
44922                 name: 'oldIE-userDataStorage',
44923                 write: write$2,
44924                 read: read$2,
44925                 each: each$4,
44926                 remove: remove$4,
44927                 clearAll: clearAll$2,
44928         };
44929
44930         var storageName = 'storejs';
44931         var doc = Global$3.document;
44932         var _withStorageEl = _makeIEStorageElFunction();
44933         var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
44934
44935         function write$2(unfixedKey, data) {
44936                 if (disable) { return }
44937                 var fixedKey = fixKey(unfixedKey);
44938                 _withStorageEl(function(storageEl) {
44939                         storageEl.setAttribute(fixedKey, data);
44940                         storageEl.save(storageName);
44941                 });
44942         }
44943
44944         function read$2(unfixedKey) {
44945                 if (disable) { return }
44946                 var fixedKey = fixKey(unfixedKey);
44947                 var res = null;
44948                 _withStorageEl(function(storageEl) {
44949                         res = storageEl.getAttribute(fixedKey);
44950                 });
44951                 return res
44952         }
44953
44954         function each$4(callback) {
44955                 _withStorageEl(function(storageEl) {
44956                         var attributes = storageEl.XMLDocument.documentElement.attributes;
44957                         for (var i=attributes.length-1; i>=0; i--) {
44958                                 var attr = attributes[i];
44959                                 callback(storageEl.getAttribute(attr.name), attr.name);
44960                         }
44961                 });
44962         }
44963
44964         function remove$4(unfixedKey) {
44965                 var fixedKey = fixKey(unfixedKey);
44966                 _withStorageEl(function(storageEl) {
44967                         storageEl.removeAttribute(fixedKey);
44968                         storageEl.save(storageName);
44969                 });
44970         }
44971
44972         function clearAll$2() {
44973                 _withStorageEl(function(storageEl) {
44974                         var attributes = storageEl.XMLDocument.documentElement.attributes;
44975                         storageEl.load(storageName);
44976                         for (var i=attributes.length-1; i>=0; i--) {
44977                                 storageEl.removeAttribute(attributes[i].name);
44978                         }
44979                         storageEl.save(storageName);
44980                 });
44981         }
44982
44983         // Helpers
44984         //////////
44985
44986         // In IE7, keys cannot start with a digit or contain certain chars.
44987         // See https://github.com/marcuswestin/store.js/issues/40
44988         // See https://github.com/marcuswestin/store.js/issues/83
44989         var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
44990         function fixKey(key) {
44991                 return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
44992         }
44993
44994         function _makeIEStorageElFunction() {
44995                 if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
44996                         return null
44997                 }
44998                 var scriptTag = 'script',
44999                         storageOwner,
45000                         storageContainer,
45001                         storageEl;
45002
45003                 // Since #userData storage applies only to specific paths, we need to
45004                 // somehow link our data to a specific path.  We choose /favicon.ico
45005                 // as a pretty safe option, since all browsers already make a request to
45006                 // this URL anyway and being a 404 will not hurt us here.  We wrap an
45007                 // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
45008                 // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
45009                 // since the iframe access rules appear to allow direct access and
45010                 // manipulation of the document element, even for a 404 page.  This
45011                 // document can be used instead of the current document (which would
45012                 // have been limited to the current path) to perform #userData storage.
45013                 try {
45014                         /* global ActiveXObject */
45015                         storageContainer = new ActiveXObject('htmlfile');
45016                         storageContainer.open();
45017                         storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
45018                         storageContainer.close();
45019                         storageOwner = storageContainer.w.frames[0].document;
45020                         storageEl = storageOwner.createElement('div');
45021                 } catch(e) {
45022                         // somehow ActiveXObject instantiation failed (perhaps some special
45023                         // security settings or otherwse), fall back to per-path storage
45024                         storageEl = doc.createElement('div');
45025                         storageOwner = doc.body;
45026                 }
45027
45028                 return function(storeFunction) {
45029                         var args = [].slice.call(arguments, 0);
45030                         args.unshift(storageEl);
45031                         // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
45032                         // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
45033                         storageOwner.appendChild(storageEl);
45034                         storageEl.addBehavior('#default#userData');
45035                         storageEl.load(storageName);
45036                         storeFunction.apply(this, args);
45037                         storageOwner.removeChild(storageEl);
45038                         return
45039                 }
45040         }
45041
45042         // cookieStorage is useful Safari private browser mode, where localStorage
45043         // doesn't work but cookies do. This implementation is adopted from
45044         // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
45045
45046
45047         var Global$4 = util.Global;
45048         var trim$2 = util.trim;
45049
45050         var cookieStorage = {
45051                 name: 'cookieStorage',
45052                 read: read$3,
45053                 write: write$3,
45054                 each: each$5,
45055                 remove: remove$5,
45056                 clearAll: clearAll$3,
45057         };
45058
45059         var doc$1 = Global$4.document;
45060
45061         function read$3(key) {
45062                 if (!key || !_has(key)) { return null }
45063                 var regexpStr = "(?:^|.*;\\s*)" +
45064                         escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
45065                         "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
45066                 return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
45067         }
45068
45069         function each$5(callback) {
45070                 var cookies = doc$1.cookie.split(/; ?/g);
45071                 for (var i = cookies.length - 1; i >= 0; i--) {
45072                         if (!trim$2(cookies[i])) {
45073                                 continue
45074                         }
45075                         var kvp = cookies[i].split('=');
45076                         var key = unescape(kvp[0]);
45077                         var val = unescape(kvp[1]);
45078                         callback(val, key);
45079                 }
45080         }
45081
45082         function write$3(key, data) {
45083                 if(!key) { return }
45084                 doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
45085         }
45086
45087         function remove$5(key) {
45088                 if (!key || !_has(key)) {
45089                         return
45090                 }
45091                 doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
45092         }
45093
45094         function clearAll$3() {
45095                 each$5(function(_, key) {
45096                         remove$5(key);
45097                 });
45098         }
45099
45100         function _has(key) {
45101                 return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
45102         }
45103
45104         var Global$5 = util.Global;
45105
45106         var sessionStorage_1 = {
45107                 name: 'sessionStorage',
45108                 read: read$4,
45109                 write: write$4,
45110                 each: each$6,
45111                 remove: remove$6,
45112                 clearAll: clearAll$4
45113         };
45114
45115         function sessionStorage() {
45116                 return Global$5.sessionStorage
45117         }
45118
45119         function read$4(key) {
45120                 return sessionStorage().getItem(key)
45121         }
45122
45123         function write$4(key, data) {
45124                 return sessionStorage().setItem(key, data)
45125         }
45126
45127         function each$6(fn) {
45128                 for (var i = sessionStorage().length - 1; i >= 0; i--) {
45129                         var key = sessionStorage().key(i);
45130                         fn(read$4(key), key);
45131                 }
45132         }
45133
45134         function remove$6(key) {
45135                 return sessionStorage().removeItem(key)
45136         }
45137
45138         function clearAll$4() {
45139                 return sessionStorage().clear()
45140         }
45141
45142         // memoryStorage is a useful last fallback to ensure that the store
45143         // is functions (meaning store.get(), store.set(), etc will all function).
45144         // However, stored values will not persist when the browser navigates to
45145         // a new page or reloads the current page.
45146
45147         var memoryStorage_1 = {
45148                 name: 'memoryStorage',
45149                 read: read$5,
45150                 write: write$5,
45151                 each: each$7,
45152                 remove: remove$7,
45153                 clearAll: clearAll$5,
45154         };
45155
45156         var memoryStorage = {};
45157
45158         function read$5(key) {
45159                 return memoryStorage[key]
45160         }
45161
45162         function write$5(key, data) {
45163                 memoryStorage[key] = data;
45164         }
45165
45166         function each$7(callback) {
45167                 for (var key in memoryStorage) {
45168                         if (memoryStorage.hasOwnProperty(key)) {
45169                                 callback(memoryStorage[key], key);
45170                         }
45171                 }
45172         }
45173
45174         function remove$7(key) {
45175                 delete memoryStorage[key];
45176         }
45177
45178         function clearAll$5(key) {
45179                 memoryStorage = {};
45180         }
45181
45182         var all = [
45183                 // Listed in order of usage preference
45184                 localStorage_1,
45185                 oldFFGlobalStorage,
45186                 oldIEUserDataStorage,
45187                 cookieStorage,
45188                 sessionStorage_1,
45189                 memoryStorage_1
45190         ];
45191
45192         /* eslint-disable */
45193
45194         //  json2.js
45195         //  2016-10-28
45196         //  Public Domain.
45197         //  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
45198         //  See http://www.JSON.org/js.html
45199         //  This code should be minified before deployment.
45200         //  See http://javascript.crockford.com/jsmin.html
45201
45202         //  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
45203         //  NOT CONTROL.
45204
45205         //  This file creates a global JSON object containing two methods: stringify
45206         //  and parse. This file provides the ES5 JSON capability to ES3 systems.
45207         //  If a project might run on IE8 or earlier, then this file should be included.
45208         //  This file does nothing on ES5 systems.
45209
45210         //      JSON.stringify(value, replacer, space)
45211         //          value       any JavaScript value, usually an object or array.
45212         //          replacer    an optional parameter that determines how object
45213         //                      values are stringified for objects. It can be a
45214         //                      function or an array of strings.
45215         //          space       an optional parameter that specifies the indentation
45216         //                      of nested structures. If it is omitted, the text will
45217         //                      be packed without extra whitespace. If it is a number,
45218         //                      it will specify the number of spaces to indent at each
45219         //                      level. If it is a string (such as "\t" or "&nbsp;"),
45220         //                      it contains the characters used to indent at each level.
45221         //          This method produces a JSON text from a JavaScript value.
45222         //          When an object value is found, if the object contains a toJSON
45223         //          method, its toJSON method will be called and the result will be
45224         //          stringified. A toJSON method does not serialize: it returns the
45225         //          value represented by the name/value pair that should be serialized,
45226         //          or undefined if nothing should be serialized. The toJSON method
45227         //          will be passed the key associated with the value, and this will be
45228         //          bound to the value.
45229
45230         //          For example, this would serialize Dates as ISO strings.
45231
45232         //              Date.prototype.toJSON = function (key) {
45233         //                  function f(n) {
45234         //                      // Format integers to have at least two digits.
45235         //                      return (n < 10)
45236         //                          ? "0" + n
45237         //                          : n;
45238         //                  }
45239         //                  return this.getUTCFullYear()   + "-" +
45240         //                       f(this.getUTCMonth() + 1) + "-" +
45241         //                       f(this.getUTCDate())      + "T" +
45242         //                       f(this.getUTCHours())     + ":" +
45243         //                       f(this.getUTCMinutes())   + ":" +
45244         //                       f(this.getUTCSeconds())   + "Z";
45245         //              };
45246
45247         //          You can provide an optional replacer method. It will be passed the
45248         //          key and value of each member, with this bound to the containing
45249         //          object. The value that is returned from your method will be
45250         //          serialized. If your method returns undefined, then the member will
45251         //          be excluded from the serialization.
45252
45253         //          If the replacer parameter is an array of strings, then it will be
45254         //          used to select the members to be serialized. It filters the results
45255         //          such that only members with keys listed in the replacer array are
45256         //          stringified.
45257
45258         //          Values that do not have JSON representations, such as undefined or
45259         //          functions, will not be serialized. Such values in objects will be
45260         //          dropped; in arrays they will be replaced with null. You can use
45261         //          a replacer function to replace those with JSON values.
45262
45263         //          JSON.stringify(undefined) returns undefined.
45264
45265         //          The optional space parameter produces a stringification of the
45266         //          value that is filled with line breaks and indentation to make it
45267         //          easier to read.
45268
45269         //          If the space parameter is a non-empty string, then that string will
45270         //          be used for indentation. If the space parameter is a number, then
45271         //          the indentation will be that many spaces.
45272
45273         //          Example:
45274
45275         //          text = JSON.stringify(["e", {pluribus: "unum"}]);
45276         //          // text is '["e",{"pluribus":"unum"}]'
45277
45278         //          text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
45279         //          // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
45280
45281         //          text = JSON.stringify([new Date()], function (key, value) {
45282         //              return this[key] instanceof Date
45283         //                  ? "Date(" + this[key] + ")"
45284         //                  : value;
45285         //          });
45286         //          // text is '["Date(---current time---)"]'
45287
45288         //      JSON.parse(text, reviver)
45289         //          This method parses a JSON text to produce an object or array.
45290         //          It can throw a SyntaxError exception.
45291
45292         //          The optional reviver parameter is a function that can filter and
45293         //          transform the results. It receives each of the keys and values,
45294         //          and its return value is used instead of the original value.
45295         //          If it returns what it received, then the structure is not modified.
45296         //          If it returns undefined then the member is deleted.
45297
45298         //          Example:
45299
45300         //          // Parse the text. Values that look like ISO date strings will
45301         //          // be converted to Date objects.
45302
45303         //          myData = JSON.parse(text, function (key, value) {
45304         //              var a;
45305         //              if (typeof value === "string") {
45306         //                  a =
45307         //   /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
45308         //                  if (a) {
45309         //                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
45310         //                          +a[5], +a[6]));
45311         //                  }
45312         //              }
45313         //              return value;
45314         //          });
45315
45316         //          myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
45317         //              var d;
45318         //              if (typeof value === "string" &&
45319         //                      value.slice(0, 5) === "Date(" &&
45320         //                      value.slice(-1) === ")") {
45321         //                  d = new Date(value.slice(5, -1));
45322         //                  if (d) {
45323         //                      return d;
45324         //                  }
45325         //              }
45326         //              return value;
45327         //          });
45328
45329         //  This is a reference implementation. You are free to copy, modify, or
45330         //  redistribute.
45331
45332         /*jslint
45333             eval, for, this
45334         */
45335
45336         /*property
45337             JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
45338             getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
45339             lastIndex, length, parse, prototype, push, replace, slice, stringify,
45340             test, toJSON, toString, valueOf
45341         */
45342
45343
45344         // Create a JSON object only if one does not already exist. We create the
45345         // methods in a closure to avoid creating global variables.
45346
45347         if (typeof JSON !== "object") {
45348             JSON = {};
45349         }
45350
45351         (function () {
45352
45353             var rx_one = /^[\],:{}\s]*$/;
45354             var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
45355             var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
45356             var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
45357             var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
45358             var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
45359
45360             function f(n) {
45361                 // Format integers to have at least two digits.
45362                 return n < 10
45363                     ? "0" + n
45364                     : n;
45365             }
45366
45367             function this_value() {
45368                 return this.valueOf();
45369             }
45370
45371             if (typeof Date.prototype.toJSON !== "function") {
45372
45373                 Date.prototype.toJSON = function () {
45374
45375                     return isFinite(this.valueOf())
45376                         ? this.getUTCFullYear() + "-" +
45377                                 f(this.getUTCMonth() + 1) + "-" +
45378                                 f(this.getUTCDate()) + "T" +
45379                                 f(this.getUTCHours()) + ":" +
45380                                 f(this.getUTCMinutes()) + ":" +
45381                                 f(this.getUTCSeconds()) + "Z"
45382                         : null;
45383                 };
45384
45385                 Boolean.prototype.toJSON = this_value;
45386                 Number.prototype.toJSON = this_value;
45387                 String.prototype.toJSON = this_value;
45388             }
45389
45390             var gap;
45391             var indent;
45392             var meta;
45393             var rep;
45394
45395
45396             function quote(string) {
45397
45398         // If the string contains no control characters, no quote characters, and no
45399         // backslash characters, then we can safely slap some quotes around it.
45400         // Otherwise we must also replace the offending characters with safe escape
45401         // sequences.
45402
45403                 rx_escapable.lastIndex = 0;
45404                 return rx_escapable.test(string)
45405                     ? "\"" + string.replace(rx_escapable, function (a) {
45406                         var c = meta[a];
45407                         return typeof c === "string"
45408                             ? c
45409                             : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
45410                     }) + "\""
45411                     : "\"" + string + "\"";
45412             }
45413
45414
45415             function str(key, holder) {
45416
45417         // Produce a string from holder[key].
45418
45419                 var i;          // The loop counter.
45420                 var k;          // The member key.
45421                 var v;          // The member value.
45422                 var length;
45423                 var mind = gap;
45424                 var partial;
45425                 var value = holder[key];
45426
45427         // If the value has a toJSON method, call it to obtain a replacement value.
45428
45429                 if (value && typeof value === "object" &&
45430                         typeof value.toJSON === "function") {
45431                     value = value.toJSON(key);
45432                 }
45433
45434         // If we were called with a replacer function, then call the replacer to
45435         // obtain a replacement value.
45436
45437                 if (typeof rep === "function") {
45438                     value = rep.call(holder, key, value);
45439                 }
45440
45441         // What happens next depends on the value's type.
45442
45443                 switch (typeof value) {
45444                 case "string":
45445                     return quote(value);
45446
45447                 case "number":
45448
45449         // JSON numbers must be finite. Encode non-finite numbers as null.
45450
45451                     return isFinite(value)
45452                         ? String(value)
45453                         : "null";
45454
45455                 case "boolean":
45456                 case "null":
45457
45458         // If the value is a boolean or null, convert it to a string. Note:
45459         // typeof null does not produce "null". The case is included here in
45460         // the remote chance that this gets fixed someday.
45461
45462                     return String(value);
45463
45464         // If the type is "object", we might be dealing with an object or an array or
45465         // null.
45466
45467                 case "object":
45468
45469         // Due to a specification blunder in ECMAScript, typeof null is "object",
45470         // so watch out for that case.
45471
45472                     if (!value) {
45473                         return "null";
45474                     }
45475
45476         // Make an array to hold the partial results of stringifying this object value.
45477
45478                     gap += indent;
45479                     partial = [];
45480
45481         // Is the value an array?
45482
45483                     if (Object.prototype.toString.apply(value) === "[object Array]") {
45484
45485         // The value is an array. Stringify every element. Use null as a placeholder
45486         // for non-JSON values.
45487
45488                         length = value.length;
45489                         for (i = 0; i < length; i += 1) {
45490                             partial[i] = str(i, value) || "null";
45491                         }
45492
45493         // Join all of the elements together, separated with commas, and wrap them in
45494         // brackets.
45495
45496                         v = partial.length === 0
45497                             ? "[]"
45498                             : gap
45499                                 ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
45500                                 : "[" + partial.join(",") + "]";
45501                         gap = mind;
45502                         return v;
45503                     }
45504
45505         // If the replacer is an array, use it to select the members to be stringified.
45506
45507                     if (rep && typeof rep === "object") {
45508                         length = rep.length;
45509                         for (i = 0; i < length; i += 1) {
45510                             if (typeof rep[i] === "string") {
45511                                 k = rep[i];
45512                                 v = str(k, value);
45513                                 if (v) {
45514                                     partial.push(quote(k) + (
45515                                         gap
45516                                             ? ": "
45517                                             : ":"
45518                                     ) + v);
45519                                 }
45520                             }
45521                         }
45522                     } else {
45523
45524         // Otherwise, iterate through all of the keys in the object.
45525
45526                         for (k in value) {
45527                             if (Object.prototype.hasOwnProperty.call(value, k)) {
45528                                 v = str(k, value);
45529                                 if (v) {
45530                                     partial.push(quote(k) + (
45531                                         gap
45532                                             ? ": "
45533                                             : ":"
45534                                     ) + v);
45535                                 }
45536                             }
45537                         }
45538                     }
45539
45540         // Join all of the member texts together, separated with commas,
45541         // and wrap them in braces.
45542
45543                     v = partial.length === 0
45544                         ? "{}"
45545                         : gap
45546                             ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
45547                             : "{" + partial.join(",") + "}";
45548                     gap = mind;
45549                     return v;
45550                 }
45551             }
45552
45553         // If the JSON object does not yet have a stringify method, give it one.
45554
45555             if (typeof JSON.stringify !== "function") {
45556                 meta = {    // table of character substitutions
45557                     "\b": "\\b",
45558                     "\t": "\\t",
45559                     "\n": "\\n",
45560                     "\f": "\\f",
45561                     "\r": "\\r",
45562                     "\"": "\\\"",
45563                     "\\": "\\\\"
45564                 };
45565                 JSON.stringify = function (value, replacer, space) {
45566
45567         // The stringify method takes a value and an optional replacer, and an optional
45568         // space parameter, and returns a JSON text. The replacer can be a function
45569         // that can replace values, or an array of strings that will select the keys.
45570         // A default replacer method can be provided. Use of the space parameter can
45571         // produce text that is more easily readable.
45572
45573                     var i;
45574                     gap = "";
45575                     indent = "";
45576
45577         // If the space parameter is a number, make an indent string containing that
45578         // many spaces.
45579
45580                     if (typeof space === "number") {
45581                         for (i = 0; i < space; i += 1) {
45582                             indent += " ";
45583                         }
45584
45585         // If the space parameter is a string, it will be used as the indent string.
45586
45587                     } else if (typeof space === "string") {
45588                         indent = space;
45589                     }
45590
45591         // If there is a replacer, it must be a function or an array.
45592         // Otherwise, throw an error.
45593
45594                     rep = replacer;
45595                     if (replacer && typeof replacer !== "function" &&
45596                             (typeof replacer !== "object" ||
45597                             typeof replacer.length !== "number")) {
45598                         throw new Error("JSON.stringify");
45599                     }
45600
45601         // Make a fake root object containing our value under the key of "".
45602         // Return the result of stringifying the value.
45603
45604                     return str("", {"": value});
45605                 };
45606             }
45607
45608
45609         // If the JSON object does not yet have a parse method, give it one.
45610
45611             if (typeof JSON.parse !== "function") {
45612                 JSON.parse = function (text, reviver) {
45613
45614         // The parse method takes a text and an optional reviver function, and returns
45615         // a JavaScript value if the text is a valid JSON text.
45616
45617                     var j;
45618
45619                     function walk(holder, key) {
45620
45621         // The walk method is used to recursively walk the resulting structure so
45622         // that modifications can be made.
45623
45624                         var k;
45625                         var v;
45626                         var value = holder[key];
45627                         if (value && typeof value === "object") {
45628                             for (k in value) {
45629                                 if (Object.prototype.hasOwnProperty.call(value, k)) {
45630                                     v = walk(value, k);
45631                                     if (v !== undefined) {
45632                                         value[k] = v;
45633                                     } else {
45634                                         delete value[k];
45635                                     }
45636                                 }
45637                             }
45638                         }
45639                         return reviver.call(holder, key, value);
45640                     }
45641
45642
45643         // Parsing happens in four stages. In the first stage, we replace certain
45644         // Unicode characters with escape sequences. JavaScript handles many characters
45645         // incorrectly, either silently deleting them, or treating them as line endings.
45646
45647                     text = String(text);
45648                     rx_dangerous.lastIndex = 0;
45649                     if (rx_dangerous.test(text)) {
45650                         text = text.replace(rx_dangerous, function (a) {
45651                             return "\\u" +
45652                                     ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
45653                         });
45654                     }
45655
45656         // In the second stage, we run the text against regular expressions that look
45657         // for non-JSON patterns. We are especially concerned with "()" and "new"
45658         // because they can cause invocation, and "=" because it can cause mutation.
45659         // But just to be safe, we want to reject all unexpected forms.
45660
45661         // We split the second stage into 4 regexp operations in order to work around
45662         // crippling inefficiencies in IE's and Safari's regexp engines. First we
45663         // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
45664         // replace all simple value tokens with "]" characters. Third, we delete all
45665         // open brackets that follow a colon or comma or that begin the text. Finally,
45666         // we look to see that the remaining characters are only whitespace or "]" or
45667         // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
45668
45669                     if (
45670                         rx_one.test(
45671                             text
45672                                 .replace(rx_two, "@")
45673                                 .replace(rx_three, "]")
45674                                 .replace(rx_four, "")
45675                         )
45676                     ) {
45677
45678         // In the third stage we use the eval function to compile the text into a
45679         // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
45680         // in JavaScript: it can begin a block or an object literal. We wrap the text
45681         // in parens to eliminate the ambiguity.
45682
45683                         j = eval("(" + text + ")");
45684
45685         // In the optional fourth stage, we recursively walk the new structure, passing
45686         // each name/value pair to a reviver function for possible transformation.
45687
45688                         return (typeof reviver === "function")
45689                             ? walk({"": j}, "")
45690                             : j;
45691                     }
45692
45693         // If the text is not JSON parseable, then a SyntaxError is thrown.
45694
45695                     throw new SyntaxError("JSON.parse");
45696                 };
45697             }
45698         }());
45699
45700         var json2 = json2Plugin;
45701
45702         function json2Plugin() {
45703                 
45704                 return {}
45705         }
45706
45707         var plugins = [json2];
45708
45709         var store_legacy = storeEngine.createStore(all, plugins);
45710
45711         // # osm-auth
45712         //
45713         // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
45714         // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
45715         // does not support custom headers, which this uses everywhere.
45716         var osmAuth = function(o) {
45717
45718             var oauth = {};
45719
45720             // authenticated users will also have a request token secret, but it's
45721             // not used in transactions with the server
45722             oauth.authenticated = function() {
45723                 return !!(token('oauth_token') && token('oauth_token_secret'));
45724             };
45725
45726             oauth.logout = function() {
45727                 token('oauth_token', '');
45728                 token('oauth_token_secret', '');
45729                 token('oauth_request_token_secret', '');
45730                 return oauth;
45731             };
45732
45733             // TODO: detect lack of click event
45734             oauth.authenticate = function(callback) {
45735                 if (oauth.authenticated()) return callback();
45736
45737                 oauth.logout();
45738
45739                 // ## Getting a request token
45740                 var params = timenonce(getAuth(o)),
45741                     url = o.url + '/oauth/request_token';
45742
45743                 params.oauth_signature = ohauth_1.signature(
45744                     o.oauth_secret, '',
45745                     ohauth_1.baseString('POST', url, params));
45746
45747                 if (!o.singlepage) {
45748                     // Create a 600x550 popup window in the center of the screen
45749                     var w = 600, h = 550,
45750                         settings = [
45751                             ['width', w], ['height', h],
45752                             ['left', screen.width / 2 - w / 2],
45753                             ['top', screen.height / 2 - h / 2]].map(function(x) {
45754                                 return x.join('=');
45755                             }).join(','),
45756                         popup = window.open('about:blank', 'oauth_window', settings);
45757                 }
45758
45759                 // Request a request token. When this is complete, the popup
45760                 // window is redirected to OSM's authorization page.
45761                 ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
45762                 o.loading();
45763
45764                 function reqTokenDone(err, xhr) {
45765                     o.done();
45766                     if (err) return callback(err);
45767                     var resp = ohauth_1.stringQs(xhr.response);
45768                     token('oauth_request_token_secret', resp.oauth_token_secret);
45769                     var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
45770                         oauth_token: resp.oauth_token,
45771                         oauth_callback: resolveUrl(o.landing)
45772                     });
45773
45774                     if (o.singlepage) {
45775                         location.href = authorize_url;
45776                     } else {
45777                         popup.location = authorize_url;
45778                     }
45779                 }
45780
45781                 // Called by a function in a landing page, in the popup window. The
45782                 // window closes itself.
45783                 window.authComplete = function(token) {
45784                     var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
45785                     get_access_token(oauth_token.oauth_token);
45786                     delete window.authComplete;
45787                 };
45788
45789                 // ## Getting an request token
45790                 //
45791                 // At this point we have an `oauth_token`, brought in from a function
45792                 // call on a landing page popup.
45793                 function get_access_token(oauth_token) {
45794                     var url = o.url + '/oauth/access_token',
45795                         params = timenonce(getAuth(o)),
45796                         request_token_secret = token('oauth_request_token_secret');
45797                     params.oauth_token = oauth_token;
45798                     params.oauth_signature = ohauth_1.signature(
45799                         o.oauth_secret,
45800                         request_token_secret,
45801                         ohauth_1.baseString('POST', url, params));
45802
45803                     // ## Getting an access token
45804                     //
45805                     // The final token required for authentication. At this point
45806                     // we have a `request token secret`
45807                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
45808                     o.loading();
45809                 }
45810
45811                 function accessTokenDone(err, xhr) {
45812                     o.done();
45813                     if (err) return callback(err);
45814                     var access_token = ohauth_1.stringQs(xhr.response);
45815                     token('oauth_token', access_token.oauth_token);
45816                     token('oauth_token_secret', access_token.oauth_token_secret);
45817                     callback(null, oauth);
45818                 }
45819             };
45820
45821             oauth.bootstrapToken = function(oauth_token, callback) {
45822                 // ## Getting an request token
45823                 // At this point we have an `oauth_token`, brought in from a function
45824                 // call on a landing page popup.
45825                 function get_access_token(oauth_token) {
45826                     var url = o.url + '/oauth/access_token',
45827                         params = timenonce(getAuth(o)),
45828                         request_token_secret = token('oauth_request_token_secret');
45829                     params.oauth_token = oauth_token;
45830                     params.oauth_signature = ohauth_1.signature(
45831                         o.oauth_secret,
45832                         request_token_secret,
45833                         ohauth_1.baseString('POST', url, params));
45834
45835                     // ## Getting an access token
45836                     // The final token required for authentication. At this point
45837                     // we have a `request token secret`
45838                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
45839                     o.loading();
45840                 }
45841
45842                 function accessTokenDone(err, xhr) {
45843                     o.done();
45844                     if (err) return callback(err);
45845                     var access_token = ohauth_1.stringQs(xhr.response);
45846                     token('oauth_token', access_token.oauth_token);
45847                     token('oauth_token_secret', access_token.oauth_token_secret);
45848                     callback(null, oauth);
45849                 }
45850
45851                 get_access_token(oauth_token);
45852             };
45853
45854             // # xhr
45855             //
45856             // A single XMLHttpRequest wrapper that does authenticated calls if the
45857             // user has logged in.
45858             oauth.xhr = function(options, callback) {
45859                 if (!oauth.authenticated()) {
45860                     if (o.auto) {
45861                         return oauth.authenticate(run);
45862                     } else {
45863                         callback('not authenticated', null);
45864                         return;
45865                     }
45866                 } else {
45867                     return run();
45868                 }
45869
45870                 function run() {
45871                     var params = timenonce(getAuth(o)),
45872                         oauth_token_secret = token('oauth_token_secret'),
45873                         url = (options.prefix !== false) ? o.url + options.path : options.path,
45874                         url_parts = url.replace(/#.*$/, '').split('?', 2),
45875                         base_url = url_parts[0],
45876                         query = (url_parts.length === 2) ? url_parts[1] : '';
45877
45878                     // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
45879                     if ((!options.options || !options.options.header ||
45880                         options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
45881                         options.content) {
45882                         params = immutable(params, ohauth_1.stringQs(options.content));
45883                     }
45884
45885                     params.oauth_token = token('oauth_token');
45886                     params.oauth_signature = ohauth_1.signature(
45887                         o.oauth_secret,
45888                         oauth_token_secret,
45889                         ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
45890                     );
45891
45892                     return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
45893                 }
45894
45895                 function done(err, xhr) {
45896                     if (err) return callback(err);
45897                     else if (xhr.responseXML) return callback(err, xhr.responseXML);
45898                     else return callback(err, xhr.response);
45899                 }
45900             };
45901
45902             // pre-authorize this object, if we can just get a token and token_secret
45903             // from the start
45904             oauth.preauth = function(c) {
45905                 if (!c) return;
45906                 if (c.oauth_token) token('oauth_token', c.oauth_token);
45907                 if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret);
45908                 return oauth;
45909             };
45910
45911             oauth.options = function(_) {
45912                 if (!arguments.length) return o;
45913
45914                 o = _;
45915                 o.url = o.url || 'https://www.openstreetmap.org';
45916                 o.landing = o.landing || 'land.html';
45917                 o.singlepage = o.singlepage || false;
45918
45919                 // Optional loading and loading-done functions for nice UI feedback.
45920                 // by default, no-ops
45921                 o.loading = o.loading || function() {};
45922                 o.done = o.done || function() {};
45923
45924                 return oauth.preauth(o);
45925             };
45926
45927             // 'stamp' an authentication object from `getAuth()`
45928             // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
45929             // and timestamp
45930             function timenonce(o) {
45931                 o.oauth_timestamp = ohauth_1.timestamp();
45932                 o.oauth_nonce = ohauth_1.nonce();
45933                 return o;
45934             }
45935
45936             // get/set tokens. These are prefixed with the base URL so that `osm-auth`
45937             // can be used with multiple APIs and the keys in `localStorage`
45938             // will not clash
45939             var token;
45940
45941             if (store_legacy.enabled) {
45942                 token = function (x, y) {
45943                     if (arguments.length === 1) return store_legacy.get(o.url + x);
45944                     else if (arguments.length === 2) return store_legacy.set(o.url + x, y);
45945                 };
45946             } else {
45947                 var storage = {};
45948                 token = function (x, y) {
45949                     if (arguments.length === 1) return storage[o.url + x];
45950                     else if (arguments.length === 2) return storage[o.url + x] = y;
45951                 };
45952             }
45953
45954             // Get an authentication object. If you just add and remove properties
45955             // from a single object, you'll need to use `delete` to make sure that
45956             // it doesn't contain undesired properties for authentication
45957             function getAuth(o) {
45958                 return {
45959                     oauth_consumer_key: o.oauth_consumer_key,
45960                     oauth_signature_method: 'HMAC-SHA1'
45961                 };
45962             }
45963
45964             // potentially pre-authorize
45965             oauth.options(o);
45966
45967             return oauth;
45968         };
45969
45970         var JXON = new (function () {
45971           var
45972             sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
45973             aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
45974
45975           function parseText (sValue) {
45976             if (rIsNull.test(sValue)) { return null; }
45977             if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
45978             if (isFinite(sValue)) { return parseFloat(sValue); }
45979             if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
45980             return sValue;
45981           }
45982
45983           function EmptyTree () { }
45984           EmptyTree.prototype.toString = function () { return 'null'; };
45985           EmptyTree.prototype.valueOf = function () { return null; };
45986
45987           function objectify (vValue) {
45988             return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
45989           }
45990
45991           function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
45992             var
45993               nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
45994               bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
45995
45996             var
45997               sProp, vContent, nLength = 0, sCollectedTxt = '',
45998               vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
45999
46000             if (bChildren) {
46001               for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
46002                 oNode = oParentNode.childNodes.item(nItem);
46003                 if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
46004                 else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
46005                 else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
46006               }
46007             }
46008
46009             var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
46010
46011             if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
46012
46013             for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
46014               sProp = aCache[nElId].nodeName.toLowerCase();
46015               vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
46016               if (vResult.hasOwnProperty(sProp)) {
46017                 if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
46018                 vResult[sProp].push(vContent);
46019               } else {
46020                 vResult[sProp] = vContent;
46021                 nLength++;
46022               }
46023             }
46024
46025             if (bAttributes) {
46026               var
46027                 nAttrLen = oParentNode.attributes.length,
46028                 sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
46029
46030               for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
46031                 oAttrib = oParentNode.attributes.item(nAttrib);
46032                 oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
46033               }
46034
46035               if (bNesteAttr) {
46036                 if (bFreeze) { Object.freeze(oAttrParent); }
46037                 vResult[sAttributesProp] = oAttrParent;
46038                 nLength -= nAttrLen - 1;
46039               }
46040             }
46041
46042             if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
46043               vResult[sValueProp] = vBuiltVal;
46044             } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
46045               vResult = vBuiltVal;
46046             }
46047
46048             if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
46049
46050             aCache.length = nLevelStart;
46051
46052             return vResult;
46053           }
46054
46055           function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
46056             var vValue, oChild;
46057
46058             if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
46059               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
46060             } else if (oParentObj.constructor === Date) {
46061               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));    
46062             }
46063
46064             for (var sName in oParentObj) {
46065               vValue = oParentObj[sName];
46066               if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
46067               if (sName === sValueProp) {
46068                 if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
46069               } else if (sName === sAttributesProp) { /* verbosity level is 3 */
46070                 for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
46071               } else if (sName.charAt(0) === sAttrPref) {
46072                 oParentEl.setAttribute(sName.slice(1), vValue);
46073               } else if (vValue.constructor === Array) {
46074                 for (var nItem = 0; nItem < vValue.length; nItem++) {
46075                   oChild = oXMLDoc.createElement(sName);
46076                   loadObjTree(oXMLDoc, oChild, vValue[nItem]);
46077                   oParentEl.appendChild(oChild);
46078                 }
46079               } else {
46080                 oChild = oXMLDoc.createElement(sName);
46081                 if (vValue instanceof Object) {
46082                   loadObjTree(oXMLDoc, oChild, vValue);
46083                 } else if (vValue !== null && vValue !== true) {
46084                   oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
46085                 }
46086                 oParentEl.appendChild(oChild);
46087              }
46088            }
46089           }
46090
46091           this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
46092             var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
46093             return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);    
46094           };
46095
46096           this.unbuild = function (oObjTree) {    
46097             var oNewDoc = document.implementation.createDocument('', '', null);
46098             loadObjTree(oNewDoc, oNewDoc, oObjTree);
46099             return oNewDoc;
46100           };
46101
46102           this.stringify = function (oObjTree) {
46103             return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
46104           };
46105         })();
46106
46107         // var myObject = JXON.build(doc);
46108         // we got our javascript object! try: alert(JSON.stringify(myObject));
46109
46110         // var newDoc = JXON.unbuild(myObject);
46111         // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
46112
46113         var tiler$4 = utilTiler();
46114         var dispatch$5 = dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
46115         var urlroot = 'https://www.openstreetmap.org';
46116         var oauth = osmAuth({
46117             url: urlroot,
46118             oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
46119             oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
46120             loading: authLoading,
46121             done: authDone
46122         });
46123
46124         var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
46125         var _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: rbush_1() };
46126         var _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
46127         var _userCache = { toLoad: {}, user: {} };
46128         var _changeset = {};
46129
46130         var _deferred = new Set();
46131         var _connectionID = 1;
46132         var _tileZoom = 16;
46133         var _noteZoom = 12;
46134         var _rateLimitError;
46135         var _userChangesets;
46136         var _userDetails;
46137         var _off;
46138
46139
46140         function authLoading() {
46141             dispatch$5.call('authLoading');
46142         }
46143
46144
46145         function authDone() {
46146             dispatch$5.call('authDone');
46147         }
46148
46149
46150         function abortRequest$4(controllerOrXHR) {
46151             if (controllerOrXHR) {
46152                 controllerOrXHR.abort();
46153             }
46154         }
46155
46156
46157         function hasInflightRequests(cache) {
46158             return Object.keys(cache.inflight).length;
46159         }
46160
46161
46162         function abortUnwantedRequests$2(cache, visibleTiles) {
46163             Object.keys(cache.inflight).forEach(function(k) {
46164                 if (cache.toLoad[k]) return;
46165                 if (visibleTiles.find(function(tile) { return k === tile.id; })) return;
46166
46167                 abortRequest$4(cache.inflight[k]);
46168                 delete cache.inflight[k];
46169             });
46170         }
46171
46172
46173         function getLoc(attrs) {
46174             var lon = attrs.lon && attrs.lon.value;
46175             var lat = attrs.lat && attrs.lat.value;
46176             return [parseFloat(lon), parseFloat(lat)];
46177         }
46178
46179
46180         function getNodes(obj) {
46181             var elems = obj.getElementsByTagName('nd');
46182             var nodes = new Array(elems.length);
46183             for (var i = 0, l = elems.length; i < l; i++) {
46184                 nodes[i] = 'n' + elems[i].attributes.ref.value;
46185             }
46186             return nodes;
46187         }
46188
46189
46190         function getTags(obj) {
46191             var elems = obj.getElementsByTagName('tag');
46192             var tags = {};
46193             for (var i = 0, l = elems.length; i < l; i++) {
46194                 var attrs = elems[i].attributes;
46195                 tags[attrs.k.value] = attrs.v.value;
46196             }
46197
46198             return tags;
46199         }
46200
46201
46202         function getMembers(obj) {
46203             var elems = obj.getElementsByTagName('member');
46204             var members = new Array(elems.length);
46205             for (var i = 0, l = elems.length; i < l; i++) {
46206                 var attrs = elems[i].attributes;
46207                 members[i] = {
46208                     id: attrs.type.value[0] + attrs.ref.value,
46209                     type: attrs.type.value,
46210                     role: attrs.role.value
46211                 };
46212             }
46213             return members;
46214         }
46215
46216
46217         function getVisible(attrs) {
46218             return (!attrs.visible || attrs.visible.value !== 'false');
46219         }
46220
46221
46222         function parseComments(comments) {
46223             var parsedComments = [];
46224
46225             // for each comment
46226             for (var i = 0; i < comments.length; i++) {
46227                 var comment = comments[i];
46228                 if (comment.nodeName === 'comment') {
46229                     var childNodes = comment.childNodes;
46230                     var parsedComment = {};
46231
46232                     for (var j = 0; j < childNodes.length; j++) {
46233                         var node = childNodes[j];
46234                         var nodeName = node.nodeName;
46235                         if (nodeName === '#text') continue;
46236                         parsedComment[nodeName] = node.textContent;
46237
46238                         if (nodeName === 'uid') {
46239                             var uid = node.textContent;
46240                             if (uid && !_userCache.user[uid]) {
46241                                 _userCache.toLoad[uid] = true;
46242                             }
46243                         }
46244                     }
46245
46246                     if (parsedComment) {
46247                         parsedComments.push(parsedComment);
46248                     }
46249                 }
46250             }
46251             return parsedComments;
46252         }
46253
46254
46255         function encodeNoteRtree(note) {
46256             return {
46257                 minX: note.loc[0],
46258                 minY: note.loc[1],
46259                 maxX: note.loc[0],
46260                 maxY: note.loc[1],
46261                 data: note
46262             };
46263         }
46264
46265
46266         var parsers = {
46267             node: function nodeData(obj, uid) {
46268                 var attrs = obj.attributes;
46269                 return new osmNode({
46270                     id: uid,
46271                     visible: getVisible(attrs),
46272                     version: attrs.version.value,
46273                     changeset: attrs.changeset && attrs.changeset.value,
46274                     timestamp: attrs.timestamp && attrs.timestamp.value,
46275                     user: attrs.user && attrs.user.value,
46276                     uid: attrs.uid && attrs.uid.value,
46277                     loc: getLoc(attrs),
46278                     tags: getTags(obj)
46279                 });
46280             },
46281
46282             way: function wayData(obj, uid) {
46283                 var attrs = obj.attributes;
46284                 return new osmWay({
46285                     id: uid,
46286                     visible: getVisible(attrs),
46287                     version: attrs.version.value,
46288                     changeset: attrs.changeset && attrs.changeset.value,
46289                     timestamp: attrs.timestamp && attrs.timestamp.value,
46290                     user: attrs.user && attrs.user.value,
46291                     uid: attrs.uid && attrs.uid.value,
46292                     tags: getTags(obj),
46293                     nodes: getNodes(obj),
46294                 });
46295             },
46296
46297             relation: function relationData(obj, uid) {
46298                 var attrs = obj.attributes;
46299                 return new osmRelation({
46300                     id: uid,
46301                     visible: getVisible(attrs),
46302                     version: attrs.version.value,
46303                     changeset: attrs.changeset && attrs.changeset.value,
46304                     timestamp: attrs.timestamp && attrs.timestamp.value,
46305                     user: attrs.user && attrs.user.value,
46306                     uid: attrs.uid && attrs.uid.value,
46307                     tags: getTags(obj),
46308                     members: getMembers(obj)
46309                 });
46310             },
46311
46312             note: function parseNote(obj, uid) {
46313                 var attrs = obj.attributes;
46314                 var childNodes = obj.childNodes;
46315                 var props = {};
46316
46317                 props.id = uid;
46318                 props.loc = getLoc(attrs);
46319
46320                 // if notes are coincident, move them apart slightly
46321                 var coincident = false;
46322                 var epsilon = 0.00001;
46323                 do {
46324                     if (coincident) {
46325                         props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
46326                     }
46327                     var bbox = geoExtent(props.loc).bbox();
46328                     coincident = _noteCache.rtree.search(bbox).length;
46329                 } while (coincident);
46330
46331                 // parse note contents
46332                 for (var i = 0; i < childNodes.length; i++) {
46333                     var node = childNodes[i];
46334                     var nodeName = node.nodeName;
46335                     if (nodeName === '#text') continue;
46336
46337                     // if the element is comments, parse the comments
46338                     if (nodeName === 'comments') {
46339                         props[nodeName] = parseComments(node.childNodes);
46340                     } else {
46341                         props[nodeName] = node.textContent;
46342                     }
46343                 }
46344
46345                 var note = new osmNote(props);
46346                 var item = encodeNoteRtree(note);
46347                 _noteCache.note[note.id] = note;
46348                 _noteCache.rtree.insert(item);
46349
46350                 return note;
46351             },
46352
46353             user: function parseUser(obj, uid) {
46354                 var attrs = obj.attributes;
46355                 var user = {
46356                     id: uid,
46357                     display_name: attrs.display_name && attrs.display_name.value,
46358                     account_created: attrs.account_created && attrs.account_created.value,
46359                     changesets_count: 0
46360                 };
46361
46362                 var img = obj.getElementsByTagName('img');
46363                 if (img && img[0] && img[0].getAttribute('href')) {
46364                     user.image_url = img[0].getAttribute('href');
46365                 }
46366
46367                 var changesets = obj.getElementsByTagName('changesets');
46368                 if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
46369                     user.changesets_count = changesets[0].getAttribute('count');
46370                 }
46371
46372                 _userCache.user[uid] = user;
46373                 delete _userCache.toLoad[uid];
46374                 return user;
46375             }
46376         };
46377
46378
46379         function parseXML(xml, callback, options) {
46380             options = Object.assign({ skipSeen: true }, options);
46381             if (!xml || !xml.childNodes) {
46382                 return callback({ message: 'No XML', status: -1 });
46383             }
46384
46385             var root = xml.childNodes[0];
46386             var children = root.childNodes;
46387
46388             var handle = window.requestIdleCallback(function() {
46389                 var results = [];
46390                 var result;
46391                 for (var i = 0; i < children.length; i++) {
46392                     result = parseChild(children[i]);
46393                     if (result) results.push(result);
46394                 }
46395                 callback(null, results);
46396             });
46397
46398             _deferred.add(handle);
46399
46400
46401             function parseChild(child) {
46402                 var parser = parsers[child.nodeName];
46403                 if (!parser) return null;
46404
46405                 var uid;
46406                 if (child.nodeName === 'user') {
46407                     uid = child.attributes.id.value;
46408                     if (options.skipSeen && _userCache.user[uid]) {
46409                         delete _userCache.toLoad[uid];
46410                         return null;
46411                     }
46412
46413                 } else if (child.nodeName === 'note') {
46414                     uid = child.getElementsByTagName('id')[0].textContent;
46415
46416                 } else {
46417                     uid = osmEntity.id.fromOSM(child.nodeName, child.attributes.id.value);
46418                     if (options.skipSeen) {
46419                         if (_tileCache.seen[uid]) return null;  // avoid reparsing a "seen" entity
46420                         _tileCache.seen[uid] = true;
46421                     }
46422                 }
46423
46424                 return parser(child, uid);
46425             }
46426         }
46427
46428
46429         // replace or remove note from rtree
46430         function updateRtree$2(item, replace) {
46431             _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
46432
46433             if (replace) {
46434                 _noteCache.rtree.insert(item);
46435             }
46436         }
46437
46438
46439         function wrapcb(thisArg, callback, cid) {
46440             return function(err, result) {
46441                 if (err) {
46442                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
46443                     if (err.status === 400 || err.status === 401 || err.status === 403) {
46444                         thisArg.logout();
46445                     }
46446                     return callback.call(thisArg, err);
46447
46448                 } else if (thisArg.getConnectionId() !== cid) {
46449                     return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
46450
46451                 } else {
46452                     return callback.call(thisArg, err, result);
46453                 }
46454             };
46455         }
46456
46457
46458         var serviceOsm = {
46459
46460             init: function() {
46461                 utilRebind(this, dispatch$5, 'on');
46462             },
46463
46464
46465             reset: function() {
46466                 Array.from(_deferred).forEach(function(handle) {
46467                     window.cancelIdleCallback(handle);
46468                     _deferred.delete(handle);
46469                 });
46470
46471                 _connectionID++;
46472                 _userChangesets = undefined;
46473                 _userDetails = undefined;
46474                 _rateLimitError = undefined;
46475
46476                 Object.values(_tileCache.inflight).forEach(abortRequest$4);
46477                 Object.values(_noteCache.inflight).forEach(abortRequest$4);
46478                 Object.values(_noteCache.inflightPost).forEach(abortRequest$4);
46479                 if (_changeset.inflight) abortRequest$4(_changeset.inflight);
46480
46481                 _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: rbush_1() };
46482                 _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
46483                 _userCache = { toLoad: {}, user: {} };
46484                 _changeset = {};
46485
46486                 return this;
46487             },
46488
46489
46490             getConnectionId: function() {
46491                 return _connectionID;
46492             },
46493
46494
46495             changesetURL: function(changesetID) {
46496                 return urlroot + '/changeset/' + changesetID;
46497             },
46498
46499
46500             changesetsURL: function(center, zoom) {
46501                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
46502                 return urlroot + '/history#map=' +
46503                     Math.floor(zoom) + '/' +
46504                     center[1].toFixed(precision) + '/' +
46505                     center[0].toFixed(precision);
46506             },
46507
46508
46509             entityURL: function(entity) {
46510                 return urlroot + '/' + entity.type + '/' + entity.osmId();
46511             },
46512
46513
46514             historyURL: function(entity) {
46515                 return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
46516             },
46517
46518
46519             userURL: function(username) {
46520                 return urlroot + '/user/' + username;
46521             },
46522
46523
46524             noteURL: function(note) {
46525                 return urlroot + '/note/' + note.id;
46526             },
46527
46528
46529             noteReportURL: function(note) {
46530                 return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
46531             },
46532
46533
46534             // Generic method to load data from the OSM API
46535             // Can handle either auth or unauth calls.
46536             loadFromAPI: function(path, callback, options) {
46537                 options = Object.assign({ skipSeen: true }, options);
46538                 var that = this;
46539                 var cid = _connectionID;
46540
46541                 function done(err, xml) {
46542                     if (that.getConnectionId() !== cid) {
46543                         if (callback) callback({ message: 'Connection Switched', status: -1 });
46544                         return;
46545                     }
46546
46547                     var isAuthenticated = that.authenticated();
46548
46549                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden
46550                     // Logout and retry the request..
46551                     if (isAuthenticated && err && err.status &&
46552                             (err.status === 400 || err.status === 401 || err.status === 403)) {
46553                         that.logout();
46554                         that.loadFromAPI(path, callback, options);
46555
46556                     // else, no retry..
46557                     } else {
46558                         // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
46559                         // Set the rateLimitError flag and trigger a warning..
46560                         if (!isAuthenticated && !_rateLimitError && err && err.status &&
46561                                 (err.status === 509 || err.status === 429)) {
46562                             _rateLimitError = err;
46563                             dispatch$5.call('change');
46564                         }
46565
46566                         if (callback) {
46567                             if (err) {
46568                                 return callback(err);
46569                             } else {
46570                                 return parseXML(xml, callback, options);
46571                             }
46572                         }
46573                     }
46574                 }
46575
46576                 if (this.authenticated()) {
46577                     return oauth.xhr({ method: 'GET', path: path }, done);
46578                 } else {
46579                     var url = urlroot + path;
46580                     var controller = new AbortController();
46581                     d3_xml(url, { signal: controller.signal })
46582                         .then(function(data) {
46583                             done(null, data);
46584                         })
46585                         .catch(function(err) {
46586                             if (err.name === 'AbortError') return;
46587                             // d3-fetch includes status in the error message,
46588                             // but we can't access the response itself
46589                             // https://github.com/d3/d3-fetch/issues/27
46590                             var match = err.message.match(/^\d{3}/);
46591                             if (match) {
46592                                 done({ status: +match[0], statusText: err.message });
46593                             } else {
46594                                 done(err.message);
46595                             }
46596                         });
46597                     return controller;
46598                 }
46599             },
46600
46601
46602             // Load a single entity by id (ways and relations use the `/full` call)
46603             // GET /api/0.6/node/#id
46604             // GET /api/0.6/[way|relation]/#id/full
46605             loadEntity: function(id, callback) {
46606                 var type = osmEntity.id.type(id);
46607                 var osmID = osmEntity.id.toOSM(id);
46608                 var options = { skipSeen: false };
46609
46610                 this.loadFromAPI(
46611                     '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
46612                     function(err, entities) {
46613                         if (callback) callback(err, { data: entities });
46614                     },
46615                     options
46616                 );
46617             },
46618
46619
46620             // Load a single entity with a specific version
46621             // GET /api/0.6/[node|way|relation]/#id/#version
46622             loadEntityVersion: function(id, version, callback) {
46623                 var type = osmEntity.id.type(id);
46624                 var osmID = osmEntity.id.toOSM(id);
46625                 var options = { skipSeen: false };
46626
46627                 this.loadFromAPI(
46628                     '/api/0.6/' + type + '/' + osmID + '/' + version,
46629                     function(err, entities) {
46630                         if (callback) callback(err, { data: entities });
46631                     },
46632                     options
46633                 );
46634             },
46635
46636
46637             // Load multiple entities in chunks
46638             // (note: callback may be called multiple times)
46639             // GET /api/0.6/[nodes|ways|relations]?#parameters
46640             loadMultiple: function(ids, callback) {
46641                 var that = this;
46642                 var groups = utilArrayGroupBy(utilArrayUniq(ids), osmEntity.id.type);
46643
46644                 Object.keys(groups).forEach(function(k) {
46645                     var type = k + 's';   // nodes, ways, relations
46646                     var osmIDs = groups[k].map(function(id) { return osmEntity.id.toOSM(id); });
46647                     var options = { skipSeen: false };
46648
46649                     utilArrayChunk(osmIDs, 150).forEach(function(arr) {
46650                         that.loadFromAPI(
46651                             '/api/0.6/' + type + '?' + type + '=' + arr.join(),
46652                             function(err, entities) {
46653                                 if (callback) callback(err, { data: entities });
46654                             },
46655                             options
46656                         );
46657                     });
46658                 });
46659             },
46660
46661
46662             // Create, upload, and close a changeset
46663             // PUT /api/0.6/changeset/create
46664             // POST /api/0.6/changeset/#id/upload
46665             // PUT /api/0.6/changeset/#id/close
46666             putChangeset: function(changeset, changes, callback) {
46667                 var cid = _connectionID;
46668
46669                 if (_changeset.inflight) {
46670                     return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
46671
46672                 } else if (_changeset.open) {   // reuse existing open changeset..
46673                     return createdChangeset.call(this, null, _changeset.open);
46674
46675                 } else {   // Open a new changeset..
46676                     var options = {
46677                         method: 'PUT',
46678                         path: '/api/0.6/changeset/create',
46679                         options: { header: { 'Content-Type': 'text/xml' } },
46680                         content: JXON.stringify(changeset.asJXON())
46681                     };
46682                     _changeset.inflight = oauth.xhr(
46683                         options,
46684                         wrapcb(this, createdChangeset, cid)
46685                     );
46686                 }
46687
46688
46689                 function createdChangeset(err, changesetID) {
46690                     _changeset.inflight = null;
46691                     if (err) { return callback(err, changeset); }
46692
46693                     _changeset.open = changesetID;
46694                     changeset = changeset.update({ id: changesetID });
46695
46696                     // Upload the changeset..
46697                     var options = {
46698                         method: 'POST',
46699                         path: '/api/0.6/changeset/' + changesetID + '/upload',
46700                         options: { header: { 'Content-Type': 'text/xml' } },
46701                         content: JXON.stringify(changeset.osmChangeJXON(changes))
46702                     };
46703                     _changeset.inflight = oauth.xhr(
46704                         options,
46705                         wrapcb(this, uploadedChangeset, cid)
46706                     );
46707                 }
46708
46709
46710                 function uploadedChangeset(err) {
46711                     _changeset.inflight = null;
46712                     if (err) return callback(err, changeset);
46713
46714                     // Upload was successful, safe to call the callback.
46715                     // Add delay to allow for postgres replication #1646 #2678
46716                     window.setTimeout(function() { callback(null, changeset); }, 2500);
46717                     _changeset.open = null;
46718
46719                     // At this point, we don't really care if the connection was switched..
46720                     // Only try to close the changeset if we're still talking to the same server.
46721                     if (this.getConnectionId() === cid) {
46722                         // Still attempt to close changeset, but ignore response because #2667
46723                         oauth.xhr({
46724                             method: 'PUT',
46725                             path: '/api/0.6/changeset/' + changeset.id + '/close',
46726                             options: { header: { 'Content-Type': 'text/xml' } }
46727                         }, function() { return true; });
46728                     }
46729                 }
46730             },
46731
46732
46733             // Load multiple users in chunks
46734             // (note: callback may be called multiple times)
46735             // GET /api/0.6/users?users=#id1,#id2,...,#idn
46736             loadUsers: function(uids, callback) {
46737                 var toLoad = [];
46738                 var cached = [];
46739
46740                 utilArrayUniq(uids).forEach(function(uid) {
46741                     if (_userCache.user[uid]) {
46742                         delete _userCache.toLoad[uid];
46743                         cached.push(_userCache.user[uid]);
46744                     } else {
46745                         toLoad.push(uid);
46746                     }
46747                 });
46748
46749                 if (cached.length || !this.authenticated()) {
46750                     callback(undefined, cached);
46751                     if (!this.authenticated()) return;  // require auth
46752                 }
46753
46754                 utilArrayChunk(toLoad, 150).forEach(function(arr) {
46755                     oauth.xhr(
46756                         { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
46757                         wrapcb(this, done, _connectionID)
46758                     );
46759                 }.bind(this));
46760
46761                 function done(err, xml) {
46762                     if (err) { return callback(err); }
46763
46764                     var options = { skipSeen: true };
46765                     return parseXML(xml, function(err, results) {
46766                         if (err) {
46767                             return callback(err);
46768                         } else {
46769                             return callback(undefined, results);
46770                         }
46771                     }, options);
46772                 }
46773             },
46774
46775
46776             // Load a given user by id
46777             // GET /api/0.6/user/#id
46778             loadUser: function(uid, callback) {
46779                 if (_userCache.user[uid] || !this.authenticated()) {   // require auth
46780                     delete _userCache.toLoad[uid];
46781                     return callback(undefined, _userCache.user[uid]);
46782                 }
46783
46784                 oauth.xhr(
46785                     { method: 'GET', path: '/api/0.6/user/' + uid },
46786                     wrapcb(this, done, _connectionID)
46787                 );
46788
46789                 function done(err, xml) {
46790                     if (err) { return callback(err); }
46791
46792                     var options = { skipSeen: true };
46793                     return parseXML(xml, function(err, results) {
46794                         if (err) {
46795                             return callback(err);
46796                         } else {
46797                             return callback(undefined, results[0]);
46798                         }
46799                     }, options);
46800                 }
46801             },
46802
46803
46804             // Load the details of the logged-in user
46805             // GET /api/0.6/user/details
46806             userDetails: function(callback) {
46807                 if (_userDetails) {    // retrieve cached
46808                     return callback(undefined, _userDetails);
46809                 }
46810
46811                 oauth.xhr(
46812                     { method: 'GET', path: '/api/0.6/user/details' },
46813                     wrapcb(this, done, _connectionID)
46814                 );
46815
46816                 function done(err, xml) {
46817                     if (err) { return callback(err); }
46818
46819                     var options = { skipSeen: false };
46820                     return parseXML(xml, function(err, results) {
46821                         if (err) {
46822                             return callback(err);
46823                         } else {
46824                             _userDetails = results[0];
46825                             return callback(undefined, _userDetails);
46826                         }
46827                     }, options);
46828                 }
46829             },
46830
46831
46832             // Load previous changesets for the logged in user
46833             // GET /api/0.6/changesets?user=#id
46834             userChangesets: function(callback) {
46835                 if (_userChangesets) {    // retrieve cached
46836                     return callback(undefined, _userChangesets);
46837                 }
46838
46839                 this.userDetails(
46840                     wrapcb(this, gotDetails, _connectionID)
46841                 );
46842
46843
46844                 function gotDetails(err, user) {
46845                     if (err) { return callback(err); }
46846
46847                     oauth.xhr(
46848                         { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
46849                         wrapcb(this, done, _connectionID)
46850                     );
46851                 }
46852
46853                 function done(err, xml) {
46854                     if (err) { return callback(err); }
46855
46856                     _userChangesets = Array.prototype.map.call(
46857                         xml.getElementsByTagName('changeset'),
46858                         function (changeset) { return { tags: getTags(changeset) }; }
46859                     ).filter(function (changeset) {
46860                         var comment = changeset.tags.comment;
46861                         return comment && comment !== '';
46862                     });
46863
46864                     return callback(undefined, _userChangesets);
46865                 }
46866             },
46867
46868
46869             // Fetch the status of the OSM API
46870             // GET /api/capabilities
46871             status: function(callback) {
46872                 var url = urlroot + '/api/capabilities';
46873                 var errback = wrapcb(this, done, _connectionID);
46874                 d3_xml(url)
46875                     .then(function(data) { errback(null, data); })
46876                     .catch(function(err) { errback(err.message); });
46877
46878                 function done(err, xml) {
46879                     if (err) { return callback(err); }
46880
46881                     // update blacklists
46882                     var elements = xml.getElementsByTagName('blacklist');
46883                     var regexes = [];
46884                     for (var i = 0; i < elements.length; i++) {
46885                         var regex = elements[i].getAttribute('regex');  // needs unencode?
46886                         if (regex) {
46887                             regexes.push(regex);
46888                         }
46889                     }
46890                     if (regexes.length) {
46891                         _blacklists = regexes;
46892                     }
46893
46894                     if (_rateLimitError) {
46895                         return callback(_rateLimitError, 'rateLimited');
46896                     } else {
46897                         var apiStatus = xml.getElementsByTagName('status');
46898                         var val = apiStatus[0].getAttribute('api');
46899                         return callback(undefined, val);
46900                     }
46901                 }
46902             },
46903
46904
46905             // Load data (entities) from the API in tiles
46906             // GET /api/0.6/map?bbox=
46907             loadTiles: function(projection, callback) {
46908                 if (_off) return;
46909
46910                 // determine the needed tiles to cover the view
46911                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
46912
46913                 // abort inflight requests that are no longer needed
46914                 var hadRequests = hasInflightRequests(_tileCache);
46915                 abortUnwantedRequests$2(_tileCache, tiles);
46916                 if (hadRequests && !hasInflightRequests(_tileCache)) {
46917                     dispatch$5.call('loaded');    // stop the spinner
46918                 }
46919
46920                 // issue new requests..
46921                 tiles.forEach(function(tile) {
46922                     this.loadTile(tile, callback);
46923                 }, this);
46924             },
46925
46926
46927             // Load a single data tile
46928             // GET /api/0.6/map?bbox=
46929             loadTile: function(tile, callback) {
46930                 if (_off) return;
46931                 if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
46932
46933                 if (!hasInflightRequests(_tileCache)) {
46934                     dispatch$5.call('loading');   // start the spinner
46935                 }
46936
46937                 var path = '/api/0.6/map?bbox=';
46938                 var options = { skipSeen: true };
46939
46940                 _tileCache.inflight[tile.id] = this.loadFromAPI(
46941                     path + tile.extent.toParam(),
46942                     function(err, parsed) {
46943                         delete _tileCache.inflight[tile.id];
46944                         if (!err) {
46945                             delete _tileCache.toLoad[tile.id];
46946                             _tileCache.loaded[tile.id] = true;
46947                             var bbox = tile.extent.bbox();
46948                             bbox.id = tile.id;
46949                             _tileCache.rtree.insert(bbox);
46950                         }
46951                         if (callback) {
46952                             callback(err, Object.assign({ data: parsed }, tile));
46953                         }
46954                         if (!hasInflightRequests(_tileCache)) {
46955                             dispatch$5.call('loaded');     // stop the spinner
46956                         }
46957                     },
46958                     options
46959                 );
46960             },
46961
46962
46963             isDataLoaded: function(loc) {
46964                 var bbox = { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] };
46965                 return _tileCache.rtree.collides(bbox);
46966             },
46967
46968
46969             // load the tile that covers the given `loc`
46970             loadTileAtLoc: function(loc, callback) {
46971                 // Back off if the toLoad queue is filling up.. re #6417
46972                 // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
46973                 // let users safely edit geometries which extend to unloaded tiles.  We can drop some.)
46974                 if (Object.keys(_tileCache.toLoad).length > 50) return;
46975
46976                 var k = geoZoomToScale(_tileZoom + 1);
46977                 var offset = geoRawMercator().scale(k)(loc);
46978                 var projection = geoRawMercator().transform({ k: k, x: -offset[0], y: -offset[1] });
46979                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
46980
46981                 tiles.forEach(function(tile) {
46982                     if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
46983
46984                     _tileCache.toLoad[tile.id] = true;
46985                     this.loadTile(tile, callback);
46986                 }, this);
46987             },
46988
46989
46990             // Load notes from the API in tiles
46991             // GET /api/0.6/notes?bbox=
46992             loadNotes: function(projection, noteOptions) {
46993                 noteOptions = Object.assign({ limit: 10000, closed: 7 }, noteOptions);
46994                 if (_off) return;
46995
46996                 var that = this;
46997                 var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
46998                 var throttleLoadUsers = throttle(function() {
46999                     var uids = Object.keys(_userCache.toLoad);
47000                     if (!uids.length) return;
47001                     that.loadUsers(uids, function() {});  // eagerly load user details
47002                 }, 750);
47003
47004                 // determine the needed tiles to cover the view
47005                 var tiles = tiler$4.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
47006
47007                 // abort inflight requests that are no longer needed
47008                 abortUnwantedRequests$2(_noteCache, tiles);
47009
47010                 // issue new requests..
47011                 tiles.forEach(function(tile) {
47012                     if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) return;
47013
47014                     var options = { skipSeen: false };
47015                     _noteCache.inflight[tile.id] = that.loadFromAPI(
47016                         path + tile.extent.toParam(),
47017                         function(err) {
47018                             delete _noteCache.inflight[tile.id];
47019                             if (!err) {
47020                                 _noteCache.loaded[tile.id] = true;
47021                             }
47022                             throttleLoadUsers();
47023                             dispatch$5.call('loadedNotes');
47024                         },
47025                         options
47026                     );
47027                 });
47028             },
47029
47030
47031             // Create a note
47032             // POST /api/0.6/notes?params
47033             postNoteCreate: function(note, callback) {
47034                 if (!this.authenticated()) {
47035                     return callback({ message: 'Not Authenticated', status: -3 }, note);
47036                 }
47037                 if (_noteCache.inflightPost[note.id]) {
47038                     return callback({ message: 'Note update already inflight', status: -2 }, note);
47039                 }
47040
47041                 if (!note.loc[0] || !note.loc[1] || !note.newComment) return; // location & description required
47042
47043                 var comment = note.newComment;
47044                 if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
47045
47046                 var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
47047
47048                 _noteCache.inflightPost[note.id] = oauth.xhr(
47049                     { method: 'POST', path: path },
47050                     wrapcb(this, done, _connectionID)
47051                 );
47052
47053
47054                 function done(err, xml) {
47055                     delete _noteCache.inflightPost[note.id];
47056                     if (err) { return callback(err); }
47057
47058                     // we get the updated note back, remove from caches and reparse..
47059                     this.removeNote(note);
47060
47061                     var options = { skipSeen: false };
47062                     return parseXML(xml, function(err, results) {
47063                         if (err) {
47064                             return callback(err);
47065                         } else {
47066                             return callback(undefined, results[0]);
47067                         }
47068                     }, options);
47069                 }
47070             },
47071
47072
47073             // Update a note
47074             // POST /api/0.6/notes/#id/comment?text=comment
47075             // POST /api/0.6/notes/#id/close?text=comment
47076             // POST /api/0.6/notes/#id/reopen?text=comment
47077             postNoteUpdate: function(note, newStatus, callback) {
47078                 if (!this.authenticated()) {
47079                     return callback({ message: 'Not Authenticated', status: -3 }, note);
47080                 }
47081                 if (_noteCache.inflightPost[note.id]) {
47082                     return callback({ message: 'Note update already inflight', status: -2 }, note);
47083                 }
47084
47085                 var action;
47086                 if (note.status !== 'closed' && newStatus === 'closed') {
47087                     action = 'close';
47088                 } else if (note.status !== 'open' && newStatus === 'open') {
47089                     action = 'reopen';
47090                 } else {
47091                     action = 'comment';
47092                     if (!note.newComment) return; // when commenting, comment required
47093                 }
47094
47095                 var path = '/api/0.6/notes/' + note.id + '/' + action;
47096                 if (note.newComment) {
47097                     path += '?' + utilQsString({ text: note.newComment });
47098                 }
47099
47100                 _noteCache.inflightPost[note.id] = oauth.xhr(
47101                     { method: 'POST', path: path },
47102                     wrapcb(this, done, _connectionID)
47103                 );
47104
47105
47106                 function done(err, xml) {
47107                     delete _noteCache.inflightPost[note.id];
47108                     if (err) { return callback(err); }
47109
47110                     // we get the updated note back, remove from caches and reparse..
47111                     this.removeNote(note);
47112
47113                     // update closed note cache - used to populate `closed:note` changeset tag
47114                     if (action === 'close') {
47115                         _noteCache.closed[note.id] = true;
47116                     } else if (action === 'reopen') {
47117                         delete _noteCache.closed[note.id];
47118                     }
47119
47120                     var options = { skipSeen: false };
47121                     return parseXML(xml, function(err, results) {
47122                         if (err) {
47123                             return callback(err);
47124                         } else {
47125                             return callback(undefined, results[0]);
47126                         }
47127                     }, options);
47128                 }
47129             },
47130
47131
47132             switch: function(options) {
47133                 urlroot = options.urlroot;
47134
47135                 oauth.options(Object.assign({
47136                     url: urlroot,
47137                     loading: authLoading,
47138                     done: authDone
47139                 }, options));
47140
47141                 this.reset();
47142                 this.userChangesets(function() {});  // eagerly load user details/changesets
47143                 dispatch$5.call('change');
47144                 return this;
47145             },
47146
47147
47148             toggle: function(val) {
47149                 _off = !val;
47150                 return this;
47151             },
47152
47153
47154             isChangesetInflight: function() {
47155                 return !!_changeset.inflight;
47156             },
47157
47158
47159             // get/set cached data
47160             // This is used to save/restore the state when entering/exiting the walkthrough
47161             // Also used for testing purposes.
47162             caches: function(obj) {
47163                 function cloneCache(source) {
47164                     var target = {};
47165                     Object.keys(source).forEach(function(k) {
47166                         if (k === 'rtree') {
47167                             target.rtree = rbush_1().fromJSON(source.rtree.toJSON());  // clone rbush
47168                         } else if (k === 'note') {
47169                             target.note = {};
47170                             Object.keys(source.note).forEach(function(id) {
47171                                 target.note[id] = osmNote(source.note[id]);   // copy notes
47172                             });
47173                         } else {
47174                             target[k] = JSON.parse(JSON.stringify(source[k]));   // clone deep
47175                         }
47176                     });
47177                     return target;
47178                 }
47179
47180                 if (!arguments.length) {
47181                     return {
47182                         tile: cloneCache(_tileCache),
47183                         note: cloneCache(_noteCache),
47184                         user: cloneCache(_userCache)
47185                     };
47186                 }
47187
47188                 // access caches directly for testing (e.g., loading notes rtree)
47189                 if (obj === 'get') {
47190                     return {
47191                         tile: _tileCache,
47192                         note: _noteCache,
47193                         user: _userCache
47194                     };
47195                 }
47196
47197                 if (obj.tile) {
47198                     _tileCache = obj.tile;
47199                     _tileCache.inflight = {};
47200                 }
47201                 if (obj.note) {
47202                     _noteCache = obj.note;
47203                     _noteCache.inflight = {};
47204                     _noteCache.inflightPost = {};
47205                 }
47206                 if (obj.user) {
47207                     _userCache = obj.user;
47208                 }
47209
47210                 return this;
47211             },
47212
47213
47214             logout: function() {
47215                 _userChangesets = undefined;
47216                 _userDetails = undefined;
47217                 oauth.logout();
47218                 dispatch$5.call('change');
47219                 return this;
47220             },
47221
47222
47223             authenticated: function() {
47224                 return oauth.authenticated();
47225             },
47226
47227
47228             authenticate: function(callback) {
47229                 var that = this;
47230                 var cid = _connectionID;
47231                 _userChangesets = undefined;
47232                 _userDetails = undefined;
47233
47234                 function done(err, res) {
47235                     if (err) {
47236                         if (callback) callback(err);
47237                         return;
47238                     }
47239                     if (that.getConnectionId() !== cid) {
47240                         if (callback) callback({ message: 'Connection Switched', status: -1 });
47241                         return;
47242                     }
47243                     _rateLimitError = undefined;
47244                     dispatch$5.call('change');
47245                     if (callback) callback(err, res);
47246                     that.userChangesets(function() {});  // eagerly load user details/changesets
47247                 }
47248
47249                 return oauth.authenticate(done);
47250             },
47251
47252
47253             imageryBlacklists: function() {
47254                 return _blacklists;
47255             },
47256
47257
47258             tileZoom: function(val) {
47259                 if (!arguments.length) return _tileZoom;
47260                 _tileZoom = val;
47261                 return this;
47262             },
47263
47264
47265             // get all cached notes covering the viewport
47266             notes: function(projection) {
47267                 var viewport = projection.clipExtent();
47268                 var min = [viewport[0][0], viewport[1][1]];
47269                 var max = [viewport[1][0], viewport[0][1]];
47270                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
47271
47272                 return _noteCache.rtree.search(bbox)
47273                     .map(function(d) { return d.data; });
47274             },
47275
47276
47277             // get a single note from the cache
47278             getNote: function(id) {
47279                 return _noteCache.note[id];
47280             },
47281
47282
47283             // remove a single note from the cache
47284             removeNote: function(note) {
47285                 if (!(note instanceof osmNote) || !note.id) return;
47286
47287                 delete _noteCache.note[note.id];
47288                 updateRtree$2(encodeNoteRtree(note), false);  // false = remove
47289             },
47290
47291
47292             // replace a single note in the cache
47293             replaceNote: function(note) {
47294                 if (!(note instanceof osmNote) || !note.id) return;
47295
47296                 _noteCache.note[note.id] = note;
47297                 updateRtree$2(encodeNoteRtree(note), true);  // true = replace
47298                 return note;
47299             },
47300
47301
47302             // Get an array of note IDs closed during this session.
47303             // Used to populate `closed:note` changeset tag
47304             getClosedIDs: function() {
47305                 return Object.keys(_noteCache.closed).sort();
47306             }
47307
47308         };
47309
47310         var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
47311         var _inflight$1 = {};
47312         var _wikibaseCache = {};
47313         var _localeIDs = { en: false };
47314
47315
47316         var debouncedRequest = debounce(request, 500, { leading: false });
47317
47318         function request(url, callback) {
47319             if (_inflight$1[url]) return;
47320             var controller = new AbortController();
47321             _inflight$1[url] = controller;
47322
47323             d3_json(url, { signal: controller.signal })
47324                 .then(function(result) {
47325                     delete _inflight$1[url];
47326                     if (callback) callback(null, result);
47327                 })
47328                 .catch(function(err) {
47329                     delete _inflight$1[url];
47330                     if (err.name === 'AbortError') return;
47331                     if (callback) callback(err.message);
47332                 });
47333         }
47334
47335
47336         /**
47337          * Get the best string value from the descriptions/labels result
47338          * Note that if mediawiki doesn't recognize language code, it will return all values.
47339          * In that case, fallback to use English.
47340          * @param values object - either descriptions or labels
47341          * @param langCode String
47342          * @returns localized string
47343          */
47344         function localizedToString(values, langCode) {
47345             if (values) {
47346                 values = values[langCode] || values.en;
47347             }
47348             return values ? values.value : '';
47349         }
47350
47351
47352         var serviceOsmWikibase = {
47353
47354             init: function() {
47355                 _inflight$1 = {};
47356                 _wikibaseCache = {};
47357                 _localeIDs = {};
47358             },
47359
47360
47361             reset: function() {
47362                 Object.values(_inflight$1).forEach(function(controller) { controller.abort(); });
47363                 _inflight$1 = {};
47364             },
47365
47366
47367             /**
47368              * Get the best value for the property, or undefined if not found
47369              * @param entity object from wikibase
47370              * @param property string e.g. 'P4' for image
47371              * @param langCode string e.g. 'fr' for French
47372              */
47373             claimToValue: function(entity, property, langCode) {
47374                 if (!entity.claims[property]) return undefined;
47375                 var locale = _localeIDs[langCode];
47376                 var preferredPick, localePick;
47377
47378                 entity.claims[property].forEach(function(stmt) {
47379                     // If exists, use value limited to the needed language (has a qualifier P26 = locale)
47380                     // Or if not found, use the first value with the "preferred" rank
47381                     if (!preferredPick && stmt.rank === 'preferred') {
47382                         preferredPick = stmt;
47383                     }
47384                     if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
47385                         stmt.qualifiers.P26[0].datavalue.value.id === locale
47386                     ) {
47387                         localePick = stmt;
47388                     }
47389                 });
47390
47391                 var result = localePick || preferredPick;
47392                 if (result) {
47393                     var datavalue = result.mainsnak.datavalue;
47394                     return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
47395                 } else {
47396                     return undefined;
47397                 }
47398             },
47399
47400
47401             /**
47402              * Convert monolingual property into a key-value object (language -> value)
47403              * @param entity object from wikibase
47404              * @param property string e.g. 'P31' for monolingual wiki page title
47405              */
47406             monolingualClaimToValueObj: function(entity, property) {
47407                 if (!entity || !entity.claims[property]) return undefined;
47408
47409                 return entity.claims[property].reduce(function(acc, obj) {
47410                     var value = obj.mainsnak.datavalue.value;
47411                     acc[value.language] = value.text;
47412                     return acc;
47413                 }, {});
47414             },
47415
47416
47417             toSitelink: function(key, value) {
47418                 var result = value ? ('Tag:' + key + '=' + value) : 'Key:' + key;
47419                 return result.replace(/_/g, ' ').trim();
47420             },
47421
47422
47423             //
47424             // Pass params object of the form:
47425             // {
47426             //   key: 'string',
47427             //   value: 'string',
47428             //   rtype: 'string',
47429             //   langCode: 'string'
47430             // }
47431             //
47432             getEntity: function(params, callback) {
47433                 var doRequest = params.debounce ? debouncedRequest : request;
47434                 var that = this;
47435                 var titles = [];
47436                 var result = {};
47437                 var rtypeSitelink = params.rtype ? ('Relation:' + params.rtype).replace(/_/g, ' ').trim() : false;
47438                 var keySitelink = params.key ? this.toSitelink(params.key) : false;
47439                 var tagSitelink = (params.key && params.value) ? this.toSitelink(params.key, params.value) : false;
47440                 var localeSitelink;
47441
47442                 if (params.langCode && _localeIDs[params.langCode] === undefined) {
47443                     // If this is the first time we are asking about this locale,
47444                     // fetch corresponding entity (if it exists), and cache it.
47445                     // If there is no such entry, cache `false` value to avoid re-requesting it.
47446                     localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
47447                     titles.push(localeSitelink);
47448                 }
47449
47450                 if (rtypeSitelink) {
47451                     if (_wikibaseCache[rtypeSitelink]) {
47452                         result.rtype = _wikibaseCache[rtypeSitelink];
47453                     } else {
47454                         titles.push(rtypeSitelink);
47455                     }
47456                 }
47457
47458                 if (keySitelink) {
47459                     if (_wikibaseCache[keySitelink]) {
47460                         result.key = _wikibaseCache[keySitelink];
47461                     } else {
47462                         titles.push(keySitelink);
47463                     }
47464                 }
47465
47466                 if (tagSitelink) {
47467                     if (_wikibaseCache[tagSitelink]) {
47468                         result.tag = _wikibaseCache[tagSitelink];
47469                     } else {
47470                         titles.push(tagSitelink);
47471                     }
47472                 }
47473
47474                 if (!titles.length) {
47475                     // Nothing to do, we already had everything in the cache
47476                     return callback(null, result);
47477                 }
47478
47479                 // Requesting just the user language code
47480                 // If backend recognizes the code, it will perform proper fallbacks,
47481                 // and the result will contain the requested code. If not, all values are returned:
47482                 // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
47483                 // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
47484                 var obj = {
47485                     action: 'wbgetentities',
47486                     sites: 'wiki',
47487                     titles: titles.join('|'),
47488                     languages: params.langCode,
47489                     languagefallback: 1,
47490                     origin: '*',
47491                     format: 'json',
47492                     // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
47493                     // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
47494                     // formatversion: 2,
47495                 };
47496
47497                 var url = apibase$3 + '?' + utilQsString(obj);
47498                 doRequest(url, function(err, d) {
47499                     if (err) {
47500                         callback(err);
47501                     } else if (!d.success || d.error) {
47502                         callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
47503                     } else {
47504                         var localeID = false;
47505                         Object.values(d.entities).forEach(function(res) {
47506                             if (res.missing !== '') {
47507                                 // Simplify access to the localized values
47508                                 res.description = localizedToString(res.descriptions, params.langCode);
47509                                 res.label = localizedToString(res.labels, params.langCode);
47510
47511                                 var title = res.sitelinks.wiki.title;
47512                                 if (title === rtypeSitelink) {
47513                                     _wikibaseCache[rtypeSitelink] = res;
47514                                     result.rtype = res;
47515                                 } else if (title === keySitelink) {
47516                                     _wikibaseCache[keySitelink] = res;
47517                                     result.key = res;
47518                                 } else if (title === tagSitelink) {
47519                                     _wikibaseCache[tagSitelink] = res;
47520                                     result.tag = res;
47521                                 } else if (title === localeSitelink) {
47522                                     localeID = res.id;
47523                                 } else {
47524                                     console.log('Unexpected title ' + title);  // eslint-disable-line no-console
47525                                 }
47526                             }
47527                         });
47528
47529                         if (localeSitelink) {
47530                             // If locale ID is not found, store false to prevent repeated queries
47531                             that.addLocale(params.langCode, localeID);
47532                         }
47533
47534                         callback(null, result);
47535                     }
47536                 });
47537             },
47538
47539
47540             //
47541             // Pass params object of the form:
47542             // {
47543             //   key: 'string',     // required
47544             //   value: 'string'    // optional
47545             // }
47546             //   -or-
47547             // {
47548             //   rtype: 'rtype'     // relation type  (e.g. 'multipolygon')
47549             // }
47550             //
47551             // Get an result object used to display tag documentation
47552             // {
47553             //   title:        'string',
47554             //   description:  'string',
47555             //   editURL:      'string',
47556             //   imageURL:     'string',
47557             //   wiki:         { title: 'string', text: 'string', url: 'string' }
47558             // }
47559             //
47560             getDocs: function(params, callback) {
47561                 var that = this;
47562                 var langCode = utilDetect().locale.toLowerCase();
47563                 params.langCode = langCode;
47564
47565                 this.getEntity(params, function(err, data) {
47566                     if (err) {
47567                         callback(err);
47568                         return;
47569                     }
47570
47571                     var entity = data.rtype || data.tag || data.key;
47572                     if (!entity) {
47573                         callback('No entity');
47574                         return;
47575                     }
47576
47577                     // prepare result
47578                     var result = {
47579                         title: entity.title,
47580                         description: entity.description,
47581                         editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
47582                     };
47583
47584                     // add image
47585                     if (entity.claims) {
47586                         var imageroot;
47587                         var image = that.claimToValue(entity, 'P4', langCode);
47588                         if (image) {
47589                             imageroot = 'https://commons.wikimedia.org/w/index.php';
47590                         } else {
47591                             image = that.claimToValue(entity, 'P28', langCode);
47592                             if (image) {
47593                                 imageroot = 'https://wiki.openstreetmap.org/w/index.php';
47594                             }
47595                         }
47596                         if (imageroot && image) {
47597                             result.imageURL = imageroot + '?' + utilQsString({
47598                                 title: 'Special:Redirect/file/' + image,
47599                                 width: 400
47600                             });
47601                         }
47602                     }
47603
47604                     // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
47605                     // If neither tag nor key data item contain a wiki page in the needed language nor English,
47606                     // get the first found wiki page from either the tag or the key item.
47607                     var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
47608                     var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
47609                     var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
47610
47611                     // If exact language code does not exist, try to find the first part before the '-'
47612                     // BUG: in some cases, a more elaborate fallback logic might be needed
47613                     var langPrefix = langCode.split('-', 2)[0];
47614
47615                     // use the first acceptable wiki page
47616                     result.wiki =
47617                         getWikiInfo(rtypeWiki, langCode, 'inspector.wiki_reference') ||
47618                         getWikiInfo(rtypeWiki, langPrefix, 'inspector.wiki_reference') ||
47619                         getWikiInfo(rtypeWiki, 'en', 'inspector.wiki_en_reference') ||
47620                         getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
47621                         getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
47622                         getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
47623                         getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
47624                         getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
47625                         getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
47626
47627                     callback(null, result);
47628
47629
47630                     // Helper method to get wiki info if a given language exists
47631                     function getWikiInfo(wiki, langCode, tKey) {
47632                         if (wiki && wiki[langCode]) {
47633                             return {
47634                                 title: wiki[langCode],
47635                                 text: tKey,
47636                                 url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
47637                             };
47638                         }
47639                     }
47640                 });
47641             },
47642
47643
47644             addLocale: function(langCode, qid) {
47645                 // Makes it easier to unit test
47646                 _localeIDs[langCode] = qid;
47647             },
47648
47649
47650             apibase: function(val) {
47651                 if (!arguments.length) return apibase$3;
47652                 apibase$3 = val;
47653                 return this;
47654             }
47655
47656         };
47657
47658         var jsonpCache = {};
47659         window.jsonpCache = jsonpCache;
47660
47661         function jsonpRequest(url, callback) {
47662             var request = {
47663                 abort: function() {}
47664             };
47665
47666             if (window.JSONP_FIX) {
47667                 if (window.JSONP_DELAY === 0) {
47668                     callback(window.JSONP_FIX);
47669                 } else {
47670                     var t = window.setTimeout(function() {
47671                         callback(window.JSONP_FIX);
47672                     }, window.JSONP_DELAY || 0);
47673
47674                     request.abort = function() { window.clearTimeout(t); };
47675                 }
47676
47677                 return request;
47678             }
47679
47680             function rand() {
47681                 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
47682                 var c = '';
47683                 var i = -1;
47684                 while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52));
47685                 return c;
47686             }
47687
47688             function create(url) {
47689                 var e = url.match(/callback=(\w+)/);
47690                 var c = e ? e[1] : rand();
47691
47692                 jsonpCache[c] = function(data) {
47693                     if (jsonpCache[c]) {
47694                         callback(data);
47695                     }
47696                     finalize();
47697                 };
47698
47699                 function finalize() {
47700                     delete jsonpCache[c];
47701                     script.remove();
47702                 }
47703
47704                 request.abort = finalize;
47705                 return 'jsonpCache.' + c;
47706             }
47707
47708             var cb = create(url);
47709
47710             var script = d3_select('head')
47711                 .append('script')
47712                 .attr('type', 'text/javascript')
47713                 .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
47714
47715             return request;
47716         }
47717
47718         var q = createCommonjsModule(function (module, exports) {
47719         // vim:ts=4:sts=4:sw=4:
47720         /*!
47721          *
47722          * Copyright 2009-2017 Kris Kowal under the terms of the MIT
47723          * license found at https://github.com/kriskowal/q/blob/v1/LICENSE
47724          *
47725          * With parts by Tyler Close
47726          * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
47727          * at http://www.opensource.org/licenses/mit-license.html
47728          * Forked at ref_send.js version: 2009-05-11
47729          *
47730          * With parts by Mark Miller
47731          * Copyright (C) 2011 Google Inc.
47732          *
47733          * Licensed under the Apache License, Version 2.0 (the "License");
47734          * you may not use this file except in compliance with the License.
47735          * You may obtain a copy of the License at
47736          *
47737          * http://www.apache.org/licenses/LICENSE-2.0
47738          *
47739          * Unless required by applicable law or agreed to in writing, software
47740          * distributed under the License is distributed on an "AS IS" BASIS,
47741          * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47742          * See the License for the specific language governing permissions and
47743          * limitations under the License.
47744          *
47745          */
47746
47747         (function (definition) {
47748
47749             // This file will function properly as a <script> tag, or a module
47750             // using CommonJS and NodeJS or RequireJS module formats.  In
47751             // Common/Node/RequireJS, the module exports the Q API and when
47752             // executed as a simple <script>, it creates a Q global instead.
47753
47754             // Montage Require
47755             if (typeof bootstrap === "function") {
47756                 bootstrap("promise", definition);
47757
47758             // CommonJS
47759             } else {
47760                 module.exports = definition();
47761
47762             // RequireJS
47763             }
47764
47765         })(function () {
47766
47767         var hasStacks = false;
47768         try {
47769             throw new Error();
47770         } catch (e) {
47771             hasStacks = !!e.stack;
47772         }
47773
47774         // All code after this point will be filtered from stack traces reported
47775         // by Q.
47776         var qStartingLine = captureLine();
47777         var qFileName;
47778
47779         // shims
47780
47781         // used for fallback in "allResolved"
47782         var noop = function () {};
47783
47784         // Use the fastest possible means to execute a task in a future turn
47785         // of the event loop.
47786         var nextTick =(function () {
47787             // linked list of tasks (single, with head node)
47788             var head = {task: void 0, next: null};
47789             var tail = head;
47790             var flushing = false;
47791             var requestTick = void 0;
47792             var isNodeJS = false;
47793             // queue for late tasks, used by unhandled rejection tracking
47794             var laterQueue = [];
47795
47796             function flush() {
47797                 /* jshint loopfunc: true */
47798                 var task, domain;
47799
47800                 while (head.next) {
47801                     head = head.next;
47802                     task = head.task;
47803                     head.task = void 0;
47804                     domain = head.domain;
47805
47806                     if (domain) {
47807                         head.domain = void 0;
47808                         domain.enter();
47809                     }
47810                     runSingle(task, domain);
47811
47812                 }
47813                 while (laterQueue.length) {
47814                     task = laterQueue.pop();
47815                     runSingle(task);
47816                 }
47817                 flushing = false;
47818             }
47819             // runs a single function in the async queue
47820             function runSingle(task, domain) {
47821                 try {
47822                     task();
47823
47824                 } catch (e) {
47825                     if (isNodeJS) {
47826                         // In node, uncaught exceptions are considered fatal errors.
47827                         // Re-throw them synchronously to interrupt flushing!
47828
47829                         // Ensure continuation if the uncaught exception is suppressed
47830                         // listening "uncaughtException" events (as domains does).
47831                         // Continue in next event to avoid tick recursion.
47832                         if (domain) {
47833                             domain.exit();
47834                         }
47835                         setTimeout(flush, 0);
47836                         if (domain) {
47837                             domain.enter();
47838                         }
47839
47840                         throw e;
47841
47842                     } else {
47843                         // In browsers, uncaught exceptions are not fatal.
47844                         // Re-throw them asynchronously to avoid slow-downs.
47845                         setTimeout(function () {
47846                             throw e;
47847                         }, 0);
47848                     }
47849                 }
47850
47851                 if (domain) {
47852                     domain.exit();
47853                 }
47854             }
47855
47856             nextTick = function (task) {
47857                 tail = tail.next = {
47858                     task: task,
47859                     domain: isNodeJS && process.domain,
47860                     next: null
47861                 };
47862
47863                 if (!flushing) {
47864                     flushing = true;
47865                     requestTick();
47866                 }
47867             };
47868
47869             if (typeof process === "object" &&
47870                 process.toString() === "[object process]" && process.nextTick) {
47871                 // Ensure Q is in a real Node environment, with a `process.nextTick`.
47872                 // To see through fake Node environments:
47873                 // * Mocha test runner - exposes a `process` global without a `nextTick`
47874                 // * Browserify - exposes a `process.nexTick` function that uses
47875                 //   `setTimeout`. In this case `setImmediate` is preferred because
47876                 //    it is faster. Browserify's `process.toString()` yields
47877                 //   "[object Object]", while in a real Node environment
47878                 //   `process.toString()` yields "[object process]".
47879                 isNodeJS = true;
47880
47881                 requestTick = function () {
47882                     process.nextTick(flush);
47883                 };
47884
47885             } else if (typeof setImmediate === "function") {
47886                 // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
47887                 if (typeof window !== "undefined") {
47888                     requestTick = setImmediate.bind(window, flush);
47889                 } else {
47890                     requestTick = function () {
47891                         setImmediate(flush);
47892                     };
47893                 }
47894
47895             } else if (typeof MessageChannel !== "undefined") {
47896                 // modern browsers
47897                 // http://www.nonblocking.io/2011/06/windownexttick.html
47898                 var channel = new MessageChannel();
47899                 // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
47900                 // working message ports the first time a page loads.
47901                 channel.port1.onmessage = function () {
47902                     requestTick = requestPortTick;
47903                     channel.port1.onmessage = flush;
47904                     flush();
47905                 };
47906                 var requestPortTick = function () {
47907                     // Opera requires us to provide a message payload, regardless of
47908                     // whether we use it.
47909                     channel.port2.postMessage(0);
47910                 };
47911                 requestTick = function () {
47912                     setTimeout(flush, 0);
47913                     requestPortTick();
47914                 };
47915
47916             } else {
47917                 // old browsers
47918                 requestTick = function () {
47919                     setTimeout(flush, 0);
47920                 };
47921             }
47922             // runs a task after all other tasks have been run
47923             // this is useful for unhandled rejection tracking that needs to happen
47924             // after all `then`d tasks have been run.
47925             nextTick.runAfter = function (task) {
47926                 laterQueue.push(task);
47927                 if (!flushing) {
47928                     flushing = true;
47929                     requestTick();
47930                 }
47931             };
47932             return nextTick;
47933         })();
47934
47935         // Attempt to make generics safe in the face of downstream
47936         // modifications.
47937         // There is no situation where this is necessary.
47938         // If you need a security guarantee, these primordials need to be
47939         // deeply frozen anyway, and if you don’t need a security guarantee,
47940         // this is just plain paranoid.
47941         // However, this **might** have the nice side-effect of reducing the size of
47942         // the minified code by reducing x.call() to merely x()
47943         // See Mark Miller’s explanation of what this does.
47944         // http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
47945         var call = Function.call;
47946         function uncurryThis(f) {
47947             return function () {
47948                 return call.apply(f, arguments);
47949             };
47950         }
47951         // This is equivalent, but slower:
47952         // uncurryThis = Function_bind.bind(Function_bind.call);
47953         // http://jsperf.com/uncurrythis
47954
47955         var array_slice = uncurryThis(Array.prototype.slice);
47956
47957         var array_reduce = uncurryThis(
47958             Array.prototype.reduce || function (callback, basis) {
47959                 var index = 0,
47960                     length = this.length;
47961                 // concerning the initial value, if one is not provided
47962                 if (arguments.length === 1) {
47963                     // seek to the first value in the array, accounting
47964                     // for the possibility that is is a sparse array
47965                     do {
47966                         if (index in this) {
47967                             basis = this[index++];
47968                             break;
47969                         }
47970                         if (++index >= length) {
47971                             throw new TypeError();
47972                         }
47973                     } while (1);
47974                 }
47975                 // reduce
47976                 for (; index < length; index++) {
47977                     // account for the possibility that the array is sparse
47978                     if (index in this) {
47979                         basis = callback(basis, this[index], index);
47980                     }
47981                 }
47982                 return basis;
47983             }
47984         );
47985
47986         var array_indexOf = uncurryThis(
47987             Array.prototype.indexOf || function (value) {
47988                 // not a very good shim, but good enough for our one use of it
47989                 for (var i = 0; i < this.length; i++) {
47990                     if (this[i] === value) {
47991                         return i;
47992                     }
47993                 }
47994                 return -1;
47995             }
47996         );
47997
47998         var array_map = uncurryThis(
47999             Array.prototype.map || function (callback, thisp) {
48000                 var self = this;
48001                 var collect = [];
48002                 array_reduce(self, function (undefined$1, value, index) {
48003                     collect.push(callback.call(thisp, value, index, self));
48004                 }, void 0);
48005                 return collect;
48006             }
48007         );
48008
48009         var object_create = Object.create || function (prototype) {
48010             function Type() { }
48011             Type.prototype = prototype;
48012             return new Type();
48013         };
48014
48015         var object_defineProperty = Object.defineProperty || function (obj, prop, descriptor) {
48016             obj[prop] = descriptor.value;
48017             return obj;
48018         };
48019
48020         var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
48021
48022         var object_keys = Object.keys || function (object) {
48023             var keys = [];
48024             for (var key in object) {
48025                 if (object_hasOwnProperty(object, key)) {
48026                     keys.push(key);
48027                 }
48028             }
48029             return keys;
48030         };
48031
48032         var object_toString = uncurryThis(Object.prototype.toString);
48033
48034         function isObject(value) {
48035             return value === Object(value);
48036         }
48037
48038         // generator related shims
48039
48040         // FIXME: Remove this function once ES6 generators are in SpiderMonkey.
48041         function isStopIteration(exception) {
48042             return (
48043                 object_toString(exception) === "[object StopIteration]" ||
48044                 exception instanceof QReturnValue
48045             );
48046         }
48047
48048         // FIXME: Remove this helper and Q.return once ES6 generators are in
48049         // SpiderMonkey.
48050         var QReturnValue;
48051         if (typeof ReturnValue !== "undefined") {
48052             QReturnValue = ReturnValue;
48053         } else {
48054             QReturnValue = function (value) {
48055                 this.value = value;
48056             };
48057         }
48058
48059         // long stack traces
48060
48061         var STACK_JUMP_SEPARATOR = "From previous event:";
48062
48063         function makeStackTraceLong(error, promise) {
48064             // If possible, transform the error stack trace by removing Node and Q
48065             // cruft, then concatenating with the stack trace of `promise`. See #57.
48066             if (hasStacks &&
48067                 promise.stack &&
48068                 typeof error === "object" &&
48069                 error !== null &&
48070                 error.stack
48071             ) {
48072                 var stacks = [];
48073                 for (var p = promise; !!p; p = p.source) {
48074                     if (p.stack && (!error.__minimumStackCounter__ || error.__minimumStackCounter__ > p.stackCounter)) {
48075                         object_defineProperty(error, "__minimumStackCounter__", {value: p.stackCounter, configurable: true});
48076                         stacks.unshift(p.stack);
48077                     }
48078                 }
48079                 stacks.unshift(error.stack);
48080
48081                 var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
48082                 var stack = filterStackString(concatedStacks);
48083                 object_defineProperty(error, "stack", {value: stack, configurable: true});
48084             }
48085         }
48086
48087         function filterStackString(stackString) {
48088             var lines = stackString.split("\n");
48089             var desiredLines = [];
48090             for (var i = 0; i < lines.length; ++i) {
48091                 var line = lines[i];
48092
48093                 if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
48094                     desiredLines.push(line);
48095                 }
48096             }
48097             return desiredLines.join("\n");
48098         }
48099
48100         function isNodeFrame(stackLine) {
48101             return stackLine.indexOf("(module.js:") !== -1 ||
48102                    stackLine.indexOf("(node.js:") !== -1;
48103         }
48104
48105         function getFileNameAndLineNumber(stackLine) {
48106             // Named functions: "at functionName (filename:lineNumber:columnNumber)"
48107             // In IE10 function name can have spaces ("Anonymous function") O_o
48108             var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
48109             if (attempt1) {
48110                 return [attempt1[1], Number(attempt1[2])];
48111             }
48112
48113             // Anonymous functions: "at filename:lineNumber:columnNumber"
48114             var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
48115             if (attempt2) {
48116                 return [attempt2[1], Number(attempt2[2])];
48117             }
48118
48119             // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
48120             var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
48121             if (attempt3) {
48122                 return [attempt3[1], Number(attempt3[2])];
48123             }
48124         }
48125
48126         function isInternalFrame(stackLine) {
48127             var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
48128
48129             if (!fileNameAndLineNumber) {
48130                 return false;
48131             }
48132
48133             var fileName = fileNameAndLineNumber[0];
48134             var lineNumber = fileNameAndLineNumber[1];
48135
48136             return fileName === qFileName &&
48137                 lineNumber >= qStartingLine &&
48138                 lineNumber <= qEndingLine;
48139         }
48140
48141         // discover own file name and line number range for filtering stack
48142         // traces
48143         function captureLine() {
48144             if (!hasStacks) {
48145                 return;
48146             }
48147
48148             try {
48149                 throw new Error();
48150             } catch (e) {
48151                 var lines = e.stack.split("\n");
48152                 var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
48153                 var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
48154                 if (!fileNameAndLineNumber) {
48155                     return;
48156                 }
48157
48158                 qFileName = fileNameAndLineNumber[0];
48159                 return fileNameAndLineNumber[1];
48160             }
48161         }
48162
48163         function deprecate(callback, name, alternative) {
48164             return function () {
48165                 if (typeof console !== "undefined" &&
48166                     typeof console.warn === "function") {
48167                     console.warn(name + " is deprecated, use " + alternative +
48168                                  " instead.", new Error("").stack);
48169                 }
48170                 return callback.apply(callback, arguments);
48171             };
48172         }
48173
48174         // end of shims
48175         // beginning of real work
48176
48177         /**
48178          * Constructs a promise for an immediate reference, passes promises through, or
48179          * coerces promises from different systems.
48180          * @param value immediate reference or promise
48181          */
48182         function Q(value) {
48183             // If the object is already a Promise, return it directly.  This enables
48184             // the resolve function to both be used to created references from objects,
48185             // but to tolerably coerce non-promises to promises.
48186             if (value instanceof Promise) {
48187                 return value;
48188             }
48189
48190             // assimilate thenables
48191             if (isPromiseAlike(value)) {
48192                 return coerce(value);
48193             } else {
48194                 return fulfill(value);
48195             }
48196         }
48197         Q.resolve = Q;
48198
48199         /**
48200          * Performs a task in a future turn of the event loop.
48201          * @param {Function} task
48202          */
48203         Q.nextTick = nextTick;
48204
48205         /**
48206          * Controls whether or not long stack traces will be on
48207          */
48208         Q.longStackSupport = false;
48209
48210         /**
48211          * The counter is used to determine the stopping point for building
48212          * long stack traces. In makeStackTraceLong we walk backwards through
48213          * the linked list of promises, only stacks which were created before
48214          * the rejection are concatenated.
48215          */
48216         var longStackCounter = 1;
48217
48218         // enable long stacks if Q_DEBUG is set
48219         if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) {
48220             Q.longStackSupport = true;
48221         }
48222
48223         /**
48224          * Constructs a {promise, resolve, reject} object.
48225          *
48226          * `resolve` is a callback to invoke with a more resolved value for the
48227          * promise. To fulfill the promise, invoke `resolve` with any value that is
48228          * not a thenable. To reject the promise, invoke `resolve` with a rejected
48229          * thenable, or invoke `reject` with the reason directly. To resolve the
48230          * promise to another thenable, thus putting it in the same state, invoke
48231          * `resolve` with that other thenable.
48232          */
48233         Q.defer = defer;
48234         function defer() {
48235             // if "messages" is an "Array", that indicates that the promise has not yet
48236             // been resolved.  If it is "undefined", it has been resolved.  Each
48237             // element of the messages array is itself an array of complete arguments to
48238             // forward to the resolved promise.  We coerce the resolution value to a
48239             // promise using the `resolve` function because it handles both fully
48240             // non-thenable values and other thenables gracefully.
48241             var messages = [], progressListeners = [], resolvedPromise;
48242
48243             var deferred = object_create(defer.prototype);
48244             var promise = object_create(Promise.prototype);
48245
48246             promise.promiseDispatch = function (resolve, op, operands) {
48247                 var args = array_slice(arguments);
48248                 if (messages) {
48249                     messages.push(args);
48250                     if (op === "when" && operands[1]) { // progress operand
48251                         progressListeners.push(operands[1]);
48252                     }
48253                 } else {
48254                     Q.nextTick(function () {
48255                         resolvedPromise.promiseDispatch.apply(resolvedPromise, args);
48256                     });
48257                 }
48258             };
48259
48260             // XXX deprecated
48261             promise.valueOf = function () {
48262                 if (messages) {
48263                     return promise;
48264                 }
48265                 var nearerValue = nearer(resolvedPromise);
48266                 if (isPromise(nearerValue)) {
48267                     resolvedPromise = nearerValue; // shorten chain
48268                 }
48269                 return nearerValue;
48270             };
48271
48272             promise.inspect = function () {
48273                 if (!resolvedPromise) {
48274                     return { state: "pending" };
48275                 }
48276                 return resolvedPromise.inspect();
48277             };
48278
48279             if (Q.longStackSupport && hasStacks) {
48280                 try {
48281                     throw new Error();
48282                 } catch (e) {
48283                     // NOTE: don't try to use `Error.captureStackTrace` or transfer the
48284                     // accessor around; that causes memory leaks as per GH-111. Just
48285                     // reify the stack trace as a string ASAP.
48286                     //
48287                     // At the same time, cut off the first line; it's always just
48288                     // "[object Promise]\n", as per the `toString`.
48289                     promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
48290                     promise.stackCounter = longStackCounter++;
48291                 }
48292             }
48293
48294             // NOTE: we do the checks for `resolvedPromise` in each method, instead of
48295             // consolidating them into `become`, since otherwise we'd create new
48296             // promises with the lines `become(whatever(value))`. See e.g. GH-252.
48297
48298             function become(newPromise) {
48299                 resolvedPromise = newPromise;
48300
48301                 if (Q.longStackSupport && hasStacks) {
48302                     // Only hold a reference to the new promise if long stacks
48303                     // are enabled to reduce memory usage
48304                     promise.source = newPromise;
48305                 }
48306
48307                 array_reduce(messages, function (undefined$1, message) {
48308                     Q.nextTick(function () {
48309                         newPromise.promiseDispatch.apply(newPromise, message);
48310                     });
48311                 }, void 0);
48312
48313                 messages = void 0;
48314                 progressListeners = void 0;
48315             }
48316
48317             deferred.promise = promise;
48318             deferred.resolve = function (value) {
48319                 if (resolvedPromise) {
48320                     return;
48321                 }
48322
48323                 become(Q(value));
48324             };
48325
48326             deferred.fulfill = function (value) {
48327                 if (resolvedPromise) {
48328                     return;
48329                 }
48330
48331                 become(fulfill(value));
48332             };
48333             deferred.reject = function (reason) {
48334                 if (resolvedPromise) {
48335                     return;
48336                 }
48337
48338                 become(reject(reason));
48339             };
48340             deferred.notify = function (progress) {
48341                 if (resolvedPromise) {
48342                     return;
48343                 }
48344
48345                 array_reduce(progressListeners, function (undefined$1, progressListener) {
48346                     Q.nextTick(function () {
48347                         progressListener(progress);
48348                     });
48349                 }, void 0);
48350             };
48351
48352             return deferred;
48353         }
48354
48355         /**
48356          * Creates a Node-style callback that will resolve or reject the deferred
48357          * promise.
48358          * @returns a nodeback
48359          */
48360         defer.prototype.makeNodeResolver = function () {
48361             var self = this;
48362             return function (error, value) {
48363                 if (error) {
48364                     self.reject(error);
48365                 } else if (arguments.length > 2) {
48366                     self.resolve(array_slice(arguments, 1));
48367                 } else {
48368                     self.resolve(value);
48369                 }
48370             };
48371         };
48372
48373         /**
48374          * @param resolver {Function} a function that returns nothing and accepts
48375          * the resolve, reject, and notify functions for a deferred.
48376          * @returns a promise that may be resolved with the given resolve and reject
48377          * functions, or rejected by a thrown exception in resolver
48378          */
48379         Q.Promise = promise; // ES6
48380         Q.promise = promise;
48381         function promise(resolver) {
48382             if (typeof resolver !== "function") {
48383                 throw new TypeError("resolver must be a function.");
48384             }
48385             var deferred = defer();
48386             try {
48387                 resolver(deferred.resolve, deferred.reject, deferred.notify);
48388             } catch (reason) {
48389                 deferred.reject(reason);
48390             }
48391             return deferred.promise;
48392         }
48393
48394         promise.race = race; // ES6
48395         promise.all = all; // ES6
48396         promise.reject = reject; // ES6
48397         promise.resolve = Q; // ES6
48398
48399         // XXX experimental.  This method is a way to denote that a local value is
48400         // serializable and should be immediately dispatched to a remote upon request,
48401         // instead of passing a reference.
48402         Q.passByCopy = function (object) {
48403             //freeze(object);
48404             //passByCopies.set(object, true);
48405             return object;
48406         };
48407
48408         Promise.prototype.passByCopy = function () {
48409             //freeze(object);
48410             //passByCopies.set(object, true);
48411             return this;
48412         };
48413
48414         /**
48415          * If two promises eventually fulfill to the same value, promises that value,
48416          * but otherwise rejects.
48417          * @param x {Any*}
48418          * @param y {Any*}
48419          * @returns {Any*} a promise for x and y if they are the same, but a rejection
48420          * otherwise.
48421          *
48422          */
48423         Q.join = function (x, y) {
48424             return Q(x).join(y);
48425         };
48426
48427         Promise.prototype.join = function (that) {
48428             return Q([this, that]).spread(function (x, y) {
48429                 if (x === y) {
48430                     // TODO: "===" should be Object.is or equiv
48431                     return x;
48432                 } else {
48433                     throw new Error("Q can't join: not the same: " + x + " " + y);
48434                 }
48435             });
48436         };
48437
48438         /**
48439          * Returns a promise for the first of an array of promises to become settled.
48440          * @param answers {Array[Any*]} promises to race
48441          * @returns {Any*} the first promise to be settled
48442          */
48443         Q.race = race;
48444         function race(answerPs) {
48445             return promise(function (resolve, reject) {
48446                 // Switch to this once we can assume at least ES5
48447                 // answerPs.forEach(function (answerP) {
48448                 //     Q(answerP).then(resolve, reject);
48449                 // });
48450                 // Use this in the meantime
48451                 for (var i = 0, len = answerPs.length; i < len; i++) {
48452                     Q(answerPs[i]).then(resolve, reject);
48453                 }
48454             });
48455         }
48456
48457         Promise.prototype.race = function () {
48458             return this.then(Q.race);
48459         };
48460
48461         /**
48462          * Constructs a Promise with a promise descriptor object and optional fallback
48463          * function.  The descriptor contains methods like when(rejected), get(name),
48464          * set(name, value), post(name, args), and delete(name), which all
48465          * return either a value, a promise for a value, or a rejection.  The fallback
48466          * accepts the operation name, a resolver, and any further arguments that would
48467          * have been forwarded to the appropriate method above had a method been
48468          * provided with the proper name.  The API makes no guarantees about the nature
48469          * of the returned object, apart from that it is usable whereever promises are
48470          * bought and sold.
48471          */
48472         Q.makePromise = Promise;
48473         function Promise(descriptor, fallback, inspect) {
48474             if (fallback === void 0) {
48475                 fallback = function (op) {
48476                     return reject(new Error(
48477                         "Promise does not support operation: " + op
48478                     ));
48479                 };
48480             }
48481             if (inspect === void 0) {
48482                 inspect = function () {
48483                     return {state: "unknown"};
48484                 };
48485             }
48486
48487             var promise = object_create(Promise.prototype);
48488
48489             promise.promiseDispatch = function (resolve, op, args) {
48490                 var result;
48491                 try {
48492                     if (descriptor[op]) {
48493                         result = descriptor[op].apply(promise, args);
48494                     } else {
48495                         result = fallback.call(promise, op, args);
48496                     }
48497                 } catch (exception) {
48498                     result = reject(exception);
48499                 }
48500                 if (resolve) {
48501                     resolve(result);
48502                 }
48503             };
48504
48505             promise.inspect = inspect;
48506
48507             // XXX deprecated `valueOf` and `exception` support
48508             if (inspect) {
48509                 var inspected = inspect();
48510                 if (inspected.state === "rejected") {
48511                     promise.exception = inspected.reason;
48512                 }
48513
48514                 promise.valueOf = function () {
48515                     var inspected = inspect();
48516                     if (inspected.state === "pending" ||
48517                         inspected.state === "rejected") {
48518                         return promise;
48519                     }
48520                     return inspected.value;
48521                 };
48522             }
48523
48524             return promise;
48525         }
48526
48527         Promise.prototype.toString = function () {
48528             return "[object Promise]";
48529         };
48530
48531         Promise.prototype.then = function (fulfilled, rejected, progressed) {
48532             var self = this;
48533             var deferred = defer();
48534             var done = false;   // ensure the untrusted promise makes at most a
48535                                 // single call to one of the callbacks
48536
48537             function _fulfilled(value) {
48538                 try {
48539                     return typeof fulfilled === "function" ? fulfilled(value) : value;
48540                 } catch (exception) {
48541                     return reject(exception);
48542                 }
48543             }
48544
48545             function _rejected(exception) {
48546                 if (typeof rejected === "function") {
48547                     makeStackTraceLong(exception, self);
48548                     try {
48549                         return rejected(exception);
48550                     } catch (newException) {
48551                         return reject(newException);
48552                     }
48553                 }
48554                 return reject(exception);
48555             }
48556
48557             function _progressed(value) {
48558                 return typeof progressed === "function" ? progressed(value) : value;
48559             }
48560
48561             Q.nextTick(function () {
48562                 self.promiseDispatch(function (value) {
48563                     if (done) {
48564                         return;
48565                     }
48566                     done = true;
48567
48568                     deferred.resolve(_fulfilled(value));
48569                 }, "when", [function (exception) {
48570                     if (done) {
48571                         return;
48572                     }
48573                     done = true;
48574
48575                     deferred.resolve(_rejected(exception));
48576                 }]);
48577             });
48578
48579             // Progress propagator need to be attached in the current tick.
48580             self.promiseDispatch(void 0, "when", [void 0, function (value) {
48581                 var newValue;
48582                 var threw = false;
48583                 try {
48584                     newValue = _progressed(value);
48585                 } catch (e) {
48586                     threw = true;
48587                     if (Q.onerror) {
48588                         Q.onerror(e);
48589                     } else {
48590                         throw e;
48591                     }
48592                 }
48593
48594                 if (!threw) {
48595                     deferred.notify(newValue);
48596                 }
48597             }]);
48598
48599             return deferred.promise;
48600         };
48601
48602         Q.tap = function (promise, callback) {
48603             return Q(promise).tap(callback);
48604         };
48605
48606         /**
48607          * Works almost like "finally", but not called for rejections.
48608          * Original resolution value is passed through callback unaffected.
48609          * Callback may return a promise that will be awaited for.
48610          * @param {Function} callback
48611          * @returns {Q.Promise}
48612          * @example
48613          * doSomething()
48614          *   .then(...)
48615          *   .tap(console.log)
48616          *   .then(...);
48617          */
48618         Promise.prototype.tap = function (callback) {
48619             callback = Q(callback);
48620
48621             return this.then(function (value) {
48622                 return callback.fcall(value).thenResolve(value);
48623             });
48624         };
48625
48626         /**
48627          * Registers an observer on a promise.
48628          *
48629          * Guarantees:
48630          *
48631          * 1. that fulfilled and rejected will be called only once.
48632          * 2. that either the fulfilled callback or the rejected callback will be
48633          *    called, but not both.
48634          * 3. that fulfilled and rejected will not be called in this turn.
48635          *
48636          * @param value      promise or immediate reference to observe
48637          * @param fulfilled  function to be called with the fulfilled value
48638          * @param rejected   function to be called with the rejection exception
48639          * @param progressed function to be called on any progress notifications
48640          * @return promise for the return value from the invoked callback
48641          */
48642         Q.when = when;
48643         function when(value, fulfilled, rejected, progressed) {
48644             return Q(value).then(fulfilled, rejected, progressed);
48645         }
48646
48647         Promise.prototype.thenResolve = function (value) {
48648             return this.then(function () { return value; });
48649         };
48650
48651         Q.thenResolve = function (promise, value) {
48652             return Q(promise).thenResolve(value);
48653         };
48654
48655         Promise.prototype.thenReject = function (reason) {
48656             return this.then(function () { throw reason; });
48657         };
48658
48659         Q.thenReject = function (promise, reason) {
48660             return Q(promise).thenReject(reason);
48661         };
48662
48663         /**
48664          * If an object is not a promise, it is as "near" as possible.
48665          * If a promise is rejected, it is as "near" as possible too.
48666          * If it’s a fulfilled promise, the fulfillment value is nearer.
48667          * If it’s a deferred promise and the deferred has been resolved, the
48668          * resolution is "nearer".
48669          * @param object
48670          * @returns most resolved (nearest) form of the object
48671          */
48672
48673         // XXX should we re-do this?
48674         Q.nearer = nearer;
48675         function nearer(value) {
48676             if (isPromise(value)) {
48677                 var inspected = value.inspect();
48678                 if (inspected.state === "fulfilled") {
48679                     return inspected.value;
48680                 }
48681             }
48682             return value;
48683         }
48684
48685         /**
48686          * @returns whether the given object is a promise.
48687          * Otherwise it is a fulfilled value.
48688          */
48689         Q.isPromise = isPromise;
48690         function isPromise(object) {
48691             return object instanceof Promise;
48692         }
48693
48694         Q.isPromiseAlike = isPromiseAlike;
48695         function isPromiseAlike(object) {
48696             return isObject(object) && typeof object.then === "function";
48697         }
48698
48699         /**
48700          * @returns whether the given object is a pending promise, meaning not
48701          * fulfilled or rejected.
48702          */
48703         Q.isPending = isPending;
48704         function isPending(object) {
48705             return isPromise(object) && object.inspect().state === "pending";
48706         }
48707
48708         Promise.prototype.isPending = function () {
48709             return this.inspect().state === "pending";
48710         };
48711
48712         /**
48713          * @returns whether the given object is a value or fulfilled
48714          * promise.
48715          */
48716         Q.isFulfilled = isFulfilled;
48717         function isFulfilled(object) {
48718             return !isPromise(object) || object.inspect().state === "fulfilled";
48719         }
48720
48721         Promise.prototype.isFulfilled = function () {
48722             return this.inspect().state === "fulfilled";
48723         };
48724
48725         /**
48726          * @returns whether the given object is a rejected promise.
48727          */
48728         Q.isRejected = isRejected;
48729         function isRejected(object) {
48730             return isPromise(object) && object.inspect().state === "rejected";
48731         }
48732
48733         Promise.prototype.isRejected = function () {
48734             return this.inspect().state === "rejected";
48735         };
48736
48737         //// BEGIN UNHANDLED REJECTION TRACKING
48738
48739         // This promise library consumes exceptions thrown in handlers so they can be
48740         // handled by a subsequent promise.  The exceptions get added to this array when
48741         // they are created, and removed when they are handled.  Note that in ES6 or
48742         // shimmed environments, this would naturally be a `Set`.
48743         var unhandledReasons = [];
48744         var unhandledRejections = [];
48745         var reportedUnhandledRejections = [];
48746         var trackUnhandledRejections = true;
48747
48748         function resetUnhandledRejections() {
48749             unhandledReasons.length = 0;
48750             unhandledRejections.length = 0;
48751
48752             if (!trackUnhandledRejections) {
48753                 trackUnhandledRejections = true;
48754             }
48755         }
48756
48757         function trackRejection(promise, reason) {
48758             if (!trackUnhandledRejections) {
48759                 return;
48760             }
48761             if (typeof process === "object" && typeof process.emit === "function") {
48762                 Q.nextTick.runAfter(function () {
48763                     if (array_indexOf(unhandledRejections, promise) !== -1) {
48764                         process.emit("unhandledRejection", reason, promise);
48765                         reportedUnhandledRejections.push(promise);
48766                     }
48767                 });
48768             }
48769
48770             unhandledRejections.push(promise);
48771             if (reason && typeof reason.stack !== "undefined") {
48772                 unhandledReasons.push(reason.stack);
48773             } else {
48774                 unhandledReasons.push("(no stack) " + reason);
48775             }
48776         }
48777
48778         function untrackRejection(promise) {
48779             if (!trackUnhandledRejections) {
48780                 return;
48781             }
48782
48783             var at = array_indexOf(unhandledRejections, promise);
48784             if (at !== -1) {
48785                 if (typeof process === "object" && typeof process.emit === "function") {
48786                     Q.nextTick.runAfter(function () {
48787                         var atReport = array_indexOf(reportedUnhandledRejections, promise);
48788                         if (atReport !== -1) {
48789                             process.emit("rejectionHandled", unhandledReasons[at], promise);
48790                             reportedUnhandledRejections.splice(atReport, 1);
48791                         }
48792                     });
48793                 }
48794                 unhandledRejections.splice(at, 1);
48795                 unhandledReasons.splice(at, 1);
48796             }
48797         }
48798
48799         Q.resetUnhandledRejections = resetUnhandledRejections;
48800
48801         Q.getUnhandledReasons = function () {
48802             // Make a copy so that consumers can't interfere with our internal state.
48803             return unhandledReasons.slice();
48804         };
48805
48806         Q.stopUnhandledRejectionTracking = function () {
48807             resetUnhandledRejections();
48808             trackUnhandledRejections = false;
48809         };
48810
48811         resetUnhandledRejections();
48812
48813         //// END UNHANDLED REJECTION TRACKING
48814
48815         /**
48816          * Constructs a rejected promise.
48817          * @param reason value describing the failure
48818          */
48819         Q.reject = reject;
48820         function reject(reason) {
48821             var rejection = Promise({
48822                 "when": function (rejected) {
48823                     // note that the error has been handled
48824                     if (rejected) {
48825                         untrackRejection(this);
48826                     }
48827                     return rejected ? rejected(reason) : this;
48828                 }
48829             }, function fallback() {
48830                 return this;
48831             }, function inspect() {
48832                 return { state: "rejected", reason: reason };
48833             });
48834
48835             // Note that the reason has not been handled.
48836             trackRejection(rejection, reason);
48837
48838             return rejection;
48839         }
48840
48841         /**
48842          * Constructs a fulfilled promise for an immediate reference.
48843          * @param value immediate reference
48844          */
48845         Q.fulfill = fulfill;
48846         function fulfill(value) {
48847             return Promise({
48848                 "when": function () {
48849                     return value;
48850                 },
48851                 "get": function (name) {
48852                     return value[name];
48853                 },
48854                 "set": function (name, rhs) {
48855                     value[name] = rhs;
48856                 },
48857                 "delete": function (name) {
48858                     delete value[name];
48859                 },
48860                 "post": function (name, args) {
48861                     // Mark Miller proposes that post with no name should apply a
48862                     // promised function.
48863                     if (name === null || name === void 0) {
48864                         return value.apply(void 0, args);
48865                     } else {
48866                         return value[name].apply(value, args);
48867                     }
48868                 },
48869                 "apply": function (thisp, args) {
48870                     return value.apply(thisp, args);
48871                 },
48872                 "keys": function () {
48873                     return object_keys(value);
48874                 }
48875             }, void 0, function inspect() {
48876                 return { state: "fulfilled", value: value };
48877             });
48878         }
48879
48880         /**
48881          * Converts thenables to Q promises.
48882          * @param promise thenable promise
48883          * @returns a Q promise
48884          */
48885         function coerce(promise) {
48886             var deferred = defer();
48887             Q.nextTick(function () {
48888                 try {
48889                     promise.then(deferred.resolve, deferred.reject, deferred.notify);
48890                 } catch (exception) {
48891                     deferred.reject(exception);
48892                 }
48893             });
48894             return deferred.promise;
48895         }
48896
48897         /**
48898          * Annotates an object such that it will never be
48899          * transferred away from this process over any promise
48900          * communication channel.
48901          * @param object
48902          * @returns promise a wrapping of that object that
48903          * additionally responds to the "isDef" message
48904          * without a rejection.
48905          */
48906         Q.master = master;
48907         function master(object) {
48908             return Promise({
48909                 "isDef": function () {}
48910             }, function fallback(op, args) {
48911                 return dispatch(object, op, args);
48912             }, function () {
48913                 return Q(object).inspect();
48914             });
48915         }
48916
48917         /**
48918          * Spreads the values of a promised array of arguments into the
48919          * fulfillment callback.
48920          * @param fulfilled callback that receives variadic arguments from the
48921          * promised array
48922          * @param rejected callback that receives the exception if the promise
48923          * is rejected.
48924          * @returns a promise for the return value or thrown exception of
48925          * either callback.
48926          */
48927         Q.spread = spread;
48928         function spread(value, fulfilled, rejected) {
48929             return Q(value).spread(fulfilled, rejected);
48930         }
48931
48932         Promise.prototype.spread = function (fulfilled, rejected) {
48933             return this.all().then(function (array) {
48934                 return fulfilled.apply(void 0, array);
48935             }, rejected);
48936         };
48937
48938         /**
48939          * The async function is a decorator for generator functions, turning
48940          * them into asynchronous generators.  Although generators are only part
48941          * of the newest ECMAScript 6 drafts, this code does not cause syntax
48942          * errors in older engines.  This code should continue to work and will
48943          * in fact improve over time as the language improves.
48944          *
48945          * ES6 generators are currently part of V8 version 3.19 with the
48946          * --harmony-generators runtime flag enabled.  SpiderMonkey has had them
48947          * for longer, but under an older Python-inspired form.  This function
48948          * works on both kinds of generators.
48949          *
48950          * Decorates a generator function such that:
48951          *  - it may yield promises
48952          *  - execution will continue when that promise is fulfilled
48953          *  - the value of the yield expression will be the fulfilled value
48954          *  - it returns a promise for the return value (when the generator
48955          *    stops iterating)
48956          *  - the decorated function returns a promise for the return value
48957          *    of the generator or the first rejected promise among those
48958          *    yielded.
48959          *  - if an error is thrown in the generator, it propagates through
48960          *    every following yield until it is caught, or until it escapes
48961          *    the generator function altogether, and is translated into a
48962          *    rejection for the promise returned by the decorated generator.
48963          */
48964         Q.async = async;
48965         function async(makeGenerator) {
48966             return function () {
48967                 // when verb is "send", arg is a value
48968                 // when verb is "throw", arg is an exception
48969                 function continuer(verb, arg) {
48970                     var result;
48971
48972                     // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only
48973                     // engine that has a deployed base of browsers that support generators.
48974                     // However, SM's generators use the Python-inspired semantics of
48975                     // outdated ES6 drafts.  We would like to support ES6, but we'd also
48976                     // like to make it possible to use generators in deployed browsers, so
48977                     // we also support Python-style generators.  At some point we can remove
48978                     // this block.
48979
48980                     if (typeof StopIteration === "undefined") {
48981                         // ES6 Generators
48982                         try {
48983                             result = generator[verb](arg);
48984                         } catch (exception) {
48985                             return reject(exception);
48986                         }
48987                         if (result.done) {
48988                             return Q(result.value);
48989                         } else {
48990                             return when(result.value, callback, errback);
48991                         }
48992                     } else {
48993                         // SpiderMonkey Generators
48994                         // FIXME: Remove this case when SM does ES6 generators.
48995                         try {
48996                             result = generator[verb](arg);
48997                         } catch (exception) {
48998                             if (isStopIteration(exception)) {
48999                                 return Q(exception.value);
49000                             } else {
49001                                 return reject(exception);
49002                             }
49003                         }
49004                         return when(result, callback, errback);
49005                     }
49006                 }
49007                 var generator = makeGenerator.apply(this, arguments);
49008                 var callback = continuer.bind(continuer, "next");
49009                 var errback = continuer.bind(continuer, "throw");
49010                 return callback();
49011             };
49012         }
49013
49014         /**
49015          * The spawn function is a small wrapper around async that immediately
49016          * calls the generator and also ends the promise chain, so that any
49017          * unhandled errors are thrown instead of forwarded to the error
49018          * handler. This is useful because it's extremely common to run
49019          * generators at the top-level to work with libraries.
49020          */
49021         Q.spawn = spawn;
49022         function spawn(makeGenerator) {
49023             Q.done(Q.async(makeGenerator)());
49024         }
49025
49026         // FIXME: Remove this interface once ES6 generators are in SpiderMonkey.
49027         /**
49028          * Throws a ReturnValue exception to stop an asynchronous generator.
49029          *
49030          * This interface is a stop-gap measure to support generator return
49031          * values in older Firefox/SpiderMonkey.  In browsers that support ES6
49032          * generators like Chromium 29, just use "return" in your generator
49033          * functions.
49034          *
49035          * @param value the return value for the surrounding generator
49036          * @throws ReturnValue exception with the value.
49037          * @example
49038          * // ES6 style
49039          * Q.async(function* () {
49040          *      var foo = yield getFooPromise();
49041          *      var bar = yield getBarPromise();
49042          *      return foo + bar;
49043          * })
49044          * // Older SpiderMonkey style
49045          * Q.async(function () {
49046          *      var foo = yield getFooPromise();
49047          *      var bar = yield getBarPromise();
49048          *      Q.return(foo + bar);
49049          * })
49050          */
49051         Q["return"] = _return;
49052         function _return(value) {
49053             throw new QReturnValue(value);
49054         }
49055
49056         /**
49057          * The promised function decorator ensures that any promise arguments
49058          * are settled and passed as values (`this` is also settled and passed
49059          * as a value).  It will also ensure that the result of a function is
49060          * always a promise.
49061          *
49062          * @example
49063          * var add = Q.promised(function (a, b) {
49064          *     return a + b;
49065          * });
49066          * add(Q(a), Q(B));
49067          *
49068          * @param {function} callback The function to decorate
49069          * @returns {function} a function that has been decorated.
49070          */
49071         Q.promised = promised;
49072         function promised(callback) {
49073             return function () {
49074                 return spread([this, all(arguments)], function (self, args) {
49075                     return callback.apply(self, args);
49076                 });
49077             };
49078         }
49079
49080         /**
49081          * sends a message to a value in a future turn
49082          * @param object* the recipient
49083          * @param op the name of the message operation, e.g., "when",
49084          * @param args further arguments to be forwarded to the operation
49085          * @returns result {Promise} a promise for the result of the operation
49086          */
49087         Q.dispatch = dispatch;
49088         function dispatch(object, op, args) {
49089             return Q(object).dispatch(op, args);
49090         }
49091
49092         Promise.prototype.dispatch = function (op, args) {
49093             var self = this;
49094             var deferred = defer();
49095             Q.nextTick(function () {
49096                 self.promiseDispatch(deferred.resolve, op, args);
49097             });
49098             return deferred.promise;
49099         };
49100
49101         /**
49102          * Gets the value of a property in a future turn.
49103          * @param object    promise or immediate reference for target object
49104          * @param name      name of property to get
49105          * @return promise for the property value
49106          */
49107         Q.get = function (object, key) {
49108             return Q(object).dispatch("get", [key]);
49109         };
49110
49111         Promise.prototype.get = function (key) {
49112             return this.dispatch("get", [key]);
49113         };
49114
49115         /**
49116          * Sets the value of a property in a future turn.
49117          * @param object    promise or immediate reference for object object
49118          * @param name      name of property to set
49119          * @param value     new value of property
49120          * @return promise for the return value
49121          */
49122         Q.set = function (object, key, value) {
49123             return Q(object).dispatch("set", [key, value]);
49124         };
49125
49126         Promise.prototype.set = function (key, value) {
49127             return this.dispatch("set", [key, value]);
49128         };
49129
49130         /**
49131          * Deletes a property in a future turn.
49132          * @param object    promise or immediate reference for target object
49133          * @param name      name of property to delete
49134          * @return promise for the return value
49135          */
49136         Q.del = // XXX legacy
49137         Q["delete"] = function (object, key) {
49138             return Q(object).dispatch("delete", [key]);
49139         };
49140
49141         Promise.prototype.del = // XXX legacy
49142         Promise.prototype["delete"] = function (key) {
49143             return this.dispatch("delete", [key]);
49144         };
49145
49146         /**
49147          * Invokes a method in a future turn.
49148          * @param object    promise or immediate reference for target object
49149          * @param name      name of method to invoke
49150          * @param value     a value to post, typically an array of
49151          *                  invocation arguments for promises that
49152          *                  are ultimately backed with `resolve` values,
49153          *                  as opposed to those backed with URLs
49154          *                  wherein the posted value can be any
49155          *                  JSON serializable object.
49156          * @return promise for the return value
49157          */
49158         // bound locally because it is used by other methods
49159         Q.mapply = // XXX As proposed by "Redsandro"
49160         Q.post = function (object, name, args) {
49161             return Q(object).dispatch("post", [name, args]);
49162         };
49163
49164         Promise.prototype.mapply = // XXX As proposed by "Redsandro"
49165         Promise.prototype.post = function (name, args) {
49166             return this.dispatch("post", [name, args]);
49167         };
49168
49169         /**
49170          * Invokes a method in a future turn.
49171          * @param object    promise or immediate reference for target object
49172          * @param name      name of method to invoke
49173          * @param ...args   array of invocation arguments
49174          * @return promise for the return value
49175          */
49176         Q.send = // XXX Mark Miller's proposed parlance
49177         Q.mcall = // XXX As proposed by "Redsandro"
49178         Q.invoke = function (object, name /*...args*/) {
49179             return Q(object).dispatch("post", [name, array_slice(arguments, 2)]);
49180         };
49181
49182         Promise.prototype.send = // XXX Mark Miller's proposed parlance
49183         Promise.prototype.mcall = // XXX As proposed by "Redsandro"
49184         Promise.prototype.invoke = function (name /*...args*/) {
49185             return this.dispatch("post", [name, array_slice(arguments, 1)]);
49186         };
49187
49188         /**
49189          * Applies the promised function in a future turn.
49190          * @param object    promise or immediate reference for target function
49191          * @param args      array of application arguments
49192          */
49193         Q.fapply = function (object, args) {
49194             return Q(object).dispatch("apply", [void 0, args]);
49195         };
49196
49197         Promise.prototype.fapply = function (args) {
49198             return this.dispatch("apply", [void 0, args]);
49199         };
49200
49201         /**
49202          * Calls the promised function in a future turn.
49203          * @param object    promise or immediate reference for target function
49204          * @param ...args   array of application arguments
49205          */
49206         Q["try"] =
49207         Q.fcall = function (object /* ...args*/) {
49208             return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]);
49209         };
49210
49211         Promise.prototype.fcall = function (/*...args*/) {
49212             return this.dispatch("apply", [void 0, array_slice(arguments)]);
49213         };
49214
49215         /**
49216          * Binds the promised function, transforming return values into a fulfilled
49217          * promise and thrown errors into a rejected one.
49218          * @param object    promise or immediate reference for target function
49219          * @param ...args   array of application arguments
49220          */
49221         Q.fbind = function (object /*...args*/) {
49222             var promise = Q(object);
49223             var args = array_slice(arguments, 1);
49224             return function fbound() {
49225                 return promise.dispatch("apply", [
49226                     this,
49227                     args.concat(array_slice(arguments))
49228                 ]);
49229             };
49230         };
49231         Promise.prototype.fbind = function (/*...args*/) {
49232             var promise = this;
49233             var args = array_slice(arguments);
49234             return function fbound() {
49235                 return promise.dispatch("apply", [
49236                     this,
49237                     args.concat(array_slice(arguments))
49238                 ]);
49239             };
49240         };
49241
49242         /**
49243          * Requests the names of the owned properties of a promised
49244          * object in a future turn.
49245          * @param object    promise or immediate reference for target object
49246          * @return promise for the keys of the eventually settled object
49247          */
49248         Q.keys = function (object) {
49249             return Q(object).dispatch("keys", []);
49250         };
49251
49252         Promise.prototype.keys = function () {
49253             return this.dispatch("keys", []);
49254         };
49255
49256         /**
49257          * Turns an array of promises into a promise for an array.  If any of
49258          * the promises gets rejected, the whole array is rejected immediately.
49259          * @param {Array*} an array (or promise for an array) of values (or
49260          * promises for values)
49261          * @returns a promise for an array of the corresponding values
49262          */
49263         // By Mark Miller
49264         // http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled
49265         Q.all = all;
49266         function all(promises) {
49267             return when(promises, function (promises) {
49268                 var pendingCount = 0;
49269                 var deferred = defer();
49270                 array_reduce(promises, function (undefined$1, promise, index) {
49271                     var snapshot;
49272                     if (
49273                         isPromise(promise) &&
49274                         (snapshot = promise.inspect()).state === "fulfilled"
49275                     ) {
49276                         promises[index] = snapshot.value;
49277                     } else {
49278                         ++pendingCount;
49279                         when(
49280                             promise,
49281                             function (value) {
49282                                 promises[index] = value;
49283                                 if (--pendingCount === 0) {
49284                                     deferred.resolve(promises);
49285                                 }
49286                             },
49287                             deferred.reject,
49288                             function (progress) {
49289                                 deferred.notify({ index: index, value: progress });
49290                             }
49291                         );
49292                     }
49293                 }, void 0);
49294                 if (pendingCount === 0) {
49295                     deferred.resolve(promises);
49296                 }
49297                 return deferred.promise;
49298             });
49299         }
49300
49301         Promise.prototype.all = function () {
49302             return all(this);
49303         };
49304
49305         /**
49306          * Returns the first resolved promise of an array. Prior rejected promises are
49307          * ignored.  Rejects only if all promises are rejected.
49308          * @param {Array*} an array containing values or promises for values
49309          * @returns a promise fulfilled with the value of the first resolved promise,
49310          * or a rejected promise if all promises are rejected.
49311          */
49312         Q.any = any;
49313
49314         function any(promises) {
49315             if (promises.length === 0) {
49316                 return Q.resolve();
49317             }
49318
49319             var deferred = Q.defer();
49320             var pendingCount = 0;
49321             array_reduce(promises, function (prev, current, index) {
49322                 var promise = promises[index];
49323
49324                 pendingCount++;
49325
49326                 when(promise, onFulfilled, onRejected, onProgress);
49327                 function onFulfilled(result) {
49328                     deferred.resolve(result);
49329                 }
49330                 function onRejected(err) {
49331                     pendingCount--;
49332                     if (pendingCount === 0) {
49333                         var rejection = err || new Error("" + err);
49334
49335                         rejection.message = ("Q can't get fulfillment value from any promise, all " +
49336                             "promises were rejected. Last error message: " + rejection.message);
49337
49338                         deferred.reject(rejection);
49339                     }
49340                 }
49341                 function onProgress(progress) {
49342                     deferred.notify({
49343                         index: index,
49344                         value: progress
49345                     });
49346                 }
49347             }, undefined);
49348
49349             return deferred.promise;
49350         }
49351
49352         Promise.prototype.any = function () {
49353             return any(this);
49354         };
49355
49356         /**
49357          * Waits for all promises to be settled, either fulfilled or
49358          * rejected.  This is distinct from `all` since that would stop
49359          * waiting at the first rejection.  The promise returned by
49360          * `allResolved` will never be rejected.
49361          * @param promises a promise for an array (or an array) of promises
49362          * (or values)
49363          * @return a promise for an array of promises
49364          */
49365         Q.allResolved = deprecate(allResolved, "allResolved", "allSettled");
49366         function allResolved(promises) {
49367             return when(promises, function (promises) {
49368                 promises = array_map(promises, Q);
49369                 return when(all(array_map(promises, function (promise) {
49370                     return when(promise, noop, noop);
49371                 })), function () {
49372                     return promises;
49373                 });
49374             });
49375         }
49376
49377         Promise.prototype.allResolved = function () {
49378             return allResolved(this);
49379         };
49380
49381         /**
49382          * @see Promise#allSettled
49383          */
49384         Q.allSettled = allSettled;
49385         function allSettled(promises) {
49386             return Q(promises).allSettled();
49387         }
49388
49389         /**
49390          * Turns an array of promises into a promise for an array of their states (as
49391          * returned by `inspect`) when they have all settled.
49392          * @param {Array[Any*]} values an array (or promise for an array) of values (or
49393          * promises for values)
49394          * @returns {Array[State]} an array of states for the respective values.
49395          */
49396         Promise.prototype.allSettled = function () {
49397             return this.then(function (promises) {
49398                 return all(array_map(promises, function (promise) {
49399                     promise = Q(promise);
49400                     function regardless() {
49401                         return promise.inspect();
49402                     }
49403                     return promise.then(regardless, regardless);
49404                 }));
49405             });
49406         };
49407
49408         /**
49409          * Captures the failure of a promise, giving an oportunity to recover
49410          * with a callback.  If the given promise is fulfilled, the returned
49411          * promise is fulfilled.
49412          * @param {Any*} promise for something
49413          * @param {Function} callback to fulfill the returned promise if the
49414          * given promise is rejected
49415          * @returns a promise for the return value of the callback
49416          */
49417         Q.fail = // XXX legacy
49418         Q["catch"] = function (object, rejected) {
49419             return Q(object).then(void 0, rejected);
49420         };
49421
49422         Promise.prototype.fail = // XXX legacy
49423         Promise.prototype["catch"] = function (rejected) {
49424             return this.then(void 0, rejected);
49425         };
49426
49427         /**
49428          * Attaches a listener that can respond to progress notifications from a
49429          * promise's originating deferred. This listener receives the exact arguments
49430          * passed to ``deferred.notify``.
49431          * @param {Any*} promise for something
49432          * @param {Function} callback to receive any progress notifications
49433          * @returns the given promise, unchanged
49434          */
49435         Q.progress = progress;
49436         function progress(object, progressed) {
49437             return Q(object).then(void 0, void 0, progressed);
49438         }
49439
49440         Promise.prototype.progress = function (progressed) {
49441             return this.then(void 0, void 0, progressed);
49442         };
49443
49444         /**
49445          * Provides an opportunity to observe the settling of a promise,
49446          * regardless of whether the promise is fulfilled or rejected.  Forwards
49447          * the resolution to the returned promise when the callback is done.
49448          * The callback can return a promise to defer completion.
49449          * @param {Any*} promise
49450          * @param {Function} callback to observe the resolution of the given
49451          * promise, takes no arguments.
49452          * @returns a promise for the resolution of the given promise when
49453          * ``fin`` is done.
49454          */
49455         Q.fin = // XXX legacy
49456         Q["finally"] = function (object, callback) {
49457             return Q(object)["finally"](callback);
49458         };
49459
49460         Promise.prototype.fin = // XXX legacy
49461         Promise.prototype["finally"] = function (callback) {
49462             if (!callback || typeof callback.apply !== "function") {
49463                 throw new Error("Q can't apply finally callback");
49464             }
49465             callback = Q(callback);
49466             return this.then(function (value) {
49467                 return callback.fcall().then(function () {
49468                     return value;
49469                 });
49470             }, function (reason) {
49471                 // TODO attempt to recycle the rejection with "this".
49472                 return callback.fcall().then(function () {
49473                     throw reason;
49474                 });
49475             });
49476         };
49477
49478         /**
49479          * Terminates a chain of promises, forcing rejections to be
49480          * thrown as exceptions.
49481          * @param {Any*} promise at the end of a chain of promises
49482          * @returns nothing
49483          */
49484         Q.done = function (object, fulfilled, rejected, progress) {
49485             return Q(object).done(fulfilled, rejected, progress);
49486         };
49487
49488         Promise.prototype.done = function (fulfilled, rejected, progress) {
49489             var onUnhandledError = function (error) {
49490                 // forward to a future turn so that ``when``
49491                 // does not catch it and turn it into a rejection.
49492                 Q.nextTick(function () {
49493                     makeStackTraceLong(error, promise);
49494                     if (Q.onerror) {
49495                         Q.onerror(error);
49496                     } else {
49497                         throw error;
49498                     }
49499                 });
49500             };
49501
49502             // Avoid unnecessary `nextTick`ing via an unnecessary `when`.
49503             var promise = fulfilled || rejected || progress ?
49504                 this.then(fulfilled, rejected, progress) :
49505                 this;
49506
49507             if (typeof process === "object" && process && process.domain) {
49508                 onUnhandledError = process.domain.bind(onUnhandledError);
49509             }
49510
49511             promise.then(void 0, onUnhandledError);
49512         };
49513
49514         /**
49515          * Causes a promise to be rejected if it does not get fulfilled before
49516          * some milliseconds time out.
49517          * @param {Any*} promise
49518          * @param {Number} milliseconds timeout
49519          * @param {Any*} custom error message or Error object (optional)
49520          * @returns a promise for the resolution of the given promise if it is
49521          * fulfilled before the timeout, otherwise rejected.
49522          */
49523         Q.timeout = function (object, ms, error) {
49524             return Q(object).timeout(ms, error);
49525         };
49526
49527         Promise.prototype.timeout = function (ms, error) {
49528             var deferred = defer();
49529             var timeoutId = setTimeout(function () {
49530                 if (!error || "string" === typeof error) {
49531                     error = new Error(error || "Timed out after " + ms + " ms");
49532                     error.code = "ETIMEDOUT";
49533                 }
49534                 deferred.reject(error);
49535             }, ms);
49536
49537             this.then(function (value) {
49538                 clearTimeout(timeoutId);
49539                 deferred.resolve(value);
49540             }, function (exception) {
49541                 clearTimeout(timeoutId);
49542                 deferred.reject(exception);
49543             }, deferred.notify);
49544
49545             return deferred.promise;
49546         };
49547
49548         /**
49549          * Returns a promise for the given value (or promised value), some
49550          * milliseconds after it resolved. Passes rejections immediately.
49551          * @param {Any*} promise
49552          * @param {Number} milliseconds
49553          * @returns a promise for the resolution of the given promise after milliseconds
49554          * time has elapsed since the resolution of the given promise.
49555          * If the given promise rejects, that is passed immediately.
49556          */
49557         Q.delay = function (object, timeout) {
49558             if (timeout === void 0) {
49559                 timeout = object;
49560                 object = void 0;
49561             }
49562             return Q(object).delay(timeout);
49563         };
49564
49565         Promise.prototype.delay = function (timeout) {
49566             return this.then(function (value) {
49567                 var deferred = defer();
49568                 setTimeout(function () {
49569                     deferred.resolve(value);
49570                 }, timeout);
49571                 return deferred.promise;
49572             });
49573         };
49574
49575         /**
49576          * Passes a continuation to a Node function, which is called with the given
49577          * arguments provided as an array, and returns a promise.
49578          *
49579          *      Q.nfapply(FS.readFile, [__filename])
49580          *      .then(function (content) {
49581          *      })
49582          *
49583          */
49584         Q.nfapply = function (callback, args) {
49585             return Q(callback).nfapply(args);
49586         };
49587
49588         Promise.prototype.nfapply = function (args) {
49589             var deferred = defer();
49590             var nodeArgs = array_slice(args);
49591             nodeArgs.push(deferred.makeNodeResolver());
49592             this.fapply(nodeArgs).fail(deferred.reject);
49593             return deferred.promise;
49594         };
49595
49596         /**
49597          * Passes a continuation to a Node function, which is called with the given
49598          * arguments provided individually, and returns a promise.
49599          * @example
49600          * Q.nfcall(FS.readFile, __filename)
49601          * .then(function (content) {
49602          * })
49603          *
49604          */
49605         Q.nfcall = function (callback /*...args*/) {
49606             var args = array_slice(arguments, 1);
49607             return Q(callback).nfapply(args);
49608         };
49609
49610         Promise.prototype.nfcall = function (/*...args*/) {
49611             var nodeArgs = array_slice(arguments);
49612             var deferred = defer();
49613             nodeArgs.push(deferred.makeNodeResolver());
49614             this.fapply(nodeArgs).fail(deferred.reject);
49615             return deferred.promise;
49616         };
49617
49618         /**
49619          * Wraps a NodeJS continuation passing function and returns an equivalent
49620          * version that returns a promise.
49621          * @example
49622          * Q.nfbind(FS.readFile, __filename)("utf-8")
49623          * .then(console.log)
49624          * .done()
49625          */
49626         Q.nfbind =
49627         Q.denodeify = function (callback /*...args*/) {
49628             if (callback === undefined) {
49629                 throw new Error("Q can't wrap an undefined function");
49630             }
49631             var baseArgs = array_slice(arguments, 1);
49632             return function () {
49633                 var nodeArgs = baseArgs.concat(array_slice(arguments));
49634                 var deferred = defer();
49635                 nodeArgs.push(deferred.makeNodeResolver());
49636                 Q(callback).fapply(nodeArgs).fail(deferred.reject);
49637                 return deferred.promise;
49638             };
49639         };
49640
49641         Promise.prototype.nfbind =
49642         Promise.prototype.denodeify = function (/*...args*/) {
49643             var args = array_slice(arguments);
49644             args.unshift(this);
49645             return Q.denodeify.apply(void 0, args);
49646         };
49647
49648         Q.nbind = function (callback, thisp /*...args*/) {
49649             var baseArgs = array_slice(arguments, 2);
49650             return function () {
49651                 var nodeArgs = baseArgs.concat(array_slice(arguments));
49652                 var deferred = defer();
49653                 nodeArgs.push(deferred.makeNodeResolver());
49654                 function bound() {
49655                     return callback.apply(thisp, arguments);
49656                 }
49657                 Q(bound).fapply(nodeArgs).fail(deferred.reject);
49658                 return deferred.promise;
49659             };
49660         };
49661
49662         Promise.prototype.nbind = function (/*thisp, ...args*/) {
49663             var args = array_slice(arguments, 0);
49664             args.unshift(this);
49665             return Q.nbind.apply(void 0, args);
49666         };
49667
49668         /**
49669          * Calls a method of a Node-style object that accepts a Node-style
49670          * callback with a given array of arguments, plus a provided callback.
49671          * @param object an object that has the named method
49672          * @param {String} name name of the method of object
49673          * @param {Array} args arguments to pass to the method; the callback
49674          * will be provided by Q and appended to these arguments.
49675          * @returns a promise for the value or error
49676          */
49677         Q.nmapply = // XXX As proposed by "Redsandro"
49678         Q.npost = function (object, name, args) {
49679             return Q(object).npost(name, args);
49680         };
49681
49682         Promise.prototype.nmapply = // XXX As proposed by "Redsandro"
49683         Promise.prototype.npost = function (name, args) {
49684             var nodeArgs = array_slice(args || []);
49685             var deferred = defer();
49686             nodeArgs.push(deferred.makeNodeResolver());
49687             this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49688             return deferred.promise;
49689         };
49690
49691         /**
49692          * Calls a method of a Node-style object that accepts a Node-style
49693          * callback, forwarding the given variadic arguments, plus a provided
49694          * callback argument.
49695          * @param object an object that has the named method
49696          * @param {String} name name of the method of object
49697          * @param ...args arguments to pass to the method; the callback will
49698          * be provided by Q and appended to these arguments.
49699          * @returns a promise for the value or error
49700          */
49701         Q.nsend = // XXX Based on Mark Miller's proposed "send"
49702         Q.nmcall = // XXX Based on "Redsandro's" proposal
49703         Q.ninvoke = function (object, name /*...args*/) {
49704             var nodeArgs = array_slice(arguments, 2);
49705             var deferred = defer();
49706             nodeArgs.push(deferred.makeNodeResolver());
49707             Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49708             return deferred.promise;
49709         };
49710
49711         Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send"
49712         Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal
49713         Promise.prototype.ninvoke = function (name /*...args*/) {
49714             var nodeArgs = array_slice(arguments, 1);
49715             var deferred = defer();
49716             nodeArgs.push(deferred.makeNodeResolver());
49717             this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49718             return deferred.promise;
49719         };
49720
49721         /**
49722          * If a function would like to support both Node continuation-passing-style and
49723          * promise-returning-style, it can end its internal promise chain with
49724          * `nodeify(nodeback)`, forwarding the optional nodeback argument.  If the user
49725          * elects to use a nodeback, the result will be sent there.  If they do not
49726          * pass a nodeback, they will receive the result promise.
49727          * @param object a result (or a promise for a result)
49728          * @param {Function} nodeback a Node.js-style callback
49729          * @returns either the promise or nothing
49730          */
49731         Q.nodeify = nodeify;
49732         function nodeify(object, nodeback) {
49733             return Q(object).nodeify(nodeback);
49734         }
49735
49736         Promise.prototype.nodeify = function (nodeback) {
49737             if (nodeback) {
49738                 this.then(function (value) {
49739                     Q.nextTick(function () {
49740                         nodeback(null, value);
49741                     });
49742                 }, function (error) {
49743                     Q.nextTick(function () {
49744                         nodeback(error);
49745                     });
49746                 });
49747             } else {
49748                 return this;
49749             }
49750         };
49751
49752         Q.noConflict = function() {
49753             throw new Error("Q.noConflict only works when Q is used as a global");
49754         };
49755
49756         // All code before this point will be filtered from stack traces.
49757         var qEndingLine = captureLine();
49758
49759         return Q;
49760
49761         });
49762         });
49763
49764         var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
49765         var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
49766         var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
49767         var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
49768         var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
49769         var maxResults$2 = 2000;
49770         var tileZoom$2 = 16.5;
49771         var tiler$5 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
49772         var dispatch$6 = dispatch('loadedBubbles', 'viewerChanged');
49773         var minHfov = 10;         // zoom in degrees:  20, 10, 5
49774         var maxHfov = 90;         // zoom out degrees
49775         var defaultHfov = 45;
49776
49777         var _hires = false;
49778         var _resolution = 512;    // higher numbers are slower - 512, 1024, 2048, 4096
49779         var _currScene = 0;
49780         var _ssCache;
49781         var _pannellumViewer;
49782         var _sceneOptions;
49783         var _dataUrlArray = [];
49784
49785
49786         /**
49787          * abortRequest().
49788          */
49789         function abortRequest$5(i) {
49790             i.abort();
49791         }
49792
49793
49794         /**
49795          * localeTimeStamp().
49796          */
49797         function localeTimestamp(s) {
49798             if (!s) return null;
49799             var detected = utilDetect();
49800             var options = { day: 'numeric', month: 'short', year: 'numeric' };
49801             var d = new Date(s);
49802             if (isNaN(d.getTime())) return null;
49803             return d.toLocaleString(detected.locale, options);
49804         }
49805
49806
49807         /**
49808          * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
49809          */
49810         function loadTiles$2(which, url, projection, margin) {
49811             var tiles = tiler$5.margin(margin).getTiles(projection);
49812
49813             // abort inflight requests that are no longer needed
49814             var cache = _ssCache[which];
49815             Object.keys(cache.inflight).forEach(function(k) {
49816                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
49817                 if (!wanted) {
49818                     abortRequest$5(cache.inflight[k]);
49819                     delete cache.inflight[k];
49820                 }
49821             });
49822
49823             tiles.forEach(function (tile) {
49824                loadNextTilePage$2(which, url, tile);
49825             });
49826         }
49827
49828         /**
49829          * loadNextTilePage() load data for the next tile page in line.
49830          */
49831         function loadNextTilePage$2(which, url, tile) {
49832             var cache = _ssCache[which];
49833             var nextPage = cache.nextPage[tile.id] || 0;
49834             var id = tile.id + ',' + String(nextPage);
49835             if (cache.loaded[id] || cache.inflight[id]) return;
49836
49837             cache.inflight[id] = getBubbles(url, tile, function(bubbles) {
49838                 cache.loaded[id] = true;
49839                 delete cache.inflight[id];
49840                 if (!bubbles) return;
49841
49842                 // [].shift() removes the first element, some statistics info, not a bubble point
49843                 bubbles.shift();
49844
49845                 var features = bubbles.map(function(bubble) {
49846                     if (cache.points[bubble.id]) return null;  // skip duplicates
49847
49848                     var loc = [bubble.lo, bubble.la];
49849                     var d = {
49850                         loc: loc,
49851                         key: bubble.id,
49852                         ca: bubble.he,
49853                         captured_at: bubble.cd,
49854                         captured_by: 'microsoft',
49855                         // nbn: bubble.nbn,
49856                         // pbn: bubble.pbn,
49857                         // ad: bubble.ad,
49858                         // rn: bubble.rn,
49859                         pr: bubble.pr,  // previous
49860                         ne: bubble.ne,  // next
49861                         pano: true,
49862                         sequenceKey: null
49863                     };
49864
49865                     cache.points[bubble.id] = d;
49866
49867                     // a sequence starts here
49868                     if (bubble.pr === undefined) {
49869                         cache.leaders.push(bubble.id);
49870                     }
49871
49872                     return {
49873                         minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
49874                     };
49875
49876                 }).filter(Boolean);
49877
49878                 cache.rtree.load(features);
49879
49880                 connectSequences();
49881
49882                 if (which === 'bubbles') {
49883                     dispatch$6.call('loadedBubbles');
49884                 }
49885             });
49886         }
49887
49888
49889         // call this sometimes to connect the bubbles into sequences
49890         function connectSequences() {
49891             var cache = _ssCache.bubbles;
49892             var keepLeaders = [];
49893
49894             for (var i = 0; i < cache.leaders.length; i++) {
49895                 var bubble = cache.points[cache.leaders[i]];
49896                 var seen = {};
49897
49898                 // try to make a sequence.. use the key of the leader bubble.
49899                 var sequence = { key: bubble.key, bubbles: [] };
49900                 var complete = false;
49901
49902                 do {
49903                     sequence.bubbles.push(bubble);
49904                     seen[bubble.key] = true;
49905
49906                     if (bubble.ne === undefined) {
49907                         complete = true;
49908                     } else {
49909                         bubble = cache.points[bubble.ne];  // advance to next
49910                     }
49911                 } while (bubble && !seen[bubble.key] && !complete);
49912
49913
49914                 if (complete) {
49915                     _ssCache.sequences[sequence.key] = sequence;
49916
49917                     // assign bubbles to the sequence
49918                     for (var j = 0; j < sequence.bubbles.length; j++) {
49919                         sequence.bubbles[j].sequenceKey = sequence.key;
49920                     }
49921
49922                     // create a GeoJSON LineString
49923                     sequence.geojson = {
49924                         type: 'LineString',
49925                         properties: { key: sequence.key },
49926                         coordinates: sequence.bubbles.map(function (d) { return d.loc; })
49927                     };
49928
49929                 } else {
49930                     keepLeaders.push(cache.leaders[i]);
49931                 }
49932             }
49933
49934             // couldn't complete these, save for later
49935             cache.leaders = keepLeaders;
49936         }
49937
49938         /**
49939          * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
49940          */
49941         function getBubbles(url, tile, callback) {
49942             var rect = tile.extent.rectangle();
49943             var urlForRequest = url + utilQsString({
49944                 n: rect[3],
49945                 s: rect[1],
49946                 e: rect[2],
49947                 w: rect[0],
49948                 c: maxResults$2,
49949                 appkey: bubbleAppKey,
49950                 jsCallback: '{callback}'
49951             });
49952
49953             return jsonpRequest(urlForRequest, function (data) {
49954                 if (!data || data.error) {
49955                     callback(null);
49956                 } else {
49957                     callback(data);
49958                 }
49959             });
49960         }
49961
49962
49963         // partition viewport into higher zoom tiles
49964         function partitionViewport$2(projection) {
49965             var z = geoScaleToZoom(projection.scale());
49966             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
49967             var tiler = utilTiler().zoomExtent([z2, z2]);
49968
49969             return tiler.getTiles(projection)
49970                 .map(function(tile) { return tile.extent; });
49971         }
49972
49973
49974         // no more than `limit` results per partition.
49975         function searchLimited$2(limit, projection, rtree) {
49976             limit = limit || 5;
49977
49978             return partitionViewport$2(projection)
49979                 .reduce(function(result, extent) {
49980                     var found = rtree.search(extent.bbox())
49981                         .slice(0, limit)
49982                         .map(function(d) { return d.data; });
49983
49984                     return (found.length ? result.concat(found) : result);
49985                 }, []);
49986         }
49987
49988
49989         /**
49990          * getImage()
49991          */
49992         function getImage(imgInfo) {
49993             var response = q.defer();
49994             var img = new Image();
49995
49996             img.onload = function() {
49997                 var canvas = document.getElementById('canvas' + imgInfo.face);
49998                 var ctx = canvas.getContext('2d');
49999                 ctx.drawImage(img, imgInfo.x, imgInfo.y);
50000                 response.resolve({imgInfo:imgInfo, status: 'ok'});
50001             };
50002             img.onerror = function() {
50003                 response.resolve({data: imgInfo, status: 'error'});
50004             };
50005             img.setAttribute('crossorigin', '');
50006             img.src = imgInfo.url;
50007
50008             return response.promise;
50009         }
50010
50011
50012         /**
50013          * loadCanvas()
50014          */
50015         function loadCanvas(imgInfoGroup) {
50016             var response = q.defer();
50017             var getImagePromises = imgInfoGroup.map(function(imgInfo) {
50018                 return getImage(imgInfo);
50019             });
50020
50021             q.all(getImagePromises).then(function(data) {
50022                 var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
50023                 switch (data[0].imgInfo.face) {
50024                     case '01':
50025                         _dataUrlArray[0] = canvas.toDataURL('image/jpeg', 1.0);
50026                         break;
50027                     case '02':
50028                         _dataUrlArray[1] = canvas.toDataURL('image/jpeg', 1.0);
50029                         break;
50030                     case '03':
50031                         _dataUrlArray[2] = canvas.toDataURL('image/jpeg', 1.0);
50032                         break;
50033                     case '10':
50034                         _dataUrlArray[3] = canvas.toDataURL('image/jpeg', 1.0);
50035                         break;
50036                     case '11':
50037                         _dataUrlArray[4] = canvas.toDataURL('image/jpeg', 1.0);
50038                         break;
50039                     case '12':
50040                         _dataUrlArray[5] = canvas.toDataURL('image/jpeg', 1.0);
50041                         break;
50042                 }
50043                 response.resolve({status:'loadCanvas for face ' + data[0].imgInfo.face + 'ok'});
50044             });
50045
50046             return response.promise;
50047         }
50048
50049
50050         function setupCanvas(selection, reset) {
50051             if (reset) {
50052                 selection.selectAll('#divForCanvasWork')
50053                     .remove();
50054             }
50055
50056             // Add the Streetside working canvases. These are used for 'stitching', or combining,
50057             // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
50058             selection.selectAll('#divForCanvasWork')
50059                 .data([0])
50060                 .enter()
50061                 .append('div')
50062                 .attr('id', 'divForCanvasWork')
50063                 .attr('display', 'none')
50064                 .selectAll('canvas')
50065                 .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
50066                 .enter()
50067                 .append('canvas')
50068                 .attr('id', function(d) { return d; })
50069                 .attr('width', _resolution)
50070                 .attr('height', _resolution);
50071         }
50072
50073
50074         /**
50075          * processFaces()
50076          */
50077         function processFaces(imgFaceInfoGroups) {
50078             var response = q.defer();
50079             var loadCanvasPromises = imgFaceInfoGroups.map(function(faceImgGroup) {
50080                 return loadCanvas(faceImgGroup);
50081             });
50082
50083             q.all(loadCanvasPromises).then(function() {
50084                 response.resolve({status: 'processFaces done'});
50085             });
50086
50087             return response.promise;
50088         }
50089
50090
50091
50092         function qkToXY(qk) {
50093             var x = 0;
50094             var y = 0;
50095             var scale = 256;
50096             for (var i = qk.length; i > 0; i--) {
50097                 var key = qk[i-1];
50098                 x += (+(key === '1' || key === '3')) * scale;
50099                 y += (+(key === '2' || key === '3')) * scale;
50100                 scale *= 2;
50101             }
50102             return [x, y];
50103         }
50104
50105
50106         function getQuadKeys() {
50107             var dim = _resolution / 256;
50108             var quadKeys;
50109
50110             if (dim === 16) {
50111                 quadKeys = [
50112                     '0000','0001','0010','0011','0100','0101','0110','0111',  '1000','1001','1010','1011','1100','1101','1110','1111',
50113                     '0002','0003','0012','0013','0102','0103','0112','0113',  '1002','1003','1012','1013','1102','1103','1112','1113',
50114                     '0020','0021','0030','0031','0120','0121','0130','0131',  '1020','1021','1030','1031','1120','1121','1130','1131',
50115                     '0022','0023','0032','0033','0122','0123','0132','0133',  '1022','1023','1032','1033','1122','1123','1132','1133',
50116                     '0200','0201','0210','0211','0300','0301','0310','0311',  '1200','1201','1210','1211','1300','1301','1310','1311',
50117                     '0202','0203','0212','0213','0302','0303','0312','0313',  '1202','1203','1212','1213','1302','1303','1312','1313',
50118                     '0220','0221','0230','0231','0320','0321','0330','0331',  '1220','1221','1230','1231','1320','1321','1330','1331',
50119                     '0222','0223','0232','0233','0322','0323','0332','0333',  '1222','1223','1232','1233','1322','1323','1332','1333',
50120
50121                     '2000','2001','2010','2011','2100','2101','2110','2111',  '3000','3001','3010','3011','3100','3101','3110','3111',
50122                     '2002','2003','2012','2013','2102','2103','2112','2113',  '3002','3003','3012','3013','3102','3103','3112','3113',
50123                     '2020','2021','2030','2031','2120','2121','2130','2131',  '3020','3021','3030','3031','3120','3121','3130','3131',
50124                     '2022','2023','2032','2033','2122','2123','2132','2133',  '3022','3023','3032','3033','3122','3123','3132','3133',
50125                     '2200','2201','2210','2211','2300','2301','2310','2311',  '3200','3201','3210','3211','3300','3301','3310','3311',
50126                     '2202','2203','2212','2213','2302','2303','2312','2313',  '3202','3203','3212','3213','3302','3303','3312','3313',
50127                     '2220','2221','2230','2231','2320','2321','2330','2331',  '3220','3221','3230','3231','3320','3321','3330','3331',
50128                     '2222','2223','2232','2233','2322','2323','2332','2333',  '3222','3223','3232','3233','3322','3323','3332','3333'
50129                 ];
50130
50131             } else if (dim === 8) {
50132                 quadKeys = [
50133                     '000','001','010','011',  '100','101','110','111',
50134                     '002','003','012','013',  '102','103','112','113',
50135                     '020','021','030','031',  '120','121','130','131',
50136                     '022','023','032','033',  '122','123','132','133',
50137
50138                     '200','201','210','211',  '300','301','310','311',
50139                     '202','203','212','213',  '302','303','312','313',
50140                     '220','221','230','231',  '320','321','330','331',
50141                     '222','223','232','233',  '322','323','332','333'
50142                 ];
50143
50144             } else if (dim === 4) {
50145                 quadKeys = [
50146                     '00','01',  '10','11',
50147                     '02','03',  '12','13',
50148
50149                     '20','21',  '30','31',
50150                     '22','23',  '32','33'
50151                 ];
50152
50153             } else {  // dim === 2
50154                 quadKeys = [
50155                     '0', '1',
50156                     '2', '3'
50157                 ];
50158             }
50159
50160             return quadKeys;
50161         }
50162
50163
50164
50165         var serviceStreetside = {
50166             /**
50167              * init() initialize streetside.
50168              */
50169             init: function () {
50170                 if (!_ssCache) {
50171                     this.reset();
50172                 }
50173
50174                 this.event = utilRebind(this, dispatch$6, 'on');
50175             },
50176
50177             /**
50178              * reset() reset the cache.
50179              */
50180             reset: function () {
50181                 if (_ssCache) {
50182                     Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$5);
50183                 }
50184
50185                 _ssCache = {
50186                     bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1(), points: {}, leaders: [] },
50187                     sequences: {}
50188                 };
50189             },
50190
50191             /**
50192              * bubbles()
50193              */
50194             bubbles: function (projection) {
50195                 var limit = 5;
50196                 return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
50197             },
50198
50199
50200             sequences: function(projection) {
50201                 var viewport = projection.clipExtent();
50202                 var min = [viewport[0][0], viewport[1][1]];
50203                 var max = [viewport[1][0], viewport[0][1]];
50204                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
50205                 var seen = {};
50206                 var results = [];
50207
50208                 // all sequences for bubbles in viewport
50209                 _ssCache.bubbles.rtree.search(bbox)
50210                     .forEach(function(d) {
50211                         var key = d.data.sequenceKey;
50212                         if (key && !seen[key]) {
50213                             seen[key] = true;
50214                             results.push(_ssCache.sequences[key].geojson);
50215                         }
50216                     });
50217
50218                 return results;
50219             },
50220
50221
50222             /**
50223              * loadBubbles()
50224              */
50225             loadBubbles: function (projection, margin) {
50226                 // by default: request 2 nearby tiles so we can connect sequences.
50227                 if (margin === undefined) margin = 2;
50228
50229                 loadTiles$2('bubbles', bubbleApi, projection, margin);
50230             },
50231
50232
50233             viewer: function() {
50234                 return _pannellumViewer;
50235             },
50236
50237
50238             initViewer: function () {
50239                 if (!window.pannellum) return;
50240                 if (_pannellumViewer) return;
50241
50242                 var sceneID = ++_currScene + '';
50243                 var options = {
50244                     'default': { firstScene: sceneID },
50245                     scenes: {}
50246                 };
50247                 options.scenes[sceneID] = _sceneOptions;
50248
50249                 _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
50250
50251                 _pannellumViewer
50252                     .on('mousedown', function() {
50253                         d3_select(window).on('mousemove.pannellum', function() {
50254                             dispatch$6.call('viewerChanged');
50255                         });
50256                     })
50257                     .on('mouseup', function() {
50258                         d3_select(window).on('mousemove.pannellum', null);
50259                         // continue dispatching events for a few seconds, in case viewer has inertia.
50260                         var t = timer(function(elapsed) {
50261                             dispatch$6.call('viewerChanged');
50262                             if (elapsed > 2000) {
50263                                 t.stop();
50264                             }
50265                         });
50266                     });
50267             },
50268
50269
50270             /**
50271              * loadViewer() create the streeside viewer.
50272              */
50273             loadViewer: function (context) {
50274                 var that = this;
50275
50276                 // create ms-wrapper, a photo wrapper class
50277                 var wrap = d3_select('#photoviewer').selectAll('.ms-wrapper')
50278                     .data([0]);
50279
50280                 // inject ms-wrapper into the photoviewer div
50281                 // (used by all to house each custom photo viewer)
50282                 var wrapEnter = wrap.enter()
50283                     .append('div')
50284                     .attr('id', 'ms')
50285                     .attr('class', 'photo-wrapper ms-wrapper')
50286                     .classed('hide', true);
50287
50288                 // inject div to support streetside viewer (pannellum) and attribution line
50289                 wrapEnter
50290                     .append('div')
50291                     .attr('id', 'viewer-streetside')
50292                     .append('div')
50293                     .attr('class', 'photo-attribution fillD');
50294
50295                 var controlsEnter = wrapEnter
50296                     .append('div')
50297                     .attr('class', 'photo-controls-wrap')
50298                     .append('div')
50299                     .attr('class', 'photo-controls');
50300
50301                 controlsEnter
50302                     .append('button')
50303                     .on('click.back', step(-1))
50304                     .text('◄');
50305
50306                 controlsEnter
50307                     .append('button')
50308                     .on('click.forward', step(1))
50309                     .text('►');
50310
50311
50312                 // create working canvas for stitching together images
50313                 wrap = wrap
50314                     .merge(wrapEnter)
50315                     .call(setupCanvas, true);
50316
50317                 // load streetside pannellum viewer css
50318                 d3_select('head').selectAll('#streetside-viewercss')
50319                     .data([0])
50320                     .enter()
50321                     .append('link')
50322                     .attr('id', 'streetside-viewercss')
50323                     .attr('rel', 'stylesheet')
50324                     .attr('href', context.asset(pannellumViewerCSS));
50325
50326                 // load streetside pannellum viewer js
50327                 d3_select('head').selectAll('#streetside-viewerjs')
50328                     .data([0])
50329                     .enter()
50330                     .append('script')
50331                     .attr('id', 'streetside-viewerjs')
50332                     .attr('src', context.asset(pannellumViewerJS));
50333
50334
50335                 // Register viewer resize handler
50336                 context.ui().photoviewer.on('resize.streetside', function() {
50337                     if (_pannellumViewer) {
50338                         _pannellumViewer.resize();
50339                     }
50340                 });
50341
50342
50343                 function step(stepBy) {
50344                     return function() {
50345                         var viewer = d3_select('#photoviewer');
50346                         var selected = viewer.empty() ? undefined : viewer.datum();
50347                         if (!selected) return;
50348
50349                         var nextID = (stepBy === 1 ? selected.ne : selected.pr);
50350                         var yaw = _pannellumViewer.getYaw();
50351                         var ca = selected.ca + yaw;
50352                         var origin = selected.loc;
50353
50354                         // construct a search trapezoid pointing out from current bubble
50355                         var meters = 35;
50356                         var p1 = [
50357                             origin[0] + geoMetersToLon(meters / 5, origin[1]),
50358                             origin[1]
50359                         ];
50360                         var p2 = [
50361                             origin[0] + geoMetersToLon(meters / 2, origin[1]),
50362                             origin[1] + geoMetersToLat(meters)
50363                         ];
50364                         var p3 = [
50365                             origin[0] - geoMetersToLon(meters / 2, origin[1]),
50366                             origin[1] + geoMetersToLat(meters)
50367                         ];
50368                         var p4 = [
50369                             origin[0] - geoMetersToLon(meters / 5, origin[1]),
50370                             origin[1]
50371                         ];
50372
50373                         var poly = [p1, p2, p3, p4, p1];
50374
50375                         // rotate it to face forward/backward
50376                         var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
50377                         poly = geoRotate(poly, -angle, origin);
50378
50379                         var extent = poly.reduce(function(extent, point) {
50380                             return extent.extend(geoExtent(point));
50381                         }, geoExtent());
50382
50383                         // find nearest other bubble in the search polygon
50384                         var minDist = Infinity;
50385                         _ssCache.bubbles.rtree.search(extent.bbox())
50386                             .forEach(function(d) {
50387                                 if (d.data.key === selected.key) return;
50388                                 if (!geoPointInPolygon(d.data.loc, poly)) return;
50389
50390                                 var dist = geoVecLength(d.data.loc, selected.loc);
50391                                 var theta = selected.ca - d.data.ca;
50392                                 var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
50393                                 if (minTheta > 20) {
50394                                     dist += 5;  // penalize distance if camera angles don't match
50395                                 }
50396
50397                                 if (dist < minDist) {
50398                                     nextID = d.data.key;
50399                                     minDist = dist;
50400                                 }
50401                             });
50402
50403                         var nextBubble = nextID && _ssCache.bubbles.points[nextID];
50404                         if (!nextBubble) return;
50405
50406                         context.map().centerEase(nextBubble.loc);
50407
50408                         that.selectImage(nextBubble)
50409                             .then(function(r) {
50410                                 if (r.status === 'ok') {
50411                                     _sceneOptions.yaw = yaw;
50412                                     that.showViewer();
50413                                 }
50414                             });
50415                     };
50416                 }
50417             },
50418
50419             /**
50420              * showViewer()
50421              */
50422             showViewer: function (yaw) {
50423                 if (!_sceneOptions) return;
50424
50425                 if (yaw !== undefined) {
50426                     _sceneOptions.yaw = yaw;
50427                 }
50428
50429                 if (!_pannellumViewer) {
50430                     this.initViewer();
50431                 } else {
50432                     // make a new scene
50433                     var sceneID = ++_currScene + '';
50434                     _pannellumViewer
50435                         .addScene(sceneID, _sceneOptions)
50436                         .loadScene(sceneID);
50437
50438                     // remove previous scene
50439                     if (_currScene > 2) {
50440                         sceneID = (_currScene - 1) + '';
50441                         _pannellumViewer
50442                             .removeScene(sceneID);
50443                     }
50444                 }
50445
50446                 var wrap = d3_select('#photoviewer')
50447                     .classed('hide', false);
50448
50449                 var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
50450
50451                 if (isHidden) {
50452                     wrap
50453                         .selectAll('.photo-wrapper:not(.ms-wrapper)')
50454                         .classed('hide', true);
50455
50456                     wrap
50457                         .selectAll('.photo-wrapper.ms-wrapper')
50458                         .classed('hide', false);
50459                 }
50460
50461                 return this;
50462             },
50463
50464             /**
50465              * hideViewer()
50466              */
50467             hideViewer: function () {
50468                 var viewer = d3_select('#photoviewer');
50469                 if (!viewer.empty()) viewer.datum(null);
50470
50471                 viewer
50472                     .classed('hide', true)
50473                     .selectAll('.photo-wrapper')
50474                     .classed('hide', true);
50475
50476                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
50477                     .classed('currentView', false);
50478
50479                 return this.setStyles(null, true);
50480             },
50481
50482             /**
50483              * selectImage().
50484              */
50485             selectImage: function (d) {
50486                 var response = q.defer();
50487                 var that = this;
50488
50489                 var viewer = d3_select('#photoviewer');
50490                 if (!viewer.empty()) viewer.datum(d);
50491
50492                 this.setStyles(null, true);
50493
50494                 var wrap = d3_select('#photoviewer .ms-wrapper');
50495                 var attribution = wrap.selectAll('.photo-attribution').html('');
50496
50497                 wrap.selectAll('.pnlm-load-box')   // display "loading.."
50498                     .style('display', 'block');
50499
50500                 if (!d) {
50501                     response.resolve({status: 'ok'});
50502                     return response.promise;
50503                 }
50504
50505                 var line1 = attribution
50506                     .append('div')
50507                     .attr('class', 'attribution-row');
50508
50509                 // Add hires checkbox
50510                 var label = line1
50511                     .append('label')
50512                     .attr('class', 'streetside-hires');
50513
50514                 label
50515                     .append('input')
50516                     .attr('type', 'checkbox')
50517                     .attr('id', 'streetside-hires-input')
50518                     .property('checked', _hires)
50519                     .on('click', function() {
50520                         event.stopPropagation();
50521
50522                         _hires = !_hires;
50523                         _resolution = _hires ? 1024 : 512;
50524                         wrap.call(setupCanvas, true);
50525
50526                         var viewstate = {
50527                             yaw: _pannellumViewer.getYaw(),
50528                             pitch: _pannellumViewer.getPitch(),
50529                             hfov: _pannellumViewer.getHfov()
50530                         };
50531
50532                         that.selectImage(d)
50533                             .then(function(r) {
50534                                 if (r.status === 'ok') {
50535                                     _sceneOptions = Object.assign(_sceneOptions, viewstate);
50536                                     that.showViewer();
50537                                 }
50538                             });
50539                     });
50540
50541                 label
50542                     .append('span')
50543                     .text(t('streetside.hires'));
50544
50545
50546                 var captureInfo = line1
50547                     .append('div')
50548                     .attr('class', 'attribution-capture-info');
50549
50550                 // Add capture date
50551                 if (d.captured_by) {
50552                     var yyyy = (new Date()).getFullYear();
50553
50554                     captureInfo
50555                         .append('a')
50556                         .attr('class', 'captured_by')
50557                         .attr('target', '_blank')
50558                         .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
50559                         .text('©' + yyyy + ' Microsoft');
50560
50561                     captureInfo
50562                         .append('span')
50563                         .text('|');
50564                 }
50565
50566                 if (d.captured_at) {
50567                     captureInfo
50568                         .append('span')
50569                         .attr('class', 'captured_at')
50570                         .text(localeTimestamp(d.captured_at));
50571                 }
50572
50573                 // Add image links
50574                 var line2 = attribution
50575                     .append('div')
50576                     .attr('class', 'attribution-row');
50577
50578                 line2
50579                     .append('a')
50580                     .attr('class', 'image-view-link')
50581                     .attr('target', '_blank')
50582                     .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
50583                         '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
50584                     .text(t('streetside.view_on_bing'));
50585
50586                 line2
50587                     .append('a')
50588                     .attr('class', 'image-report-link')
50589                     .attr('target', '_blank')
50590                     .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' + encodeURIComponent(d.key) +
50591                         '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
50592                     .text(t('streetside.report'));
50593
50594
50595                 var bubbleIdQuadKey = d.key.toString(4);
50596                 var paddingNeeded = 16 - bubbleIdQuadKey.length;
50597                 for (var i = 0; i < paddingNeeded; i++) {
50598                     bubbleIdQuadKey = '0' + bubbleIdQuadKey;
50599                 }
50600                 var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
50601                 var imgUrlSuffix = '.jpg?g=6338&n=z';
50602
50603                 // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
50604                 var faceKeys = ['01','02','03','10','11','12'];
50605
50606                 // Map images to cube faces
50607                 var quadKeys = getQuadKeys();
50608                 var faces = faceKeys.map(function(faceKey) {
50609                     return quadKeys.map(function(quadKey) {
50610                         var xy = qkToXY(quadKey);
50611                         return {
50612                             face: faceKey,
50613                             url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
50614                             x: xy[0],
50615                             y: xy[1]
50616                         };
50617                     });
50618                 });
50619
50620                 processFaces(faces).then(function() {
50621                     _sceneOptions = {
50622                         showFullscreenCtrl: false,
50623                         autoLoad: true,
50624                         compass: true,
50625                         northOffset: d.ca,
50626                         yaw: 0,
50627                         minHfov: minHfov,
50628                         maxHfov: maxHfov,
50629                         hfov: defaultHfov,
50630                         type: 'cubemap',
50631                         cubeMap: [
50632                             _dataUrlArray[0],
50633                             _dataUrlArray[1],
50634                             _dataUrlArray[2],
50635                             _dataUrlArray[3],
50636                             _dataUrlArray[4],
50637                             _dataUrlArray[5]
50638                         ]
50639                     };
50640                     response.resolve({status: 'ok'});
50641                 });
50642
50643                 return response.promise;
50644             },
50645
50646
50647             getSequenceKeyForBubble: function(d) {
50648                 return d && d.sequenceKey;
50649             },
50650
50651
50652             // Updates the currently highlighted sequence and selected bubble.
50653             // Reset is only necessary when interacting with the viewport because
50654             // this implicitly changes the currently selected bubble/sequence
50655             setStyles: function (hovered, reset) {
50656                 if (reset) {  // reset all layers
50657                     d3_selectAll('.viewfield-group')
50658                         .classed('highlighted', false)
50659                         .classed('hovered', false)
50660                         .classed('currentView', false);
50661
50662                     d3_selectAll('.sequence')
50663                         .classed('highlighted', false)
50664                         .classed('currentView', false);
50665                 }
50666
50667                 var hoveredBubbleKey = hovered && hovered.key;
50668                 var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
50669                 var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
50670                 var hoveredBubbleKeys =  (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
50671
50672                 var viewer = d3_select('#photoviewer');
50673                 var selected = viewer.empty() ? undefined : viewer.datum();
50674                 var selectedBubbleKey = selected && selected.key;
50675                 var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
50676                 var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
50677                 var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
50678
50679                 // highlight sibling viewfields on either the selected or the hovered sequences
50680                 var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
50681
50682                 d3_selectAll('.layer-streetside-images .viewfield-group')
50683                     .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
50684                     .classed('hovered', function (d) { return d.key === hoveredBubbleKey; })
50685                     .classed('currentView', function (d) { return d.key === selectedBubbleKey; });
50686
50687                 d3_selectAll('.layer-streetside-images .sequence')
50688                     .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
50689                     .classed('currentView', function (d) { return d.properties.key === selectedSequenceKey; });
50690
50691                 // update viewfields if needed
50692                 d3_selectAll('.viewfield-group .viewfield')
50693                     .attr('d', viewfieldPath);
50694
50695                 function viewfieldPath() {
50696                     var d = this.parentNode.__data__;
50697                     if (d.pano && d.key !== selectedBubbleKey) {
50698                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
50699                     } else {
50700                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
50701                     }
50702                 }
50703
50704                 return this;
50705             },
50706
50707             /**
50708              * cache().
50709              */
50710             cache: function () {
50711                 return _ssCache;
50712             }
50713         };
50714
50715         var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
50716         var _inflight$2 = {};
50717         var _popularKeys = {};
50718         var _taginfoCache = {};
50719
50720         var tag_sorts = {
50721             point: 'count_nodes',
50722             vertex: 'count_nodes',
50723             area: 'count_ways',
50724             line: 'count_ways'
50725         };
50726         var tag_sort_members = {
50727             point: 'count_node_members',
50728             vertex: 'count_node_members',
50729             area: 'count_way_members',
50730             line: 'count_way_members',
50731             relation: 'count_relation_members'
50732         };
50733         var tag_filters = {
50734             point: 'nodes',
50735             vertex: 'nodes',
50736             area: 'ways',
50737             line: 'ways'
50738         };
50739         var tag_members_fractions = {
50740             point: 'count_node_members_fraction',
50741             vertex: 'count_node_members_fraction',
50742             area: 'count_way_members_fraction',
50743             line: 'count_way_members_fraction',
50744             relation: 'count_relation_members_fraction'
50745         };
50746
50747
50748         function sets(params, n, o) {
50749             if (params.geometry && o[params.geometry]) {
50750                 params[n] = o[params.geometry];
50751             }
50752             return params;
50753         }
50754
50755
50756         function setFilter(params) {
50757             return sets(params, 'filter', tag_filters);
50758         }
50759
50760
50761         function setSort(params) {
50762             return sets(params, 'sortname', tag_sorts);
50763         }
50764
50765
50766         function setSortMembers(params) {
50767             return sets(params, 'sortname', tag_sort_members);
50768         }
50769
50770
50771         function clean(params) {
50772             return utilObjectOmit(params, ['geometry', 'debounce']);
50773         }
50774
50775
50776         function filterKeys(type) {
50777             var count_type = type ? 'count_' + type : 'count_all';
50778             return function(d) {
50779                 return parseFloat(d[count_type]) > 2500 || d.in_wiki;
50780             };
50781         }
50782
50783
50784         function filterMultikeys(prefix) {
50785             return function(d) {
50786                 // d.key begins with prefix, and d.key contains no additional ':'s
50787                 var re = new RegExp('^' + prefix + '(.*)$');
50788                 var matches = d.key.match(re) || [];
50789                 return (matches.length === 2 && matches[1].indexOf(':') === -1);
50790             };
50791         }
50792
50793
50794         function filterValues(allowUpperCase) {
50795             return function(d) {
50796                 if (d.value.match(/[;,]/) !== null) return false;  // exclude some punctuation
50797                 if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false;  // exclude uppercase letters
50798                 return parseFloat(d.fraction) > 0.0;
50799             };
50800         }
50801
50802
50803         function filterRoles(geometry) {
50804             return function(d) {
50805                 if (d.role === '') return false; // exclude empty role
50806                 if (d.role.match(/[A-Z*;,]/) !== null) return false;  // exclude uppercase letters and some punctuation
50807                 return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
50808             };
50809         }
50810
50811
50812         function valKey(d) {
50813             return {
50814                 value: d.key,
50815                 title: d.key
50816             };
50817         }
50818
50819
50820         function valKeyDescription(d) {
50821             return {
50822                 value: d.value,
50823                 title: d.description || d.value
50824             };
50825         }
50826
50827
50828         function roleKey(d) {
50829             return {
50830                 value: d.role,
50831                 title: d.role
50832             };
50833         }
50834
50835
50836         // sort keys with ':' lower than keys without ':'
50837         function sortKeys(a, b) {
50838             return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
50839                 : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
50840                 : 0;
50841         }
50842
50843
50844         var debouncedRequest$1 = debounce(request$1, 300, { leading: false });
50845
50846         function request$1(url, params, exactMatch, callback, loaded) {
50847             if (_inflight$2[url]) return;
50848
50849             if (checkCache(url, params, exactMatch, callback)) return;
50850
50851             var controller = new AbortController();
50852             _inflight$2[url] = controller;
50853
50854             d3_json(url, { signal: controller.signal })
50855                 .then(function(result) {
50856                     delete _inflight$2[url];
50857                     if (loaded) loaded(null, result);
50858                 })
50859                 .catch(function(err) {
50860                     delete _inflight$2[url];
50861                     if (err.name === 'AbortError') return;
50862                     if (loaded) loaded(err.message);
50863                 });
50864         }
50865
50866
50867         function checkCache(url, params, exactMatch, callback) {
50868             var rp = params.rp || 25;
50869             var testQuery = params.query || '';
50870             var testUrl = url;
50871
50872             do {
50873                 var hit = _taginfoCache[testUrl];
50874
50875                 // exact match, or shorter match yielding fewer than max results (rp)
50876                 if (hit && (url === testUrl || hit.length < rp)) {
50877                     callback(null, hit);
50878                     return true;
50879                 }
50880
50881                 // don't try to shorten the query
50882                 if (exactMatch || !testQuery.length) return false;
50883
50884                 // do shorten the query to see if we already have a cached result
50885                 // that has returned fewer than max results (rp)
50886                 testQuery = testQuery.slice(0, -1);
50887                 testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
50888             } while (testQuery.length >= 0);
50889
50890             return false;
50891         }
50892
50893
50894         var serviceTaginfo = {
50895
50896             init: function() {
50897                 _inflight$2 = {};
50898                 _taginfoCache = {};
50899                 _popularKeys = {
50900                     postal_code: true   // #5377
50901                 };
50902
50903                 // Fetch popular keys.  We'll exclude these from `values`
50904                 // lookups because they stress taginfo, and they aren't likely
50905                 // to yield meaningful autocomplete results.. see #3955
50906                 var params = {
50907                     rp: 100,
50908                     sortname: 'values_all',
50909                     sortorder: 'desc',
50910                     page: 1,
50911                     debounce: false,
50912                     lang: currentLocale
50913                 };
50914                 this.keys(params, function(err, data) {
50915                     if (err) return;
50916                     data.forEach(function(d) {
50917                         if (d.value === 'opening_hours') return;  // exception
50918                         _popularKeys[d.value] = true;
50919                     });
50920                 });
50921             },
50922
50923
50924             reset: function() {
50925                 Object.values(_inflight$2).forEach(function(controller) { controller.abort(); });
50926                 _inflight$2 = {};
50927             },
50928
50929
50930             keys: function(params, callback) {
50931                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50932                 params = clean(setSort(params));
50933                 params = Object.assign({
50934                     rp: 10,
50935                     sortname: 'count_all',
50936                     sortorder: 'desc',
50937                     page: 1,
50938                     lang: currentLocale
50939                 }, params);
50940
50941                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
50942                 doRequest(url, params, false, callback, function(err, d) {
50943                     if (err) {
50944                         callback(err);
50945                     } else {
50946                         var f = filterKeys(params.filter);
50947                         var result = d.data.filter(f).sort(sortKeys).map(valKey);
50948                         _taginfoCache[url] = result;
50949                         callback(null, result);
50950                     }
50951                 });
50952             },
50953
50954
50955             multikeys: function(params, callback) {
50956                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50957                 params = clean(setSort(params));
50958                 params = Object.assign({
50959                     rp: 25,
50960                     sortname: 'count_all',
50961                     sortorder: 'desc',
50962                     page: 1,
50963                     lang: currentLocale
50964                 }, params);
50965
50966                 var prefix = params.query;
50967                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
50968                 doRequest(url, params, true, callback, function(err, d) {
50969                     if (err) {
50970                         callback(err);
50971                     } else {
50972                         var f = filterMultikeys(prefix);
50973                         var result = d.data.filter(f).map(valKey);
50974                         _taginfoCache[url] = result;
50975                         callback(null, result);
50976                     }
50977                 });
50978             },
50979
50980
50981             values: function(params, callback) {
50982                 // Exclude popular keys from values lookups.. see #3955
50983                 var key = params.key;
50984                 if (key && _popularKeys[key]) {
50985                     callback(null, []);
50986                     return;
50987                 }
50988
50989                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50990                 params = clean(setSort(setFilter(params)));
50991                 params = Object.assign({
50992                     rp: 25,
50993                     sortname: 'count_all',
50994                     sortorder: 'desc',
50995                     page: 1,
50996                     lang: currentLocale
50997                 }, params);
50998
50999                 var url = apibase$4 + 'key/values?' + utilQsString(params);
51000                 doRequest(url, params, false, callback, function(err, d) {
51001                     if (err) {
51002                         callback(err);
51003                     } else {
51004                         // In most cases we prefer taginfo value results with lowercase letters.
51005                         // A few OSM keys expect values to contain uppercase values (see #3377).
51006                         // This is not an exhaustive list (e.g. `name` also has uppercase values)
51007                         // but these are the fields where taginfo value lookup is most useful.
51008                         var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer/;
51009                         var allowUpperCase = re.test(params.key);
51010                         var f = filterValues(allowUpperCase);
51011
51012                         var result = d.data.filter(f).map(valKeyDescription);
51013                         _taginfoCache[url] = result;
51014                         callback(null, result);
51015                     }
51016                 });
51017             },
51018
51019
51020             roles: function(params, callback) {
51021                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
51022                 var geometry = params.geometry;
51023                 params = clean(setSortMembers(params));
51024                 params = Object.assign({
51025                     rp: 25,
51026                     sortname: 'count_all_members',
51027                     sortorder: 'desc',
51028                     page: 1,
51029                     lang: currentLocale
51030                 }, params);
51031
51032                 var url = apibase$4 + 'relation/roles?' + utilQsString(params);
51033                 doRequest(url, params, true, callback, function(err, d) {
51034                     if (err) {
51035                         callback(err);
51036                     } else {
51037                         var f = filterRoles(geometry);
51038                         var result = d.data.filter(f).map(roleKey);
51039                         _taginfoCache[url] = result;
51040                         callback(null, result);
51041                     }
51042                 });
51043             },
51044
51045
51046             docs: function(params, callback) {
51047                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
51048                 params = clean(setSort(params));
51049
51050                 var path = 'key/wiki_pages?';
51051                 if (params.value) {
51052                     path = 'tag/wiki_pages?';
51053                 } else if (params.rtype) {
51054                     path = 'relation/wiki_pages?';
51055                 }
51056
51057                 var url = apibase$4 + path + utilQsString(params);
51058                 doRequest(url, params, true, callback, function(err, d) {
51059                     if (err) {
51060                         callback(err);
51061                     } else {
51062                         _taginfoCache[url] = d.data;
51063                         callback(null, d.data);
51064                     }
51065                 });
51066             },
51067
51068
51069             apibase: function(_) {
51070                 if (!arguments.length) return apibase$4;
51071                 apibase$4 = _;
51072                 return this;
51073             }
51074
51075         };
51076
51077         var helpers = createCommonjsModule(function (module, exports) {
51078         Object.defineProperty(exports, "__esModule", { value: true });
51079         /**
51080          * @module helpers
51081          */
51082         /**
51083          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
51084          *
51085          * @memberof helpers
51086          * @type {number}
51087          */
51088         exports.earthRadius = 6371008.8;
51089         /**
51090          * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
51091          *
51092          * @memberof helpers
51093          * @type {Object}
51094          */
51095         exports.factors = {
51096             centimeters: exports.earthRadius * 100,
51097             centimetres: exports.earthRadius * 100,
51098             degrees: exports.earthRadius / 111325,
51099             feet: exports.earthRadius * 3.28084,
51100             inches: exports.earthRadius * 39.370,
51101             kilometers: exports.earthRadius / 1000,
51102             kilometres: exports.earthRadius / 1000,
51103             meters: exports.earthRadius,
51104             metres: exports.earthRadius,
51105             miles: exports.earthRadius / 1609.344,
51106             millimeters: exports.earthRadius * 1000,
51107             millimetres: exports.earthRadius * 1000,
51108             nauticalmiles: exports.earthRadius / 1852,
51109             radians: 1,
51110             yards: exports.earthRadius / 1.0936,
51111         };
51112         /**
51113          * Units of measurement factors based on 1 meter.
51114          *
51115          * @memberof helpers
51116          * @type {Object}
51117          */
51118         exports.unitsFactors = {
51119             centimeters: 100,
51120             centimetres: 100,
51121             degrees: 1 / 111325,
51122             feet: 3.28084,
51123             inches: 39.370,
51124             kilometers: 1 / 1000,
51125             kilometres: 1 / 1000,
51126             meters: 1,
51127             metres: 1,
51128             miles: 1 / 1609.344,
51129             millimeters: 1000,
51130             millimetres: 1000,
51131             nauticalmiles: 1 / 1852,
51132             radians: 1 / exports.earthRadius,
51133             yards: 1 / 1.0936,
51134         };
51135         /**
51136          * Area of measurement factors based on 1 square meter.
51137          *
51138          * @memberof helpers
51139          * @type {Object}
51140          */
51141         exports.areaFactors = {
51142             acres: 0.000247105,
51143             centimeters: 10000,
51144             centimetres: 10000,
51145             feet: 10.763910417,
51146             inches: 1550.003100006,
51147             kilometers: 0.000001,
51148             kilometres: 0.000001,
51149             meters: 1,
51150             metres: 1,
51151             miles: 3.86e-7,
51152             millimeters: 1000000,
51153             millimetres: 1000000,
51154             yards: 1.195990046,
51155         };
51156         /**
51157          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
51158          *
51159          * @name feature
51160          * @param {Geometry} geometry input geometry
51161          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51162          * @param {Object} [options={}] Optional Parameters
51163          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51164          * @param {string|number} [options.id] Identifier associated with the Feature
51165          * @returns {Feature} a GeoJSON Feature
51166          * @example
51167          * var geometry = {
51168          *   "type": "Point",
51169          *   "coordinates": [110, 50]
51170          * };
51171          *
51172          * var feature = turf.feature(geometry);
51173          *
51174          * //=feature
51175          */
51176         function feature(geom, properties, options) {
51177             if (options === void 0) { options = {}; }
51178             var feat = { type: "Feature" };
51179             if (options.id === 0 || options.id) {
51180                 feat.id = options.id;
51181             }
51182             if (options.bbox) {
51183                 feat.bbox = options.bbox;
51184             }
51185             feat.properties = properties || {};
51186             feat.geometry = geom;
51187             return feat;
51188         }
51189         exports.feature = feature;
51190         /**
51191          * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
51192          * For GeometryCollection type use `helpers.geometryCollection`
51193          *
51194          * @name geometry
51195          * @param {string} type Geometry Type
51196          * @param {Array<any>} coordinates Coordinates
51197          * @param {Object} [options={}] Optional Parameters
51198          * @returns {Geometry} a GeoJSON Geometry
51199          * @example
51200          * var type = "Point";
51201          * var coordinates = [110, 50];
51202          * var geometry = turf.geometry(type, coordinates);
51203          * // => geometry
51204          */
51205         function geometry(type, coordinates, options) {
51206             switch (type) {
51207                 case "Point": return point(coordinates).geometry;
51208                 case "LineString": return lineString(coordinates).geometry;
51209                 case "Polygon": return polygon(coordinates).geometry;
51210                 case "MultiPoint": return multiPoint(coordinates).geometry;
51211                 case "MultiLineString": return multiLineString(coordinates).geometry;
51212                 case "MultiPolygon": return multiPolygon(coordinates).geometry;
51213                 default: throw new Error(type + " is invalid");
51214             }
51215         }
51216         exports.geometry = geometry;
51217         /**
51218          * Creates a {@link Point} {@link Feature} from a Position.
51219          *
51220          * @name point
51221          * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
51222          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51223          * @param {Object} [options={}] Optional Parameters
51224          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51225          * @param {string|number} [options.id] Identifier associated with the Feature
51226          * @returns {Feature<Point>} a Point feature
51227          * @example
51228          * var point = turf.point([-75.343, 39.984]);
51229          *
51230          * //=point
51231          */
51232         function point(coordinates, properties, options) {
51233             if (options === void 0) { options = {}; }
51234             var geom = {
51235                 type: "Point",
51236                 coordinates: coordinates,
51237             };
51238             return feature(geom, properties, options);
51239         }
51240         exports.point = point;
51241         /**
51242          * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
51243          *
51244          * @name points
51245          * @param {Array<Array<number>>} coordinates an array of Points
51246          * @param {Object} [properties={}] Translate these properties to each Feature
51247          * @param {Object} [options={}] Optional Parameters
51248          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
51249          * associated with the FeatureCollection
51250          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51251          * @returns {FeatureCollection<Point>} Point Feature
51252          * @example
51253          * var points = turf.points([
51254          *   [-75, 39],
51255          *   [-80, 45],
51256          *   [-78, 50]
51257          * ]);
51258          *
51259          * //=points
51260          */
51261         function points(coordinates, properties, options) {
51262             if (options === void 0) { options = {}; }
51263             return featureCollection(coordinates.map(function (coords) {
51264                 return point(coords, properties);
51265             }), options);
51266         }
51267         exports.points = points;
51268         /**
51269          * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
51270          *
51271          * @name polygon
51272          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
51273          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51274          * @param {Object} [options={}] Optional Parameters
51275          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51276          * @param {string|number} [options.id] Identifier associated with the Feature
51277          * @returns {Feature<Polygon>} Polygon Feature
51278          * @example
51279          * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
51280          *
51281          * //=polygon
51282          */
51283         function polygon(coordinates, properties, options) {
51284             if (options === void 0) { options = {}; }
51285             for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
51286                 var ring = coordinates_1[_i];
51287                 if (ring.length < 4) {
51288                     throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
51289                 }
51290                 for (var j = 0; j < ring[ring.length - 1].length; j++) {
51291                     // Check if first point of Polygon contains two numbers
51292                     if (ring[ring.length - 1][j] !== ring[0][j]) {
51293                         throw new Error("First and last Position are not equivalent.");
51294                     }
51295                 }
51296             }
51297             var geom = {
51298                 type: "Polygon",
51299                 coordinates: coordinates,
51300             };
51301             return feature(geom, properties, options);
51302         }
51303         exports.polygon = polygon;
51304         /**
51305          * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
51306          *
51307          * @name polygons
51308          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
51309          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51310          * @param {Object} [options={}] Optional Parameters
51311          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51312          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51313          * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
51314          * @example
51315          * var polygons = turf.polygons([
51316          *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
51317          *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
51318          * ]);
51319          *
51320          * //=polygons
51321          */
51322         function polygons(coordinates, properties, options) {
51323             if (options === void 0) { options = {}; }
51324             return featureCollection(coordinates.map(function (coords) {
51325                 return polygon(coords, properties);
51326             }), options);
51327         }
51328         exports.polygons = polygons;
51329         /**
51330          * Creates a {@link LineString} {@link Feature} from an Array of Positions.
51331          *
51332          * @name lineString
51333          * @param {Array<Array<number>>} coordinates an array of Positions
51334          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51335          * @param {Object} [options={}] Optional Parameters
51336          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51337          * @param {string|number} [options.id] Identifier associated with the Feature
51338          * @returns {Feature<LineString>} LineString Feature
51339          * @example
51340          * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
51341          * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
51342          *
51343          * //=linestring1
51344          * //=linestring2
51345          */
51346         function lineString(coordinates, properties, options) {
51347             if (options === void 0) { options = {}; }
51348             if (coordinates.length < 2) {
51349                 throw new Error("coordinates must be an array of two or more positions");
51350             }
51351             var geom = {
51352                 type: "LineString",
51353                 coordinates: coordinates,
51354             };
51355             return feature(geom, properties, options);
51356         }
51357         exports.lineString = lineString;
51358         /**
51359          * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
51360          *
51361          * @name lineStrings
51362          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
51363          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51364          * @param {Object} [options={}] Optional Parameters
51365          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
51366          * associated with the FeatureCollection
51367          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51368          * @returns {FeatureCollection<LineString>} LineString FeatureCollection
51369          * @example
51370          * var linestrings = turf.lineStrings([
51371          *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
51372          *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
51373          * ]);
51374          *
51375          * //=linestrings
51376          */
51377         function lineStrings(coordinates, properties, options) {
51378             if (options === void 0) { options = {}; }
51379             return featureCollection(coordinates.map(function (coords) {
51380                 return lineString(coords, properties);
51381             }), options);
51382         }
51383         exports.lineStrings = lineStrings;
51384         /**
51385          * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
51386          *
51387          * @name featureCollection
51388          * @param {Feature[]} features input features
51389          * @param {Object} [options={}] Optional Parameters
51390          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51391          * @param {string|number} [options.id] Identifier associated with the Feature
51392          * @returns {FeatureCollection} FeatureCollection of Features
51393          * @example
51394          * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
51395          * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
51396          * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
51397          *
51398          * var collection = turf.featureCollection([
51399          *   locationA,
51400          *   locationB,
51401          *   locationC
51402          * ]);
51403          *
51404          * //=collection
51405          */
51406         function featureCollection(features, options) {
51407             if (options === void 0) { options = {}; }
51408             var fc = { type: "FeatureCollection" };
51409             if (options.id) {
51410                 fc.id = options.id;
51411             }
51412             if (options.bbox) {
51413                 fc.bbox = options.bbox;
51414             }
51415             fc.features = features;
51416             return fc;
51417         }
51418         exports.featureCollection = featureCollection;
51419         /**
51420          * Creates a {@link Feature<MultiLineString>} based on a
51421          * coordinate array. Properties can be added optionally.
51422          *
51423          * @name multiLineString
51424          * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
51425          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51426          * @param {Object} [options={}] Optional Parameters
51427          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51428          * @param {string|number} [options.id] Identifier associated with the Feature
51429          * @returns {Feature<MultiLineString>} a MultiLineString feature
51430          * @throws {Error} if no coordinates are passed
51431          * @example
51432          * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
51433          *
51434          * //=multiLine
51435          */
51436         function multiLineString(coordinates, properties, options) {
51437             if (options === void 0) { options = {}; }
51438             var geom = {
51439                 type: "MultiLineString",
51440                 coordinates: coordinates,
51441             };
51442             return feature(geom, properties, options);
51443         }
51444         exports.multiLineString = multiLineString;
51445         /**
51446          * Creates a {@link Feature<MultiPoint>} based on a
51447          * coordinate array. Properties can be added optionally.
51448          *
51449          * @name multiPoint
51450          * @param {Array<Array<number>>} coordinates an array of Positions
51451          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51452          * @param {Object} [options={}] Optional Parameters
51453          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51454          * @param {string|number} [options.id] Identifier associated with the Feature
51455          * @returns {Feature<MultiPoint>} a MultiPoint feature
51456          * @throws {Error} if no coordinates are passed
51457          * @example
51458          * var multiPt = turf.multiPoint([[0,0],[10,10]]);
51459          *
51460          * //=multiPt
51461          */
51462         function multiPoint(coordinates, properties, options) {
51463             if (options === void 0) { options = {}; }
51464             var geom = {
51465                 type: "MultiPoint",
51466                 coordinates: coordinates,
51467             };
51468             return feature(geom, properties, options);
51469         }
51470         exports.multiPoint = multiPoint;
51471         /**
51472          * Creates a {@link Feature<MultiPolygon>} based on a
51473          * coordinate array. Properties can be added optionally.
51474          *
51475          * @name multiPolygon
51476          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
51477          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51478          * @param {Object} [options={}] Optional Parameters
51479          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51480          * @param {string|number} [options.id] Identifier associated with the Feature
51481          * @returns {Feature<MultiPolygon>} a multipolygon feature
51482          * @throws {Error} if no coordinates are passed
51483          * @example
51484          * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
51485          *
51486          * //=multiPoly
51487          *
51488          */
51489         function multiPolygon(coordinates, properties, options) {
51490             if (options === void 0) { options = {}; }
51491             var geom = {
51492                 type: "MultiPolygon",
51493                 coordinates: coordinates,
51494             };
51495             return feature(geom, properties, options);
51496         }
51497         exports.multiPolygon = multiPolygon;
51498         /**
51499          * Creates a {@link Feature<GeometryCollection>} based on a
51500          * coordinate array. Properties can be added optionally.
51501          *
51502          * @name geometryCollection
51503          * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
51504          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51505          * @param {Object} [options={}] Optional Parameters
51506          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51507          * @param {string|number} [options.id] Identifier associated with the Feature
51508          * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
51509          * @example
51510          * var pt = turf.geometry("Point", [100, 0]);
51511          * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
51512          * var collection = turf.geometryCollection([pt, line]);
51513          *
51514          * // => collection
51515          */
51516         function geometryCollection(geometries, properties, options) {
51517             if (options === void 0) { options = {}; }
51518             var geom = {
51519                 type: "GeometryCollection",
51520                 geometries: geometries,
51521             };
51522             return feature(geom, properties, options);
51523         }
51524         exports.geometryCollection = geometryCollection;
51525         /**
51526          * Round number to precision
51527          *
51528          * @param {number} num Number
51529          * @param {number} [precision=0] Precision
51530          * @returns {number} rounded number
51531          * @example
51532          * turf.round(120.4321)
51533          * //=120
51534          *
51535          * turf.round(120.4321, 2)
51536          * //=120.43
51537          */
51538         function round(num, precision) {
51539             if (precision === void 0) { precision = 0; }
51540             if (precision && !(precision >= 0)) {
51541                 throw new Error("precision must be a positive number");
51542             }
51543             var multiplier = Math.pow(10, precision || 0);
51544             return Math.round(num * multiplier) / multiplier;
51545         }
51546         exports.round = round;
51547         /**
51548          * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
51549          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51550          *
51551          * @name radiansToLength
51552          * @param {number} radians in radians across the sphere
51553          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51554          * meters, kilometres, kilometers.
51555          * @returns {number} distance
51556          */
51557         function radiansToLength(radians, units) {
51558             if (units === void 0) { units = "kilometers"; }
51559             var factor = exports.factors[units];
51560             if (!factor) {
51561                 throw new Error(units + " units is invalid");
51562             }
51563             return radians * factor;
51564         }
51565         exports.radiansToLength = radiansToLength;
51566         /**
51567          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
51568          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51569          *
51570          * @name lengthToRadians
51571          * @param {number} distance in real units
51572          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51573          * meters, kilometres, kilometers.
51574          * @returns {number} radians
51575          */
51576         function lengthToRadians(distance, units) {
51577             if (units === void 0) { units = "kilometers"; }
51578             var factor = exports.factors[units];
51579             if (!factor) {
51580                 throw new Error(units + " units is invalid");
51581             }
51582             return distance / factor;
51583         }
51584         exports.lengthToRadians = lengthToRadians;
51585         /**
51586          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
51587          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
51588          *
51589          * @name lengthToDegrees
51590          * @param {number} distance in real units
51591          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51592          * meters, kilometres, kilometers.
51593          * @returns {number} degrees
51594          */
51595         function lengthToDegrees(distance, units) {
51596             return radiansToDegrees(lengthToRadians(distance, units));
51597         }
51598         exports.lengthToDegrees = lengthToDegrees;
51599         /**
51600          * Converts any bearing angle from the north line direction (positive clockwise)
51601          * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
51602          *
51603          * @name bearingToAzimuth
51604          * @param {number} bearing angle, between -180 and +180 degrees
51605          * @returns {number} angle between 0 and 360 degrees
51606          */
51607         function bearingToAzimuth(bearing) {
51608             var angle = bearing % 360;
51609             if (angle < 0) {
51610                 angle += 360;
51611             }
51612             return angle;
51613         }
51614         exports.bearingToAzimuth = bearingToAzimuth;
51615         /**
51616          * Converts an angle in radians to degrees
51617          *
51618          * @name radiansToDegrees
51619          * @param {number} radians angle in radians
51620          * @returns {number} degrees between 0 and 360 degrees
51621          */
51622         function radiansToDegrees(radians) {
51623             var degrees = radians % (2 * Math.PI);
51624             return degrees * 180 / Math.PI;
51625         }
51626         exports.radiansToDegrees = radiansToDegrees;
51627         /**
51628          * Converts an angle in degrees to radians
51629          *
51630          * @name degreesToRadians
51631          * @param {number} degrees angle between 0 and 360 degrees
51632          * @returns {number} angle in radians
51633          */
51634         function degreesToRadians(degrees) {
51635             var radians = degrees % 360;
51636             return radians * Math.PI / 180;
51637         }
51638         exports.degreesToRadians = degreesToRadians;
51639         /**
51640          * Converts a length to the requested unit.
51641          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51642          *
51643          * @param {number} length to be converted
51644          * @param {Units} [originalUnit="kilometers"] of the length
51645          * @param {Units} [finalUnit="kilometers"] returned unit
51646          * @returns {number} the converted length
51647          */
51648         function convertLength(length, originalUnit, finalUnit) {
51649             if (originalUnit === void 0) { originalUnit = "kilometers"; }
51650             if (finalUnit === void 0) { finalUnit = "kilometers"; }
51651             if (!(length >= 0)) {
51652                 throw new Error("length must be a positive number");
51653             }
51654             return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
51655         }
51656         exports.convertLength = convertLength;
51657         /**
51658          * Converts a area to the requested unit.
51659          * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
51660          * @param {number} area to be converted
51661          * @param {Units} [originalUnit="meters"] of the distance
51662          * @param {Units} [finalUnit="kilometers"] returned unit
51663          * @returns {number} the converted distance
51664          */
51665         function convertArea(area, originalUnit, finalUnit) {
51666             if (originalUnit === void 0) { originalUnit = "meters"; }
51667             if (finalUnit === void 0) { finalUnit = "kilometers"; }
51668             if (!(area >= 0)) {
51669                 throw new Error("area must be a positive number");
51670             }
51671             var startFactor = exports.areaFactors[originalUnit];
51672             if (!startFactor) {
51673                 throw new Error("invalid original units");
51674             }
51675             var finalFactor = exports.areaFactors[finalUnit];
51676             if (!finalFactor) {
51677                 throw new Error("invalid final units");
51678             }
51679             return (area / startFactor) * finalFactor;
51680         }
51681         exports.convertArea = convertArea;
51682         /**
51683          * isNumber
51684          *
51685          * @param {*} num Number to validate
51686          * @returns {boolean} true/false
51687          * @example
51688          * turf.isNumber(123)
51689          * //=true
51690          * turf.isNumber('foo')
51691          * //=false
51692          */
51693         function isNumber(num) {
51694             return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
51695         }
51696         exports.isNumber = isNumber;
51697         /**
51698          * isObject
51699          *
51700          * @param {*} input variable to validate
51701          * @returns {boolean} true/false
51702          * @example
51703          * turf.isObject({elevation: 10})
51704          * //=true
51705          * turf.isObject('foo')
51706          * //=false
51707          */
51708         function isObject(input) {
51709             return (!!input) && (input.constructor === Object);
51710         }
51711         exports.isObject = isObject;
51712         /**
51713          * Validate BBox
51714          *
51715          * @private
51716          * @param {Array<number>} bbox BBox to validate
51717          * @returns {void}
51718          * @throws Error if BBox is not valid
51719          * @example
51720          * validateBBox([-180, -40, 110, 50])
51721          * //=OK
51722          * validateBBox([-180, -40])
51723          * //=Error
51724          * validateBBox('Foo')
51725          * //=Error
51726          * validateBBox(5)
51727          * //=Error
51728          * validateBBox(null)
51729          * //=Error
51730          * validateBBox(undefined)
51731          * //=Error
51732          */
51733         function validateBBox(bbox) {
51734             if (!bbox) {
51735                 throw new Error("bbox is required");
51736             }
51737             if (!Array.isArray(bbox)) {
51738                 throw new Error("bbox must be an Array");
51739             }
51740             if (bbox.length !== 4 && bbox.length !== 6) {
51741                 throw new Error("bbox must be an Array of 4 or 6 numbers");
51742             }
51743             bbox.forEach(function (num) {
51744                 if (!isNumber(num)) {
51745                     throw new Error("bbox must only contain numbers");
51746                 }
51747             });
51748         }
51749         exports.validateBBox = validateBBox;
51750         /**
51751          * Validate Id
51752          *
51753          * @private
51754          * @param {string|number} id Id to validate
51755          * @returns {void}
51756          * @throws Error if Id is not valid
51757          * @example
51758          * validateId([-180, -40, 110, 50])
51759          * //=Error
51760          * validateId([-180, -40])
51761          * //=Error
51762          * validateId('Foo')
51763          * //=OK
51764          * validateId(5)
51765          * //=OK
51766          * validateId(null)
51767          * //=Error
51768          * validateId(undefined)
51769          * //=Error
51770          */
51771         function validateId(id) {
51772             if (!id) {
51773                 throw new Error("id is required");
51774             }
51775             if (["string", "number"].indexOf(typeof id) === -1) {
51776                 throw new Error("id must be a number or a string");
51777             }
51778         }
51779         exports.validateId = validateId;
51780         // Deprecated methods
51781         function radians2degrees() {
51782             throw new Error("method has been renamed to `radiansToDegrees`");
51783         }
51784         exports.radians2degrees = radians2degrees;
51785         function degrees2radians() {
51786             throw new Error("method has been renamed to `degreesToRadians`");
51787         }
51788         exports.degrees2radians = degrees2radians;
51789         function distanceToDegrees() {
51790             throw new Error("method has been renamed to `lengthToDegrees`");
51791         }
51792         exports.distanceToDegrees = distanceToDegrees;
51793         function distanceToRadians() {
51794             throw new Error("method has been renamed to `lengthToRadians`");
51795         }
51796         exports.distanceToRadians = distanceToRadians;
51797         function radiansToDistance() {
51798             throw new Error("method has been renamed to `radiansToLength`");
51799         }
51800         exports.radiansToDistance = radiansToDistance;
51801         function bearingToAngle() {
51802             throw new Error("method has been renamed to `bearingToAzimuth`");
51803         }
51804         exports.bearingToAngle = bearingToAngle;
51805         function convertDistance() {
51806             throw new Error("method has been renamed to `convertLength`");
51807         }
51808         exports.convertDistance = convertDistance;
51809         });
51810
51811         unwrapExports(helpers);
51812         var helpers_1 = helpers.earthRadius;
51813         var helpers_2 = helpers.factors;
51814         var helpers_3 = helpers.unitsFactors;
51815         var helpers_4 = helpers.areaFactors;
51816         var helpers_5 = helpers.feature;
51817         var helpers_6 = helpers.geometry;
51818         var helpers_7 = helpers.point;
51819         var helpers_8 = helpers.points;
51820         var helpers_9 = helpers.polygon;
51821         var helpers_10 = helpers.polygons;
51822         var helpers_11 = helpers.lineString;
51823         var helpers_12 = helpers.lineStrings;
51824         var helpers_13 = helpers.featureCollection;
51825         var helpers_14 = helpers.multiLineString;
51826         var helpers_15 = helpers.multiPoint;
51827         var helpers_16 = helpers.multiPolygon;
51828         var helpers_17 = helpers.geometryCollection;
51829         var helpers_18 = helpers.round;
51830         var helpers_19 = helpers.radiansToLength;
51831         var helpers_20 = helpers.lengthToRadians;
51832         var helpers_21 = helpers.lengthToDegrees;
51833         var helpers_22 = helpers.bearingToAzimuth;
51834         var helpers_23 = helpers.radiansToDegrees;
51835         var helpers_24 = helpers.degreesToRadians;
51836         var helpers_25 = helpers.convertLength;
51837         var helpers_26 = helpers.convertArea;
51838         var helpers_27 = helpers.isNumber;
51839         var helpers_28 = helpers.isObject;
51840         var helpers_29 = helpers.validateBBox;
51841         var helpers_30 = helpers.validateId;
51842         var helpers_31 = helpers.radians2degrees;
51843         var helpers_32 = helpers.degrees2radians;
51844         var helpers_33 = helpers.distanceToDegrees;
51845         var helpers_34 = helpers.distanceToRadians;
51846         var helpers_35 = helpers.radiansToDistance;
51847         var helpers_36 = helpers.bearingToAngle;
51848         var helpers_37 = helpers.convertDistance;
51849
51850         var invariant = createCommonjsModule(function (module, exports) {
51851         Object.defineProperty(exports, "__esModule", { value: true });
51852
51853         /**
51854          * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
51855          *
51856          * @name getCoord
51857          * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
51858          * @returns {Array<number>} coordinates
51859          * @example
51860          * var pt = turf.point([10, 10]);
51861          *
51862          * var coord = turf.getCoord(pt);
51863          * //= [10, 10]
51864          */
51865         function getCoord(coord) {
51866             if (!coord) {
51867                 throw new Error("coord is required");
51868             }
51869             if (!Array.isArray(coord)) {
51870                 if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
51871                     return coord.geometry.coordinates;
51872                 }
51873                 if (coord.type === "Point") {
51874                     return coord.coordinates;
51875                 }
51876             }
51877             if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
51878                 return coord;
51879             }
51880             throw new Error("coord must be GeoJSON Point or an Array of numbers");
51881         }
51882         exports.getCoord = getCoord;
51883         /**
51884          * Unwrap coordinates from a Feature, Geometry Object or an Array
51885          *
51886          * @name getCoords
51887          * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
51888          * @returns {Array<any>} coordinates
51889          * @example
51890          * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
51891          *
51892          * var coords = turf.getCoords(poly);
51893          * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
51894          */
51895         function getCoords(coords) {
51896             if (Array.isArray(coords)) {
51897                 return coords;
51898             }
51899             // Feature
51900             if (coords.type === "Feature") {
51901                 if (coords.geometry !== null) {
51902                     return coords.geometry.coordinates;
51903                 }
51904             }
51905             else {
51906                 // Geometry
51907                 if (coords.coordinates) {
51908                     return coords.coordinates;
51909                 }
51910             }
51911             throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
51912         }
51913         exports.getCoords = getCoords;
51914         /**
51915          * Checks if coordinates contains a number
51916          *
51917          * @name containsNumber
51918          * @param {Array<any>} coordinates GeoJSON Coordinates
51919          * @returns {boolean} true if Array contains a number
51920          */
51921         function containsNumber(coordinates) {
51922             if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
51923                 return true;
51924             }
51925             if (Array.isArray(coordinates[0]) && coordinates[0].length) {
51926                 return containsNumber(coordinates[0]);
51927             }
51928             throw new Error("coordinates must only contain numbers");
51929         }
51930         exports.containsNumber = containsNumber;
51931         /**
51932          * Enforce expectations about types of GeoJSON objects for Turf.
51933          *
51934          * @name geojsonType
51935          * @param {GeoJSON} value any GeoJSON object
51936          * @param {string} type expected GeoJSON type
51937          * @param {string} name name of calling function
51938          * @throws {Error} if value is not the expected type.
51939          */
51940         function geojsonType(value, type, name) {
51941             if (!type || !name) {
51942                 throw new Error("type and name required");
51943             }
51944             if (!value || value.type !== type) {
51945                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
51946             }
51947         }
51948         exports.geojsonType = geojsonType;
51949         /**
51950          * Enforce expectations about types of {@link Feature} inputs for Turf.
51951          * Internally this uses {@link geojsonType} to judge geometry types.
51952          *
51953          * @name featureOf
51954          * @param {Feature} feature a feature with an expected geometry type
51955          * @param {string} type expected GeoJSON type
51956          * @param {string} name name of calling function
51957          * @throws {Error} error if value is not the expected type.
51958          */
51959         function featureOf(feature, type, name) {
51960             if (!feature) {
51961                 throw new Error("No feature passed");
51962             }
51963             if (!name) {
51964                 throw new Error(".featureOf() requires a name");
51965             }
51966             if (!feature || feature.type !== "Feature" || !feature.geometry) {
51967                 throw new Error("Invalid input to " + name + ", Feature with geometry required");
51968             }
51969             if (!feature.geometry || feature.geometry.type !== type) {
51970                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
51971             }
51972         }
51973         exports.featureOf = featureOf;
51974         /**
51975          * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
51976          * Internally this uses {@link geojsonType} to judge geometry types.
51977          *
51978          * @name collectionOf
51979          * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
51980          * @param {string} type expected GeoJSON type
51981          * @param {string} name name of calling function
51982          * @throws {Error} if value is not the expected type.
51983          */
51984         function collectionOf(featureCollection, type, name) {
51985             if (!featureCollection) {
51986                 throw new Error("No featureCollection passed");
51987             }
51988             if (!name) {
51989                 throw new Error(".collectionOf() requires a name");
51990             }
51991             if (!featureCollection || featureCollection.type !== "FeatureCollection") {
51992                 throw new Error("Invalid input to " + name + ", FeatureCollection required");
51993             }
51994             for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
51995                 var feature = _a[_i];
51996                 if (!feature || feature.type !== "Feature" || !feature.geometry) {
51997                     throw new Error("Invalid input to " + name + ", Feature with geometry required");
51998                 }
51999                 if (!feature.geometry || feature.geometry.type !== type) {
52000                     throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
52001                 }
52002             }
52003         }
52004         exports.collectionOf = collectionOf;
52005         /**
52006          * Get Geometry from Feature or Geometry Object
52007          *
52008          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
52009          * @returns {Geometry|null} GeoJSON Geometry Object
52010          * @throws {Error} if geojson is not a Feature or Geometry Object
52011          * @example
52012          * var point = {
52013          *   "type": "Feature",
52014          *   "properties": {},
52015          *   "geometry": {
52016          *     "type": "Point",
52017          *     "coordinates": [110, 40]
52018          *   }
52019          * }
52020          * var geom = turf.getGeom(point)
52021          * //={"type": "Point", "coordinates": [110, 40]}
52022          */
52023         function getGeom(geojson) {
52024             if (geojson.type === "Feature") {
52025                 return geojson.geometry;
52026             }
52027             return geojson;
52028         }
52029         exports.getGeom = getGeom;
52030         /**
52031          * Get GeoJSON object's type, Geometry type is prioritize.
52032          *
52033          * @param {GeoJSON} geojson GeoJSON object
52034          * @param {string} [name="geojson"] name of the variable to display in error message
52035          * @returns {string} GeoJSON type
52036          * @example
52037          * var point = {
52038          *   "type": "Feature",
52039          *   "properties": {},
52040          *   "geometry": {
52041          *     "type": "Point",
52042          *     "coordinates": [110, 40]
52043          *   }
52044          * }
52045          * var geom = turf.getType(point)
52046          * //="Point"
52047          */
52048         function getType(geojson, name) {
52049             if (geojson.type === "FeatureCollection") {
52050                 return "FeatureCollection";
52051             }
52052             if (geojson.type === "GeometryCollection") {
52053                 return "GeometryCollection";
52054             }
52055             if (geojson.type === "Feature" && geojson.geometry !== null) {
52056                 return geojson.geometry.type;
52057             }
52058             return geojson.type;
52059         }
52060         exports.getType = getType;
52061         });
52062
52063         unwrapExports(invariant);
52064         var invariant_1 = invariant.getCoord;
52065         var invariant_2 = invariant.getCoords;
52066         var invariant_3 = invariant.containsNumber;
52067         var invariant_4 = invariant.geojsonType;
52068         var invariant_5 = invariant.featureOf;
52069         var invariant_6 = invariant.collectionOf;
52070         var invariant_7 = invariant.getGeom;
52071         var invariant_8 = invariant.getType;
52072
52073         var lineclip_1$1 = lineclip$1;
52074         var default_1$1 = lineclip$1;
52075
52076         lineclip$1.polyline = lineclip$1;
52077         lineclip$1.polygon = polygonclip$1;
52078
52079
52080         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
52081         // handle polylines rather than just segments
52082
52083         function lineclip$1(points, bbox, result) {
52084
52085             var len = points.length,
52086                 codeA = bitCode$1(points[0], bbox),
52087                 part = [],
52088                 i, a, b, codeB, lastCode;
52089
52090             if (!result) result = [];
52091
52092             for (i = 1; i < len; i++) {
52093                 a = points[i - 1];
52094                 b = points[i];
52095                 codeB = lastCode = bitCode$1(b, bbox);
52096
52097                 while (true) {
52098
52099                     if (!(codeA | codeB)) { // accept
52100                         part.push(a);
52101
52102                         if (codeB !== lastCode) { // segment went outside
52103                             part.push(b);
52104
52105                             if (i < len - 1) { // start a new line
52106                                 result.push(part);
52107                                 part = [];
52108                             }
52109                         } else if (i === len - 1) {
52110                             part.push(b);
52111                         }
52112                         break;
52113
52114                     } else if (codeA & codeB) { // trivial reject
52115                         break;
52116
52117                     } else if (codeA) { // a outside, intersect with clip edge
52118                         a = intersect$2(a, b, codeA, bbox);
52119                         codeA = bitCode$1(a, bbox);
52120
52121                     } else { // b outside
52122                         b = intersect$2(a, b, codeB, bbox);
52123                         codeB = bitCode$1(b, bbox);
52124                     }
52125                 }
52126
52127                 codeA = lastCode;
52128             }
52129
52130             if (part.length) result.push(part);
52131
52132             return result;
52133         }
52134
52135         // Sutherland-Hodgeman polygon clipping algorithm
52136
52137         function polygonclip$1(points, bbox) {
52138
52139             var result, edge, prev, prevInside, i, p, inside;
52140
52141             // clip against each side of the clip rectangle
52142             for (edge = 1; edge <= 8; edge *= 2) {
52143                 result = [];
52144                 prev = points[points.length - 1];
52145                 prevInside = !(bitCode$1(prev, bbox) & edge);
52146
52147                 for (i = 0; i < points.length; i++) {
52148                     p = points[i];
52149                     inside = !(bitCode$1(p, bbox) & edge);
52150
52151                     // if segment goes through the clip window, add an intersection
52152                     if (inside !== prevInside) result.push(intersect$2(prev, p, edge, bbox));
52153
52154                     if (inside) result.push(p); // add a point if it's inside
52155
52156                     prev = p;
52157                     prevInside = inside;
52158                 }
52159
52160                 points = result;
52161
52162                 if (!points.length) break;
52163             }
52164
52165             return result;
52166         }
52167
52168         // intersect a segment against one of the 4 lines that make up the bbox
52169
52170         function intersect$2(a, b, edge, bbox) {
52171             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
52172                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
52173                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
52174                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
52175                    null;
52176         }
52177
52178         // bit code reflects the point position relative to the bbox:
52179
52180         //         left  mid  right
52181         //    top  1001  1000  1010
52182         //    mid  0001  0000  0010
52183         // bottom  0101  0100  0110
52184
52185         function bitCode$1(p, bbox) {
52186             var code = 0;
52187
52188             if (p[0] < bbox[0]) code |= 1; // left
52189             else if (p[0] > bbox[2]) code |= 2; // right
52190
52191             if (p[1] < bbox[1]) code |= 4; // bottom
52192             else if (p[1] > bbox[3]) code |= 8; // top
52193
52194             return code;
52195         }
52196         lineclip_1$1.default = default_1$1;
52197
52198         var bboxClip_1 = createCommonjsModule(function (module, exports) {
52199         var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
52200             if (mod && mod.__esModule) return mod;
52201             var result = {};
52202             if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
52203             result["default"] = mod;
52204             return result;
52205         };
52206         Object.defineProperty(exports, "__esModule", { value: true });
52207
52208
52209         var lineclip = __importStar(lineclip_1$1);
52210         /**
52211          * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
52212          * [lineclip](https://github.com/mapbox/lineclip).
52213          * May result in degenerate edges when clipping Polygons.
52214          *
52215          * @name bboxClip
52216          * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
52217          * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
52218          * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
52219          * @example
52220          * var bbox = [0, 0, 10, 10];
52221          * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
52222          *
52223          * var clipped = turf.bboxClip(poly, bbox);
52224          *
52225          * //addToMap
52226          * var addToMap = [bbox, poly, clipped]
52227          */
52228         function bboxClip(feature, bbox) {
52229             var geom = invariant.getGeom(feature);
52230             var type = geom.type;
52231             var properties = feature.type === "Feature" ? feature.properties : {};
52232             var coords = geom.coordinates;
52233             switch (type) {
52234                 case "LineString":
52235                 case "MultiLineString":
52236                     var lines_1 = [];
52237                     if (type === "LineString") {
52238                         coords = [coords];
52239                     }
52240                     coords.forEach(function (line) {
52241                         lineclip.polyline(line, bbox, lines_1);
52242                     });
52243                     if (lines_1.length === 1) {
52244                         return helpers.lineString(lines_1[0], properties);
52245                     }
52246                     return helpers.multiLineString(lines_1, properties);
52247                 case "Polygon":
52248                     return helpers.polygon(clipPolygon(coords, bbox), properties);
52249                 case "MultiPolygon":
52250                     return helpers.multiPolygon(coords.map(function (poly) {
52251                         return clipPolygon(poly, bbox);
52252                     }), properties);
52253                 default:
52254                     throw new Error("geometry " + type + " not supported");
52255             }
52256         }
52257         exports.default = bboxClip;
52258         function clipPolygon(rings, bbox) {
52259             var outRings = [];
52260             for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
52261                 var ring = rings_1[_i];
52262                 var clipped = lineclip.polygon(ring, bbox);
52263                 if (clipped.length > 0) {
52264                     if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
52265                         clipped.push(clipped[0]);
52266                     }
52267                     if (clipped.length >= 4) {
52268                         outRings.push(clipped);
52269                     }
52270                 }
52271             }
52272             return outRings;
52273         }
52274         });
52275
52276         var turf_bboxClip = unwrapExports(bboxClip_1);
52277
52278         var fastJsonStableStringify = function (data, opts) {
52279             if (!opts) opts = {};
52280             if (typeof opts === 'function') opts = { cmp: opts };
52281             var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
52282
52283             var cmp = opts.cmp && (function (f) {
52284                 return function (node) {
52285                     return function (a, b) {
52286                         var aobj = { key: a, value: node[a] };
52287                         var bobj = { key: b, value: node[b] };
52288                         return f(aobj, bobj);
52289                     };
52290                 };
52291             })(opts.cmp);
52292
52293             var seen = [];
52294             return (function stringify (node) {
52295                 if (node && node.toJSON && typeof node.toJSON === 'function') {
52296                     node = node.toJSON();
52297                 }
52298
52299                 if (node === undefined) return;
52300                 if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';
52301                 if (typeof node !== 'object') return JSON.stringify(node);
52302
52303                 var i, out;
52304                 if (Array.isArray(node)) {
52305                     out = '[';
52306                     for (i = 0; i < node.length; i++) {
52307                         if (i) out += ',';
52308                         out += stringify(node[i]) || 'null';
52309                     }
52310                     return out + ']';
52311                 }
52312
52313                 if (node === null) return 'null';
52314
52315                 if (seen.indexOf(node) !== -1) {
52316                     if (cycles) return JSON.stringify('__cycle__');
52317                     throw new TypeError('Converting circular structure to JSON');
52318                 }
52319
52320                 var seenIndex = seen.push(node) - 1;
52321                 var keys = Object.keys(node).sort(cmp && cmp(node));
52322                 out = '';
52323                 for (i = 0; i < keys.length; i++) {
52324                     var key = keys[i];
52325                     var value = stringify(node[key]);
52326
52327                     if (!value) continue;
52328                     if (out) out += ',';
52329                     out += JSON.stringify(key) + ':' + value;
52330                 }
52331                 seen.splice(seenIndex, 1);
52332                 return '{' + out + '}';
52333             })(data);
52334         };
52335
52336         var martinez_umd = createCommonjsModule(function (module, exports) {
52337         /**
52338          * martinez v0.5.0
52339          * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
52340          *
52341          * @author Alex Milevski <info@w8r.name>
52342          * @license MIT
52343          * @preserve
52344          */
52345
52346         (function (global, factory) {
52347            factory(exports) ;
52348         }(commonjsGlobal, (function (exports) {
52349           function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
52350
52351           var SplayTree = function SplayTree(compare, noDuplicates) {
52352             if ( compare === void 0 ) compare = DEFAULT_COMPARE;
52353             if ( noDuplicates === void 0 ) noDuplicates = false;
52354
52355             this._compare = compare;
52356             this._root = null;
52357             this._size = 0;
52358             this._noDuplicates = !!noDuplicates;
52359           };
52360
52361           var prototypeAccessors = { size: { configurable: true } };
52362
52363
52364           SplayTree.prototype.rotateLeft = function rotateLeft (x) {
52365             var y = x.right;
52366             if (y) {
52367               x.right = y.left;
52368               if (y.left) { y.left.parent = x; }
52369               y.parent = x.parent;
52370             }
52371
52372             if (!x.parent)              { this._root = y; }
52373             else if (x === x.parent.left) { x.parent.left = y; }
52374             else                        { x.parent.right = y; }
52375             if (y) { y.left = x; }
52376             x.parent = y;
52377           };
52378
52379
52380           SplayTree.prototype.rotateRight = function rotateRight (x) {
52381             var y = x.left;
52382             if (y) {
52383               x.left = y.right;
52384               if (y.right) { y.right.parent = x; }
52385               y.parent = x.parent;
52386             }
52387
52388             if (!x.parent)             { this._root = y; }
52389             else if(x === x.parent.left) { x.parent.left = y; }
52390             else                       { x.parent.right = y; }
52391             if (y) { y.right = x; }
52392             x.parent = y;
52393           };
52394
52395
52396           SplayTree.prototype._splay = function _splay (x) {
52397               var this$1 = this;
52398
52399             while (x.parent) {
52400               var p = x.parent;
52401               if (!p.parent) {
52402                 if (p.left === x) { this$1.rotateRight(p); }
52403                 else            { this$1.rotateLeft(p); }
52404               } else if (p.left === x && p.parent.left === p) {
52405                 this$1.rotateRight(p.parent);
52406                 this$1.rotateRight(p);
52407               } else if (p.right === x && p.parent.right === p) {
52408                 this$1.rotateLeft(p.parent);
52409                 this$1.rotateLeft(p);
52410               } else if (p.left === x && p.parent.right === p) {
52411                 this$1.rotateRight(p);
52412                 this$1.rotateLeft(p);
52413               } else {
52414                 this$1.rotateLeft(p);
52415                 this$1.rotateRight(p);
52416               }
52417             }
52418           };
52419
52420
52421           SplayTree.prototype.splay = function splay (x) {
52422               var this$1 = this;
52423
52424             var p, gp, ggp, l, r;
52425
52426             while (x.parent) {
52427               p = x.parent;
52428               gp = p.parent;
52429
52430               if (gp && gp.parent) {
52431                 ggp = gp.parent;
52432                 if (ggp.left === gp) { ggp.left= x; }
52433                 else               { ggp.right = x; }
52434                 x.parent = ggp;
52435               } else {
52436                 x.parent = null;
52437                 this$1._root = x;
52438               }
52439
52440               l = x.left; r = x.right;
52441
52442               if (x === p.left) { // left
52443                 if (gp) {
52444                   if (gp.left === p) {
52445                     /* zig-zig */
52446                     if (p.right) {
52447                       gp.left = p.right;
52448                       gp.left.parent = gp;
52449                     } else { gp.left = null; }
52450
52451                     p.right = gp;
52452                     gp.parent = p;
52453                   } else {
52454                     /* zig-zag */
52455                     if (l) {
52456                       gp.right = l;
52457                       l.parent = gp;
52458                     } else { gp.right = null; }
52459
52460                     x.left  = gp;
52461                     gp.parent = x;
52462                   }
52463                 }
52464                 if (r) {
52465                   p.left = r;
52466                   r.parent = p;
52467                 } else { p.left = null; }
52468
52469                 x.right= p;
52470                 p.parent = x;
52471               } else { // right
52472                 if (gp) {
52473                   if (gp.right === p) {
52474                     /* zig-zig */
52475                     if (p.left) {
52476                       gp.right = p.left;
52477                       gp.right.parent = gp;
52478                     } else { gp.right = null; }
52479
52480                     p.left = gp;
52481                     gp.parent = p;
52482                   } else {
52483                     /* zig-zag */
52484                     if (r) {
52485                       gp.left = r;
52486                       r.parent = gp;
52487                     } else { gp.left = null; }
52488
52489                     x.right = gp;
52490                     gp.parent = x;
52491                   }
52492                 }
52493                 if (l) {
52494                   p.right = l;
52495                   l.parent = p;
52496                 } else { p.right = null; }
52497
52498                 x.left = p;
52499                 p.parent = x;
52500               }
52501             }
52502           };
52503
52504
52505           SplayTree.prototype.replace = function replace (u, v) {
52506             if (!u.parent) { this._root = v; }
52507             else if (u === u.parent.left) { u.parent.left = v; }
52508             else { u.parent.right = v; }
52509             if (v) { v.parent = u.parent; }
52510           };
52511
52512
52513           SplayTree.prototype.minNode = function minNode (u) {
52514               if ( u === void 0 ) u = this._root;
52515
52516             if (u) { while (u.left) { u = u.left; } }
52517             return u;
52518           };
52519
52520
52521           SplayTree.prototype.maxNode = function maxNode (u) {
52522               if ( u === void 0 ) u = this._root;
52523
52524             if (u) { while (u.right) { u = u.right; } }
52525             return u;
52526           };
52527
52528
52529           SplayTree.prototype.insert = function insert (key, data) {
52530             var z = this._root;
52531             var p = null;
52532             var comp = this._compare;
52533             var cmp;
52534
52535             if (this._noDuplicates) {
52536               while (z) {
52537                 p = z;
52538                 cmp = comp(z.key, key);
52539                 if (cmp === 0) { return; }
52540                 else if (comp(z.key, key) < 0) { z = z.right; }
52541                 else { z = z.left; }
52542               }
52543             } else {
52544               while (z) {
52545                 p = z;
52546                 if (comp(z.key, key) < 0) { z = z.right; }
52547                 else { z = z.left; }
52548               }
52549             }
52550
52551             z = { key: key, data: data, left: null, right: null, parent: p };
52552
52553             if (!p)                        { this._root = z; }
52554             else if (comp(p.key, z.key) < 0) { p.right = z; }
52555             else                           { p.left= z; }
52556
52557             this.splay(z);
52558             this._size++;
52559             return z;
52560           };
52561
52562
52563           SplayTree.prototype.find = function find (key) {
52564             var z  = this._root;
52565             var comp = this._compare;
52566             while (z) {
52567               var cmp = comp(z.key, key);
52568               if    (cmp < 0) { z = z.right; }
52569               else if (cmp > 0) { z = z.left; }
52570               else            { return z; }
52571             }
52572             return null;
52573           };
52574
52575           /**
52576            * Whether the tree contains a node with the given key
52577            * @param{Key} key
52578            * @return {boolean} true/false
52579            */
52580           SplayTree.prototype.contains = function contains (key) {
52581             var node     = this._root;
52582             var comparator = this._compare;
52583             while (node){
52584               var cmp = comparator(key, node.key);
52585               if    (cmp === 0) { return true; }
52586               else if (cmp < 0) { node = node.left; }
52587               else              { node = node.right; }
52588             }
52589
52590             return false;
52591           };
52592
52593
52594           SplayTree.prototype.remove = function remove (key) {
52595             var z = this.find(key);
52596
52597             if (!z) { return false; }
52598
52599             this.splay(z);
52600
52601             if (!z.left) { this.replace(z, z.right); }
52602             else if (!z.right) { this.replace(z, z.left); }
52603             else {
52604               var y = this.minNode(z.right);
52605               if (y.parent !== z) {
52606                 this.replace(y, y.right);
52607                 y.right = z.right;
52608                 y.right.parent = y;
52609               }
52610               this.replace(z, y);
52611               y.left = z.left;
52612               y.left.parent = y;
52613             }
52614
52615             this._size--;
52616             return true;
52617           };
52618
52619
52620           SplayTree.prototype.removeNode = function removeNode (z) {
52621             if (!z) { return false; }
52622
52623             this.splay(z);
52624
52625             if (!z.left) { this.replace(z, z.right); }
52626             else if (!z.right) { this.replace(z, z.left); }
52627             else {
52628               var y = this.minNode(z.right);
52629               if (y.parent !== z) {
52630                 this.replace(y, y.right);
52631                 y.right = z.right;
52632                 y.right.parent = y;
52633               }
52634               this.replace(z, y);
52635               y.left = z.left;
52636               y.left.parent = y;
52637             }
52638
52639             this._size--;
52640             return true;
52641           };
52642
52643
52644           SplayTree.prototype.erase = function erase (key) {
52645             var z = this.find(key);
52646             if (!z) { return; }
52647
52648             this.splay(z);
52649
52650             var s = z.left;
52651             var t = z.right;
52652
52653             var sMax = null;
52654             if (s) {
52655               s.parent = null;
52656               sMax = this.maxNode(s);
52657               this.splay(sMax);
52658               this._root = sMax;
52659             }
52660             if (t) {
52661               if (s) { sMax.right = t; }
52662               else { this._root = t; }
52663               t.parent = sMax;
52664             }
52665
52666             this._size--;
52667           };
52668
52669           /**
52670            * Removes and returns the node with smallest key
52671            * @return {?Node}
52672            */
52673           SplayTree.prototype.pop = function pop () {
52674             var node = this._root, returnValue = null;
52675             if (node) {
52676               while (node.left) { node = node.left; }
52677               returnValue = { key: node.key, data: node.data };
52678               this.remove(node.key);
52679             }
52680             return returnValue;
52681           };
52682
52683
52684           /* eslint-disable class-methods-use-this */
52685
52686           /**
52687            * Successor node
52688            * @param{Node} node
52689            * @return {?Node}
52690            */
52691           SplayTree.prototype.next = function next (node) {
52692             var successor = node;
52693             if (successor) {
52694               if (successor.right) {
52695                 successor = successor.right;
52696                 while (successor && successor.left) { successor = successor.left; }
52697               } else {
52698                 successor = node.parent;
52699                 while (successor && successor.right === node) {
52700                   node = successor; successor = successor.parent;
52701                 }
52702               }
52703             }
52704             return successor;
52705           };
52706
52707
52708           /**
52709            * Predecessor node
52710            * @param{Node} node
52711            * @return {?Node}
52712            */
52713           SplayTree.prototype.prev = function prev (node) {
52714             var predecessor = node;
52715             if (predecessor) {
52716               if (predecessor.left) {
52717                 predecessor = predecessor.left;
52718                 while (predecessor && predecessor.right) { predecessor = predecessor.right; }
52719               } else {
52720                 predecessor = node.parent;
52721                 while (predecessor && predecessor.left === node) {
52722                   node = predecessor;
52723                   predecessor = predecessor.parent;
52724                 }
52725               }
52726             }
52727             return predecessor;
52728           };
52729           /* eslint-enable class-methods-use-this */
52730
52731
52732           /**
52733            * @param{forEachCallback} callback
52734            * @return {SplayTree}
52735            */
52736           SplayTree.prototype.forEach = function forEach (callback) {
52737             var current = this._root;
52738             var s = [], done = false, i = 0;
52739
52740             while (!done) {
52741               // Reach the left most Node of the current Node
52742               if (current) {
52743                 // Place pointer to a tree node on the stack
52744                 // before traversing the node's left subtree
52745                 s.push(current);
52746                 current = current.left;
52747               } else {
52748                 // BackTrack from the empty subtree and visit the Node
52749                 // at the top of the stack; however, if the stack is
52750                 // empty you are done
52751                 if (s.length > 0) {
52752                   current = s.pop();
52753                   callback(current, i++);
52754
52755                   // We have visited the node and its left
52756                   // subtree. Now, it's right subtree's turn
52757                   current = current.right;
52758                 } else { done = true; }
52759               }
52760             }
52761             return this;
52762           };
52763
52764
52765           /**
52766            * Walk key range from `low` to `high`. Stops if `fn` returns a value.
52767            * @param{Key}    low
52768            * @param{Key}    high
52769            * @param{Function} fn
52770            * @param{*?}     ctx
52771            * @return {SplayTree}
52772            */
52773           SplayTree.prototype.range = function range (low, high, fn, ctx) {
52774               var this$1 = this;
52775
52776             var Q = [];
52777             var compare = this._compare;
52778             var node = this._root, cmp;
52779
52780             while (Q.length !== 0 || node) {
52781               if (node) {
52782                 Q.push(node);
52783                 node = node.left;
52784               } else {
52785                 node = Q.pop();
52786                 cmp = compare(node.key, high);
52787                 if (cmp > 0) {
52788                   break;
52789                 } else if (compare(node.key, low) >= 0) {
52790                   if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
52791                 }
52792                 node = node.right;
52793               }
52794             }
52795             return this;
52796           };
52797
52798           /**
52799            * Returns all keys in order
52800            * @return {Array<Key>}
52801            */
52802           SplayTree.prototype.keys = function keys () {
52803             var current = this._root;
52804             var s = [], r = [], done = false;
52805
52806             while (!done) {
52807               if (current) {
52808                 s.push(current);
52809                 current = current.left;
52810               } else {
52811                 if (s.length > 0) {
52812                   current = s.pop();
52813                   r.push(current.key);
52814                   current = current.right;
52815                 } else { done = true; }
52816               }
52817             }
52818             return r;
52819           };
52820
52821
52822           /**
52823            * Returns `data` fields of all nodes in order.
52824            * @return {Array<Value>}
52825            */
52826           SplayTree.prototype.values = function values () {
52827             var current = this._root;
52828             var s = [], r = [], done = false;
52829
52830             while (!done) {
52831               if (current) {
52832                 s.push(current);
52833                 current = current.left;
52834               } else {
52835                 if (s.length > 0) {
52836                   current = s.pop();
52837                   r.push(current.data);
52838                   current = current.right;
52839                 } else { done = true; }
52840               }
52841             }
52842             return r;
52843           };
52844
52845
52846           /**
52847            * Returns node at given index
52848            * @param{number} index
52849            * @return {?Node}
52850            */
52851           SplayTree.prototype.at = function at (index) {
52852             // removed after a consideration, more misleading than useful
52853             // index = index % this.size;
52854             // if (index < 0) index = this.size - index;
52855
52856             var current = this._root;
52857             var s = [], done = false, i = 0;
52858
52859             while (!done) {
52860               if (current) {
52861                 s.push(current);
52862                 current = current.left;
52863               } else {
52864                 if (s.length > 0) {
52865                   current = s.pop();
52866                   if (i === index) { return current; }
52867                   i++;
52868                   current = current.right;
52869                 } else { done = true; }
52870               }
52871             }
52872             return null;
52873           };
52874
52875           /**
52876            * Bulk-load items. Both array have to be same size
52877            * @param{Array<Key>}  keys
52878            * @param{Array<Value>}[values]
52879            * @param{Boolean}     [presort=false] Pre-sort keys and values, using
52880            *                                       tree's comparator. Sorting is done
52881            *                                       in-place
52882            * @return {AVLTree}
52883            */
52884           SplayTree.prototype.load = function load (keys, values, presort) {
52885               if ( keys === void 0 ) keys = [];
52886               if ( values === void 0 ) values = [];
52887               if ( presort === void 0 ) presort = false;
52888
52889             if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
52890             var size = keys.length;
52891             if (presort) { sort(keys, values, 0, size - 1, this._compare); }
52892             this._root = loadRecursive(null, keys, values, 0, size);
52893             this._size = size;
52894             return this;
52895           };
52896
52897
52898           SplayTree.prototype.min = function min () {
52899             var node = this.minNode(this._root);
52900             if (node) { return node.key; }
52901             else    { return null; }
52902           };
52903
52904
52905           SplayTree.prototype.max = function max () {
52906             var node = this.maxNode(this._root);
52907             if (node) { return node.key; }
52908             else    { return null; }
52909           };
52910
52911           SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
52912           prototypeAccessors.size.get = function () { return this._size; };
52913
52914
52915           /**
52916            * Create a tree and load it with items
52917            * @param{Array<Key>}        keys
52918            * @param{Array<Value>?}      [values]
52919
52920            * @param{Function?}          [comparator]
52921            * @param{Boolean?}           [presort=false] Pre-sort keys and values, using
52922            *                                             tree's comparator. Sorting is done
52923            *                                             in-place
52924            * @param{Boolean?}           [noDuplicates=false] Allow duplicates
52925            * @return {SplayTree}
52926            */
52927           SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
52928             return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
52929           };
52930
52931           Object.defineProperties( SplayTree.prototype, prototypeAccessors );
52932
52933
52934           function loadRecursive (parent, keys, values, start, end) {
52935             var size = end - start;
52936             if (size > 0) {
52937               var middle = start + Math.floor(size / 2);
52938               var key    = keys[middle];
52939               var data   = values[middle];
52940               var node   = { key: key, data: data, parent: parent };
52941               node.left    = loadRecursive(node, keys, values, start, middle);
52942               node.right   = loadRecursive(node, keys, values, middle + 1, end);
52943               return node;
52944             }
52945             return null;
52946           }
52947
52948
52949           function sort(keys, values, left, right, compare) {
52950             if (left >= right) { return; }
52951
52952             var pivot = keys[(left + right) >> 1];
52953             var i = left - 1;
52954             var j = right + 1;
52955
52956             while (true) {
52957               do { i++; } while (compare(keys[i], pivot) < 0);
52958               do { j--; } while (compare(keys[j], pivot) > 0);
52959               if (i >= j) { break; }
52960
52961               var tmp = keys[i];
52962               keys[i] = keys[j];
52963               keys[j] = tmp;
52964
52965               tmp = values[i];
52966               values[i] = values[j];
52967               values[j] = tmp;
52968             }
52969
52970             sort(keys, values,  left,     j, compare);
52971             sort(keys, values, j + 1, right, compare);
52972           }
52973
52974           var NORMAL               = 0;
52975           var NON_CONTRIBUTING     = 1;
52976           var SAME_TRANSITION      = 2;
52977           var DIFFERENT_TRANSITION = 3;
52978
52979           var INTERSECTION = 0;
52980           var UNION        = 1;
52981           var DIFFERENCE   = 2;
52982           var XOR          = 3;
52983
52984           /**
52985            * @param  {SweepEvent} event
52986            * @param  {SweepEvent} prev
52987            * @param  {Operation} operation
52988            */
52989           function computeFields (event, prev, operation) {
52990             // compute inOut and otherInOut fields
52991             if (prev === null) {
52992               event.inOut      = false;
52993               event.otherInOut = true;
52994
52995             // previous line segment in sweepline belongs to the same polygon
52996             } else {
52997               if (event.isSubject === prev.isSubject) {
52998                 event.inOut      = !prev.inOut;
52999                 event.otherInOut = prev.otherInOut;
53000
53001               // previous line segment in sweepline belongs to the clipping polygon
53002               } else {
53003                 event.inOut      = !prev.otherInOut;
53004                 event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
53005               }
53006
53007               // compute prevInResult field
53008               if (prev) {
53009                 event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
53010                   ? prev.prevInResult : prev;
53011               }
53012             }
53013
53014             // check if the line segment belongs to the Boolean operation
53015             event.inResult = inResult(event, operation);
53016           }
53017
53018
53019           /* eslint-disable indent */
53020           function inResult(event, operation) {
53021             switch (event.type) {
53022               case NORMAL:
53023                 switch (operation) {
53024                   case INTERSECTION:
53025                     return !event.otherInOut;
53026                   case UNION:
53027                     return event.otherInOut;
53028                   case DIFFERENCE:
53029                     // return (event.isSubject && !event.otherInOut) ||
53030                     //         (!event.isSubject && event.otherInOut);
53031                     return (event.isSubject && event.otherInOut) ||
53032                             (!event.isSubject && !event.otherInOut);
53033                   case XOR:
53034                     return true;
53035                 }
53036                 break;
53037               case SAME_TRANSITION:
53038                 return operation === INTERSECTION || operation === UNION;
53039               case DIFFERENT_TRANSITION:
53040                 return operation === DIFFERENCE;
53041               case NON_CONTRIBUTING:
53042                 return false;
53043             }
53044             return false;
53045           }
53046           /* eslint-enable indent */
53047
53048           var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
53049
53050             /**
53051              * Is left endpoint?
53052              * @type {Boolean}
53053              */
53054             this.left = left;
53055
53056             /**
53057              * @type {Array.<Number>}
53058              */
53059             this.point = point;
53060
53061             /**
53062              * Other edge reference
53063              * @type {SweepEvent}
53064              */
53065             this.otherEvent = otherEvent;
53066
53067             /**
53068              * Belongs to source or clipping polygon
53069              * @type {Boolean}
53070              */
53071             this.isSubject = isSubject;
53072
53073             /**
53074              * Edge contribution type
53075              * @type {Number}
53076              */
53077             this.type = edgeType || NORMAL;
53078
53079
53080             /**
53081              * In-out transition for the sweepline crossing polygon
53082              * @type {Boolean}
53083              */
53084             this.inOut = false;
53085
53086
53087             /**
53088              * @type {Boolean}
53089              */
53090             this.otherInOut = false;
53091
53092             /**
53093              * Previous event in result?
53094              * @type {SweepEvent}
53095              */
53096             this.prevInResult = null;
53097
53098             /**
53099              * Does event belong to result?
53100              * @type {Boolean}
53101              */
53102             this.inResult = false;
53103
53104
53105             // connection step
53106
53107             /**
53108              * @type {Boolean}
53109              */
53110             this.resultInOut = false;
53111
53112             this.isExteriorRing = true;
53113           };
53114
53115
53116           /**
53117            * @param{Array.<Number>}p
53118            * @return {Boolean}
53119            */
53120           SweepEvent.prototype.isBelow = function isBelow (p) {
53121             var p0 = this.point, p1 = this.otherEvent.point;
53122             return this.left
53123               ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
53124               // signedArea(this.point, this.otherEvent.point, p) > 0 :
53125               : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
53126               //signedArea(this.otherEvent.point, this.point, p) > 0;
53127           };
53128
53129
53130           /**
53131            * @param{Array.<Number>}p
53132            * @return {Boolean}
53133            */
53134           SweepEvent.prototype.isAbove = function isAbove (p) {
53135             return !this.isBelow(p);
53136           };
53137
53138
53139           /**
53140            * @return {Boolean}
53141            */
53142           SweepEvent.prototype.isVertical = function isVertical () {
53143             return this.point[0] === this.otherEvent.point[0];
53144           };
53145
53146
53147           SweepEvent.prototype.clone = function clone () {
53148             var copy = new SweepEvent(
53149               this.point, this.left, this.otherEvent, this.isSubject, this.type);
53150
53151             copy.inResult     = this.inResult;
53152             copy.prevInResult = this.prevInResult;
53153             copy.isExteriorRing = this.isExteriorRing;
53154             copy.inOut        = this.inOut;
53155             copy.otherInOut   = this.otherInOut;
53156
53157             return copy;
53158           };
53159
53160           function equals(p1, p2) {
53161             if (p1[0] === p2[0]) {
53162               if (p1[1] === p2[1]) {
53163                 return true;
53164               } else {
53165                 return false;
53166               }
53167             }
53168             return false;
53169           }
53170
53171           // const EPSILON = 1e-9;
53172           // const abs = Math.abs;
53173           // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
53174           // Precision problem.
53175           //
53176           // module.exports = function equals(p1, p2) {
53177           //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
53178           // };
53179
53180           /**
53181            * Signed area of the triangle (p0, p1, p2)
53182            * @param  {Array.<Number>} p0
53183            * @param  {Array.<Number>} p1
53184            * @param  {Array.<Number>} p2
53185            * @return {Number}
53186            */
53187           function signedArea(p0, p1, p2) {
53188             return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
53189           }
53190
53191           /**
53192            * @param  {SweepEvent} e1
53193            * @param  {SweepEvent} e2
53194            * @return {Number}
53195            */
53196           function compareEvents(e1, e2) {
53197             var p1 = e1.point;
53198             var p2 = e2.point;
53199
53200             // Different x-coordinate
53201             if (p1[0] > p2[0]) { return 1; }
53202             if (p1[0] < p2[0]) { return -1; }
53203
53204             // Different points, but same x-coordinate
53205             // Event with lower y-coordinate is processed first
53206             if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
53207
53208             return specialCases(e1, e2, p1);
53209           }
53210
53211
53212           /* eslint-disable no-unused-vars */
53213           function specialCases(e1, e2, p1, p2) {
53214             // Same coordinates, but one is a left endpoint and the other is
53215             // a right endpoint. The right endpoint is processed first
53216             if (e1.left !== e2.left)
53217               { return e1.left ? 1 : -1; }
53218
53219             // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
53220             // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
53221             // Same coordinates, both events
53222             // are left endpoints or right endpoints.
53223             // not collinear
53224             if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
53225               // the event associate to the bottom segment is processed first
53226               return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
53227             }
53228
53229             return (!e1.isSubject && e2.isSubject) ? 1 : -1;
53230           }
53231           /* eslint-enable no-unused-vars */
53232
53233           /**
53234            * @param  {SweepEvent} se
53235            * @param  {Array.<Number>} p
53236            * @param  {Queue} queue
53237            * @return {Queue}
53238            */
53239           function divideSegment(se, p, queue)  {
53240             var r = new SweepEvent(p, false, se,            se.isSubject);
53241             var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);
53242
53243             /* eslint-disable no-console */
53244             if (equals(se.point, se.otherEvent.point)) {
53245
53246               console.warn('what is that, a collapsed segment?', se);
53247             }
53248             /* eslint-enable no-console */
53249
53250             r.contourId = l.contourId = se.contourId;
53251
53252             // avoid a rounding error. The left event would be processed after the right event
53253             if (compareEvents(l, se.otherEvent) > 0) {
53254               se.otherEvent.left = true;
53255               l.left = false;
53256             }
53257
53258             // avoid a rounding error. The left event would be processed after the right event
53259             // if (compareEvents(se, r) > 0) {}
53260
53261             se.otherEvent.otherEvent = l;
53262             se.otherEvent = r;
53263
53264             queue.push(l);
53265             queue.push(r);
53266
53267             return queue;
53268           }
53269
53270           //const EPS = 1e-9;
53271
53272           /**
53273            * Finds the magnitude of the cross product of two vectors (if we pretend
53274            * they're in three dimensions)
53275            *
53276            * @param {Object} a First vector
53277            * @param {Object} b Second vector
53278            * @private
53279            * @returns {Number} The magnitude of the cross product
53280            */
53281           function crossProduct(a, b) {
53282             return (a[0] * b[1]) - (a[1] * b[0]);
53283           }
53284
53285           /**
53286            * Finds the dot product of two vectors.
53287            *
53288            * @param {Object} a First vector
53289            * @param {Object} b Second vector
53290            * @private
53291            * @returns {Number} The dot product
53292            */
53293           function dotProduct(a, b) {
53294             return (a[0] * b[0]) + (a[1] * b[1]);
53295           }
53296
53297           /**
53298            * Finds the intersection (if any) between two line segments a and b, given the
53299            * line segments' end points a1, a2 and b1, b2.
53300            *
53301            * This algorithm is based on Schneider and Eberly.
53302            * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
53303            * Page 244.
53304            *
53305            * @param {Array.<Number>} a1 point of first line
53306            * @param {Array.<Number>} a2 point of first line
53307            * @param {Array.<Number>} b1 point of second line
53308            * @param {Array.<Number>} b2 point of second line
53309            * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints
53310            *                                         (meaning connected segments) as
53311            *                                         intersections
53312            * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
53313            * intersection. If they overlap, the two end points of the overlapping segment.
53314            * Otherwise, null.
53315            */
53316           function intersection (a1, a2, b1, b2, noEndpointTouch) {
53317             // The algorithm expects our lines in the form P + sd, where P is a point,
53318             // s is on the interval [0, 1], and d is a vector.
53319             // We are passed two points. P can be the first point of each pair. The
53320             // vector, then, could be thought of as the distance (in x and y components)
53321             // from the first point to the second point.
53322             // So first, let's make our vectors:
53323             var va = [a2[0] - a1[0], a2[1] - a1[1]];
53324             var vb = [b2[0] - b1[0], b2[1] - b1[1]];
53325             // We also define a function to convert back to regular point form:
53326
53327             /* eslint-disable arrow-body-style */
53328
53329             function toPoint(p, s, d) {
53330               return [
53331                 p[0] + s * d[0],
53332                 p[1] + s * d[1]
53333               ];
53334             }
53335
53336             /* eslint-enable arrow-body-style */
53337
53338             // The rest is pretty much a straight port of the algorithm.
53339             var e = [b1[0] - a1[0], b1[1] - a1[1]];
53340             var kross    = crossProduct(va, vb);
53341             var sqrKross = kross * kross;
53342             var sqrLenA  = dotProduct(va, va);
53343             //const sqrLenB  = dotProduct(vb, vb);
53344
53345             // Check for line intersection. This works because of the properties of the
53346             // cross product -- specifically, two vectors are parallel if and only if the
53347             // cross product is the 0 vector. The full calculation involves relative error
53348             // to account for possible very small line segments. See Schneider & Eberly
53349             // for details.
53350             if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
53351               // If they're not parallel, then (because these are line segments) they
53352               // still might not actually intersect. This code checks that the
53353               // intersection point of the lines is actually on both line segments.
53354               var s = crossProduct(e, vb) / kross;
53355               if (s < 0 || s > 1) {
53356                 // not on line segment a
53357                 return null;
53358               }
53359               var t = crossProduct(e, va) / kross;
53360               if (t < 0 || t > 1) {
53361                 // not on line segment b
53362                 return null;
53363               }
53364               if (s === 0 || s === 1) {
53365                 // on an endpoint of line segment a
53366                 return noEndpointTouch ? null : [toPoint(a1, s, va)];
53367               }
53368               if (t === 0 || t === 1) {
53369                 // on an endpoint of line segment b
53370                 return noEndpointTouch ? null : [toPoint(b1, t, vb)];
53371               }
53372               return [toPoint(a1, s, va)];
53373             }
53374
53375             // If we've reached this point, then the lines are either parallel or the
53376             // same, but the segments could overlap partially or fully, or not at all.
53377             // So we need to find the overlap, if any. To do that, we can use e, which is
53378             // the (vector) difference between the two initial points. If this is parallel
53379             // with the line itself, then the two lines are the same line, and there will
53380             // be overlap.
53381             //const sqrLenE = dotProduct(e, e);
53382             kross = crossProduct(e, va);
53383             sqrKross = kross * kross;
53384
53385             if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
53386             // Lines are just parallel, not the same. No overlap.
53387               return null;
53388             }
53389
53390             var sa = dotProduct(va, e) / sqrLenA;
53391             var sb = sa + dotProduct(va, vb) / sqrLenA;
53392             var smin = Math.min(sa, sb);
53393             var smax = Math.max(sa, sb);
53394
53395             // this is, essentially, the FindIntersection acting on floats from
53396             // Schneider & Eberly, just inlined into this function.
53397             if (smin <= 1 && smax >= 0) {
53398
53399               // overlap on an end point
53400               if (smin === 1) {
53401                 return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
53402               }
53403
53404               if (smax === 0) {
53405                 return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
53406               }
53407
53408               if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
53409
53410               // There's overlap on a segment -- two points of intersection. Return both.
53411               return [
53412                 toPoint(a1, smin > 0 ? smin : 0, va),
53413                 toPoint(a1, smax < 1 ? smax : 1, va)
53414               ];
53415             }
53416
53417             return null;
53418           }
53419
53420           /**
53421            * @param  {SweepEvent} se1
53422            * @param  {SweepEvent} se2
53423            * @param  {Queue}      queue
53424            * @return {Number}
53425            */
53426           function possibleIntersection (se1, se2, queue) {
53427             // that disallows self-intersecting polygons,
53428             // did cost us half a day, so I'll leave it
53429             // out of respect
53430             // if (se1.isSubject === se2.isSubject) return;
53431             var inter = intersection(
53432               se1.point, se1.otherEvent.point,
53433               se2.point, se2.otherEvent.point
53434             );
53435
53436             var nintersections = inter ? inter.length : 0;
53437             if (nintersections === 0) { return 0; } // no intersection
53438
53439             // the line segments intersect at an endpoint of both line segments
53440             if ((nintersections === 1) &&
53441                 (equals(se1.point, se2.point) ||
53442                  equals(se1.otherEvent.point, se2.otherEvent.point))) {
53443               return 0;
53444             }
53445
53446             if (nintersections === 2 && se1.isSubject === se2.isSubject) {
53447               // if(se1.contourId === se2.contourId){
53448               // console.warn('Edges of the same polygon overlap',
53449               //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
53450               // }
53451               //throw new Error('Edges of the same polygon overlap');
53452               return 0;
53453             }
53454
53455             // The line segments associated to se1 and se2 intersect
53456             if (nintersections === 1) {
53457
53458               // if the intersection point is not an endpoint of se1
53459               if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
53460                 divideSegment(se1, inter[0], queue);
53461               }
53462
53463               // if the intersection point is not an endpoint of se2
53464               if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
53465                 divideSegment(se2, inter[0], queue);
53466               }
53467               return 1;
53468             }
53469
53470             // The line segments associated to se1 and se2 overlap
53471             var events        = [];
53472             var leftCoincide  = false;
53473             var rightCoincide = false;
53474
53475             if (equals(se1.point, se2.point)) {
53476               leftCoincide = true; // linked
53477             } else if (compareEvents(se1, se2) === 1) {
53478               events.push(se2, se1);
53479             } else {
53480               events.push(se1, se2);
53481             }
53482
53483             if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
53484               rightCoincide = true;
53485             } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
53486               events.push(se2.otherEvent, se1.otherEvent);
53487             } else {
53488               events.push(se1.otherEvent, se2.otherEvent);
53489             }
53490
53491             if ((leftCoincide && rightCoincide) || leftCoincide) {
53492               // both line segments are equal or share the left endpoint
53493               se2.type = NON_CONTRIBUTING;
53494               se1.type = (se2.inOut === se1.inOut)
53495                 ? SAME_TRANSITION : DIFFERENT_TRANSITION;
53496
53497               if (leftCoincide && !rightCoincide) {
53498                 // honestly no idea, but changing events selection from [2, 1]
53499                 // to [0, 1] fixes the overlapping self-intersecting polygons issue
53500                 divideSegment(events[1].otherEvent, events[0].point, queue);
53501               }
53502               return 2;
53503             }
53504
53505             // the line segments share the right endpoint
53506             if (rightCoincide) {
53507               divideSegment(events[0], events[1].point, queue);
53508               return 3;
53509             }
53510
53511             // no line segment includes totally the other one
53512             if (events[0] !== events[3].otherEvent) {
53513               divideSegment(events[0], events[1].point, queue);
53514               divideSegment(events[1], events[2].point, queue);
53515               return 3;
53516             }
53517
53518             // one line segment includes the other one
53519             divideSegment(events[0], events[1].point, queue);
53520             divideSegment(events[3].otherEvent, events[2].point, queue);
53521
53522             return 3;
53523           }
53524
53525           /**
53526            * @param  {SweepEvent} le1
53527            * @param  {SweepEvent} le2
53528            * @return {Number}
53529            */
53530           function compareSegments(le1, le2) {
53531             if (le1 === le2) { return 0; }
53532
53533             // Segments are not collinear
53534             if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
53535               signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
53536
53537               // If they share their left endpoint use the right endpoint to sort
53538               if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
53539
53540               // Different left endpoint: use the left endpoint to sort
53541               if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
53542
53543               // has the line segment associated to e1 been inserted
53544               // into S after the line segment associated to e2 ?
53545               if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
53546
53547               // The line segment associated to e2 has been inserted
53548               // into S after the line segment associated to e1
53549               return le1.isBelow(le2.point) ? -1 : 1;
53550             }
53551
53552             if (le1.isSubject === le2.isSubject) { // same polygon
53553               var p1 = le1.point, p2 = le2.point;
53554               if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
53555                 p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
53556                 if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
53557                 else { return le1.contourId > le2.contourId ? 1 : -1; }
53558               }
53559             } else { // Segments are collinear, but belong to separate polygons
53560               return le1.isSubject ? -1 : 1;
53561             }
53562
53563             return compareEvents(le1, le2) === 1 ? 1 : -1;
53564           }
53565
53566           function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
53567             var sweepLine = new SplayTree(compareSegments);
53568             var sortedEvents = [];
53569
53570             var rightbound = Math.min(sbbox[2], cbbox[2]);
53571
53572             var prev, next, begin;
53573
53574             while (eventQueue.length !== 0) {
53575               var event = eventQueue.pop();
53576               sortedEvents.push(event);
53577
53578               // optimization by bboxes for intersection and difference goes here
53579               if ((operation === INTERSECTION && event.point[0] > rightbound) ||
53580                   (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {
53581                 break;
53582               }
53583
53584               if (event.left) {
53585                 next  = prev = sweepLine.insert(event);
53586                 begin = sweepLine.minNode();
53587
53588                 if (prev !== begin) { prev = sweepLine.prev(prev); }
53589                 else                { prev = null; }
53590
53591                 next = sweepLine.next(next);
53592
53593                 var prevEvent = prev ? prev.key : null;
53594                 var prevprevEvent = (void 0);
53595                 computeFields(event, prevEvent, operation);
53596                 if (next) {
53597                   if (possibleIntersection(event, next.key, eventQueue) === 2) {
53598                     computeFields(event, prevEvent, operation);
53599                     computeFields(event, next.key, operation);
53600                   }
53601                 }
53602
53603                 if (prev) {
53604                   if (possibleIntersection(prev.key, event, eventQueue) === 2) {
53605                     var prevprev = prev;
53606                     if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
53607                     else                    { prevprev = null; }
53608
53609                     prevprevEvent = prevprev ? prevprev.key : null;
53610                     computeFields(prevEvent, prevprevEvent, operation);
53611                     computeFields(event,     prevEvent,     operation);
53612                   }
53613                 }
53614               } else {
53615                 event = event.otherEvent;
53616                 next = prev = sweepLine.find(event);
53617
53618                 if (prev && next) {
53619
53620                   if (prev !== begin) { prev = sweepLine.prev(prev); }
53621                   else                { prev = null; }
53622
53623                   next = sweepLine.next(next);
53624                   sweepLine.remove(event);
53625
53626                   if (next && prev) {
53627                     possibleIntersection(prev.key, next.key, eventQueue);
53628                   }
53629                 }
53630               }
53631             }
53632             return sortedEvents;
53633           }
53634
53635           /**
53636            * @param  {Array.<SweepEvent>} sortedEvents
53637            * @return {Array.<SweepEvent>}
53638            */
53639           function orderEvents(sortedEvents) {
53640             var event, i, len, tmp;
53641             var resultEvents = [];
53642             for (i = 0, len = sortedEvents.length; i < len; i++) {
53643               event = sortedEvents[i];
53644               if ((event.left && event.inResult) ||
53645                 (!event.left && event.otherEvent.inResult)) {
53646                 resultEvents.push(event);
53647               }
53648             }
53649             // Due to overlapping edges the resultEvents array can be not wholly sorted
53650             var sorted = false;
53651             while (!sorted) {
53652               sorted = true;
53653               for (i = 0, len = resultEvents.length; i < len; i++) {
53654                 if ((i + 1) < len &&
53655                   compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
53656                   tmp = resultEvents[i];
53657                   resultEvents[i] = resultEvents[i + 1];
53658                   resultEvents[i + 1] = tmp;
53659                   sorted = false;
53660                 }
53661               }
53662             }
53663
53664
53665             for (i = 0, len = resultEvents.length; i < len; i++) {
53666               event = resultEvents[i];
53667               event.pos = i;
53668             }
53669
53670             // imagine, the right event is found in the beginning of the queue,
53671             // when his left counterpart is not marked yet
53672             for (i = 0, len = resultEvents.length; i < len; i++) {
53673               event = resultEvents[i];
53674               if (!event.left) {
53675                 tmp = event.pos;
53676                 event.pos = event.otherEvent.pos;
53677                 event.otherEvent.pos = tmp;
53678               }
53679             }
53680
53681             return resultEvents;
53682           }
53683
53684
53685           /**
53686            * @param  {Number} pos
53687            * @param  {Array.<SweepEvent>} resultEvents
53688            * @param  {Object>}    processed
53689            * @return {Number}
53690            */
53691           function nextPos(pos, resultEvents, processed, origIndex) {
53692             var p, p1;
53693             var newPos = pos + 1;
53694             var length = resultEvents.length;
53695
53696             p  = resultEvents[pos].point;
53697
53698             if (newPos < length)
53699               { p1 = resultEvents[newPos].point; }
53700
53701
53702             // while in range and not the current one by value
53703             while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
53704               if (!processed[newPos]) {
53705                 return newPos;
53706               } else   {
53707                 newPos++;
53708               }
53709               p1 = resultEvents[newPos].point;
53710             }
53711
53712             newPos = pos - 1;
53713
53714             while (processed[newPos] && newPos >= origIndex) {
53715               newPos--;
53716             }
53717             return newPos;
53718           }
53719
53720
53721           /**
53722            * @param  {Array.<SweepEvent>} sortedEvents
53723            * @return {Array.<*>} polygons
53724            */
53725           function connectEdges(sortedEvents, operation) {
53726             var i, len;
53727             var resultEvents = orderEvents(sortedEvents);
53728
53729             // "false"-filled array
53730             var processed = {};
53731             var result = [];
53732             var event;
53733
53734             for (i = 0, len = resultEvents.length; i < len; i++) {
53735               if (processed[i]) { continue; }
53736               var contour = [[]];
53737
53738               if (!resultEvents[i].isExteriorRing) {
53739                 if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
53740                   result.push(contour);
53741                 } else if (result.length === 0) {
53742                   result.push([[contour]]);
53743                 } else {
53744                   result[result.length - 1].push(contour[0]);
53745                 }
53746               } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
53747                 result[result.length - 1].push(contour[0]);
53748               } else {
53749                 result.push(contour);
53750               }
53751
53752               var ringId = result.length - 1;
53753               var pos = i;
53754
53755               var initial = resultEvents[i].point;
53756               contour[0].push(initial);
53757
53758               while (pos >= i) {
53759                 event = resultEvents[pos];
53760                 processed[pos] = true;
53761
53762                 if (event.left) {
53763                   event.resultInOut = false;
53764                   event.contourId   = ringId;
53765                 } else {
53766                   event.otherEvent.resultInOut = true;
53767                   event.otherEvent.contourId   = ringId;
53768                 }
53769
53770                 pos = event.pos;
53771                 processed[pos] = true;
53772                 contour[0].push(resultEvents[pos].point);
53773                 pos = nextPos(pos, resultEvents, processed, i);
53774               }
53775
53776               pos = pos === -1 ? i : pos;
53777
53778               event = resultEvents[pos];
53779               processed[pos] = processed[event.pos] = true;
53780               event.otherEvent.resultInOut = true;
53781               event.otherEvent.contourId   = ringId;
53782             }
53783
53784             // Handle if the result is a polygon (eg not multipoly)
53785             // Commented it again, let's see what do we mean by that
53786             // if (result.length === 1) result = result[0];
53787             return result;
53788           }
53789
53790           var tinyqueue = TinyQueue;
53791           var default_1 = TinyQueue;
53792
53793           function TinyQueue(data, compare) {
53794               var this$1 = this;
53795
53796               if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
53797
53798               this.data = data || [];
53799               this.length = this.data.length;
53800               this.compare = compare || defaultCompare;
53801
53802               if (this.length > 0) {
53803                   for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
53804               }
53805           }
53806
53807           function defaultCompare(a, b) {
53808               return a < b ? -1 : a > b ? 1 : 0;
53809           }
53810
53811           TinyQueue.prototype = {
53812
53813               push: function (item) {
53814                   this.data.push(item);
53815                   this.length++;
53816                   this._up(this.length - 1);
53817               },
53818
53819               pop: function () {
53820                   if (this.length === 0) { return undefined; }
53821
53822                   var top = this.data[0];
53823                   this.length--;
53824
53825                   if (this.length > 0) {
53826                       this.data[0] = this.data[this.length];
53827                       this._down(0);
53828                   }
53829                   this.data.pop();
53830
53831                   return top;
53832               },
53833
53834               peek: function () {
53835                   return this.data[0];
53836               },
53837
53838               _up: function (pos) {
53839                   var data = this.data;
53840                   var compare = this.compare;
53841                   var item = data[pos];
53842
53843                   while (pos > 0) {
53844                       var parent = (pos - 1) >> 1;
53845                       var current = data[parent];
53846                       if (compare(item, current) >= 0) { break; }
53847                       data[pos] = current;
53848                       pos = parent;
53849                   }
53850
53851                   data[pos] = item;
53852               },
53853
53854               _down: function (pos) {
53855                   var this$1 = this;
53856
53857                   var data = this.data;
53858                   var compare = this.compare;
53859                   var halfLength = this.length >> 1;
53860                   var item = data[pos];
53861
53862                   while (pos < halfLength) {
53863                       var left = (pos << 1) + 1;
53864                       var right = left + 1;
53865                       var best = data[left];
53866
53867                       if (right < this$1.length && compare(data[right], best) < 0) {
53868                           left = right;
53869                           best = data[right];
53870                       }
53871                       if (compare(best, item) >= 0) { break; }
53872
53873                       data[pos] = best;
53874                       pos = left;
53875                   }
53876
53877                   data[pos] = item;
53878               }
53879           };
53880           tinyqueue.default = default_1;
53881
53882           var max = Math.max;
53883           var min = Math.min;
53884
53885           var contourId = 0;
53886
53887
53888           function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
53889             var i, len, s1, s2, e1, e2;
53890             for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
53891               s1 = contourOrHole[i];
53892               s2 = contourOrHole[i + 1];
53893               e1 = new SweepEvent(s1, false, undefined, isSubject);
53894               e2 = new SweepEvent(s2, false, e1,        isSubject);
53895               e1.otherEvent = e2;
53896
53897               if (s1[0] === s2[0] && s1[1] === s2[1]) {
53898                 continue; // skip collapsed edges, or it breaks
53899               }
53900
53901               e1.contourId = e2.contourId = depth;
53902               if (!isExteriorRing) {
53903                 e1.isExteriorRing = false;
53904                 e2.isExteriorRing = false;
53905               }
53906               if (compareEvents(e1, e2) > 0) {
53907                 e2.left = true;
53908               } else {
53909                 e1.left = true;
53910               }
53911
53912               var x = s1[0], y = s1[1];
53913               bbox[0] = min(bbox[0], x);
53914               bbox[1] = min(bbox[1], y);
53915               bbox[2] = max(bbox[2], x);
53916               bbox[3] = max(bbox[3], y);
53917
53918               // Pushing it so the queue is sorted from left to right,
53919               // with object on the left having the highest priority.
53920               Q.push(e1);
53921               Q.push(e2);
53922             }
53923           }
53924
53925
53926           function fillQueue(subject, clipping, sbbox, cbbox, operation) {
53927             var eventQueue = new tinyqueue(null, compareEvents);
53928             var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
53929
53930             for (i = 0, ii = subject.length; i < ii; i++) {
53931               polygonSet = subject[i];
53932               for (j = 0, jj = polygonSet.length; j < jj; j++) {
53933                 isExteriorRing = j === 0;
53934                 if (isExteriorRing) { contourId++; }
53935                 processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
53936               }
53937             }
53938
53939             for (i = 0, ii = clipping.length; i < ii; i++) {
53940               polygonSet = clipping[i];
53941               for (j = 0, jj = polygonSet.length; j < jj; j++) {
53942                 isExteriorRing = j === 0;
53943                 if (operation === DIFFERENCE) { isExteriorRing = false; }
53944                 if (isExteriorRing) { contourId++; }
53945                 processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
53946               }
53947             }
53948
53949             return eventQueue;
53950           }
53951
53952           var EMPTY = [];
53953
53954
53955           function trivialOperation(subject, clipping, operation) {
53956             var result = null;
53957             if (subject.length * clipping.length === 0) {
53958               if        (operation === INTERSECTION) {
53959                 result = EMPTY;
53960               } else if (operation === DIFFERENCE) {
53961                 result = subject;
53962               } else if (operation === UNION ||
53963                          operation === XOR) {
53964                 result = (subject.length === 0) ? clipping : subject;
53965               }
53966             }
53967             return result;
53968           }
53969
53970
53971           function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
53972             var result = null;
53973             if (sbbox[0] > cbbox[2] ||
53974                 cbbox[0] > sbbox[2] ||
53975                 sbbox[1] > cbbox[3] ||
53976                 cbbox[1] > sbbox[3]) {
53977               if        (operation === INTERSECTION) {
53978                 result = EMPTY;
53979               } else if (operation === DIFFERENCE) {
53980                 result = subject;
53981               } else if (operation === UNION ||
53982                          operation === XOR) {
53983                 result = subject.concat(clipping);
53984               }
53985             }
53986             return result;
53987           }
53988
53989
53990           function boolean(subject, clipping, operation) {
53991             if (typeof subject[0][0][0] === 'number') {
53992               subject = [subject];
53993             }
53994             if (typeof clipping[0][0][0] === 'number') {
53995               clipping = [clipping];
53996             }
53997             var trivial = trivialOperation(subject, clipping, operation);
53998             if (trivial) {
53999               return trivial === EMPTY ? null : trivial;
54000             }
54001             var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
54002             var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
54003
54004             //console.time('fill queue');
54005             var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
54006             //console.timeEnd('fill queue');
54007
54008             trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
54009             if (trivial) {
54010               return trivial === EMPTY ? null : trivial;
54011             }
54012             //console.time('subdivide edges');
54013             var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
54014             //console.timeEnd('subdivide edges');
54015
54016             //console.time('connect vertices');
54017             var result = connectEdges(sortedEvents, operation);
54018             //console.timeEnd('connect vertices');
54019             return result;
54020           }
54021
54022           function union (subject, clipping) {
54023             return boolean(subject, clipping, UNION);
54024           }
54025
54026           function diff (subject, clipping) {
54027             return boolean(subject, clipping, DIFFERENCE);
54028           }
54029
54030           function xor (subject, clipping){
54031             return boolean(subject, clipping, XOR);
54032           }
54033
54034           function intersection$1 (subject, clipping) {
54035             return boolean(subject, clipping, INTERSECTION);
54036           }
54037
54038           /**
54039            * @enum {Number}
54040            */
54041           var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
54042
54043           exports.union = union;
54044           exports.diff = diff;
54045           exports.xor = xor;
54046           exports.intersection = intersection$1;
54047           exports.operations = operations;
54048
54049           Object.defineProperty(exports, '__esModule', { value: true });
54050
54051         })));
54052
54053         });
54054
54055         var martinez = unwrapExports(martinez_umd);
54056
54057         var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
54058           var e, m;
54059           var eLen = (nBytes * 8) - mLen - 1;
54060           var eMax = (1 << eLen) - 1;
54061           var eBias = eMax >> 1;
54062           var nBits = -7;
54063           var i = isLE ? (nBytes - 1) : 0;
54064           var d = isLE ? -1 : 1;
54065           var s = buffer[offset + i];
54066
54067           i += d;
54068
54069           e = s & ((1 << (-nBits)) - 1);
54070           s >>= (-nBits);
54071           nBits += eLen;
54072           for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
54073
54074           m = e & ((1 << (-nBits)) - 1);
54075           e >>= (-nBits);
54076           nBits += mLen;
54077           for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
54078
54079           if (e === 0) {
54080             e = 1 - eBias;
54081           } else if (e === eMax) {
54082             return m ? NaN : ((s ? -1 : 1) * Infinity)
54083           } else {
54084             m = m + Math.pow(2, mLen);
54085             e = e - eBias;
54086           }
54087           return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
54088         };
54089
54090         var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
54091           var e, m, c;
54092           var eLen = (nBytes * 8) - mLen - 1;
54093           var eMax = (1 << eLen) - 1;
54094           var eBias = eMax >> 1;
54095           var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
54096           var i = isLE ? 0 : (nBytes - 1);
54097           var d = isLE ? 1 : -1;
54098           var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
54099
54100           value = Math.abs(value);
54101
54102           if (isNaN(value) || value === Infinity) {
54103             m = isNaN(value) ? 1 : 0;
54104             e = eMax;
54105           } else {
54106             e = Math.floor(Math.log(value) / Math.LN2);
54107             if (value * (c = Math.pow(2, -e)) < 1) {
54108               e--;
54109               c *= 2;
54110             }
54111             if (e + eBias >= 1) {
54112               value += rt / c;
54113             } else {
54114               value += rt * Math.pow(2, 1 - eBias);
54115             }
54116             if (value * c >= 2) {
54117               e++;
54118               c /= 2;
54119             }
54120
54121             if (e + eBias >= eMax) {
54122               m = 0;
54123               e = eMax;
54124             } else if (e + eBias >= 1) {
54125               m = ((value * c) - 1) * Math.pow(2, mLen);
54126               e = e + eBias;
54127             } else {
54128               m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
54129               e = 0;
54130             }
54131           }
54132
54133           for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
54134
54135           e = (e << mLen) | m;
54136           eLen += mLen;
54137           for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
54138
54139           buffer[offset + i - d] |= s * 128;
54140         };
54141
54142         var ieee754 = {
54143                 read: read$6,
54144                 write: write$6
54145         };
54146
54147         var pbf = Pbf;
54148
54149
54150
54151         function Pbf(buf) {
54152             this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
54153             this.pos = 0;
54154             this.type = 0;
54155             this.length = this.buf.length;
54156         }
54157
54158         Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
54159         Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
54160         Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
54161         Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
54162
54163         var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
54164             SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
54165
54166         Pbf.prototype = {
54167
54168             destroy: function() {
54169                 this.buf = null;
54170             },
54171
54172             // === READING =================================================================
54173
54174             readFields: function(readField, result, end) {
54175                 end = end || this.length;
54176
54177                 while (this.pos < end) {
54178                     var val = this.readVarint(),
54179                         tag = val >> 3,
54180                         startPos = this.pos;
54181
54182                     this.type = val & 0x7;
54183                     readField(tag, result, this);
54184
54185                     if (this.pos === startPos) this.skip(val);
54186                 }
54187                 return result;
54188             },
54189
54190             readMessage: function(readField, result) {
54191                 return this.readFields(readField, result, this.readVarint() + this.pos);
54192             },
54193
54194             readFixed32: function() {
54195                 var val = readUInt32(this.buf, this.pos);
54196                 this.pos += 4;
54197                 return val;
54198             },
54199
54200             readSFixed32: function() {
54201                 var val = readInt32(this.buf, this.pos);
54202                 this.pos += 4;
54203                 return val;
54204             },
54205
54206             // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
54207
54208             readFixed64: function() {
54209                 var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
54210                 this.pos += 8;
54211                 return val;
54212             },
54213
54214             readSFixed64: function() {
54215                 var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
54216                 this.pos += 8;
54217                 return val;
54218             },
54219
54220             readFloat: function() {
54221                 var val = ieee754.read(this.buf, this.pos, true, 23, 4);
54222                 this.pos += 4;
54223                 return val;
54224             },
54225
54226             readDouble: function() {
54227                 var val = ieee754.read(this.buf, this.pos, true, 52, 8);
54228                 this.pos += 8;
54229                 return val;
54230             },
54231
54232             readVarint: function(isSigned) {
54233                 var buf = this.buf,
54234                     val, b;
54235
54236                 b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;
54237                 b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;
54238                 b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
54239                 b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
54240                 b = buf[this.pos];   val |= (b & 0x0f) << 28;
54241
54242                 return readVarintRemainder(val, isSigned, this);
54243             },
54244
54245             readVarint64: function() { // for compatibility with v2.0.1
54246                 return this.readVarint(true);
54247             },
54248
54249             readSVarint: function() {
54250                 var num = this.readVarint();
54251                 return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
54252             },
54253
54254             readBoolean: function() {
54255                 return Boolean(this.readVarint());
54256             },
54257
54258             readString: function() {
54259                 var end = this.readVarint() + this.pos,
54260                     str = readUtf8(this.buf, this.pos, end);
54261                 this.pos = end;
54262                 return str;
54263             },
54264
54265             readBytes: function() {
54266                 var end = this.readVarint() + this.pos,
54267                     buffer = this.buf.subarray(this.pos, end);
54268                 this.pos = end;
54269                 return buffer;
54270             },
54271
54272             // verbose for performance reasons; doesn't affect gzipped size
54273
54274             readPackedVarint: function(arr, isSigned) {
54275                 if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));
54276                 var end = readPackedEnd(this);
54277                 arr = arr || [];
54278                 while (this.pos < end) arr.push(this.readVarint(isSigned));
54279                 return arr;
54280             },
54281             readPackedSVarint: function(arr) {
54282                 if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());
54283                 var end = readPackedEnd(this);
54284                 arr = arr || [];
54285                 while (this.pos < end) arr.push(this.readSVarint());
54286                 return arr;
54287             },
54288             readPackedBoolean: function(arr) {
54289                 if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());
54290                 var end = readPackedEnd(this);
54291                 arr = arr || [];
54292                 while (this.pos < end) arr.push(this.readBoolean());
54293                 return arr;
54294             },
54295             readPackedFloat: function(arr) {
54296                 if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());
54297                 var end = readPackedEnd(this);
54298                 arr = arr || [];
54299                 while (this.pos < end) arr.push(this.readFloat());
54300                 return arr;
54301             },
54302             readPackedDouble: function(arr) {
54303                 if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());
54304                 var end = readPackedEnd(this);
54305                 arr = arr || [];
54306                 while (this.pos < end) arr.push(this.readDouble());
54307                 return arr;
54308             },
54309             readPackedFixed32: function(arr) {
54310                 if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());
54311                 var end = readPackedEnd(this);
54312                 arr = arr || [];
54313                 while (this.pos < end) arr.push(this.readFixed32());
54314                 return arr;
54315             },
54316             readPackedSFixed32: function(arr) {
54317                 if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());
54318                 var end = readPackedEnd(this);
54319                 arr = arr || [];
54320                 while (this.pos < end) arr.push(this.readSFixed32());
54321                 return arr;
54322             },
54323             readPackedFixed64: function(arr) {
54324                 if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());
54325                 var end = readPackedEnd(this);
54326                 arr = arr || [];
54327                 while (this.pos < end) arr.push(this.readFixed64());
54328                 return arr;
54329             },
54330             readPackedSFixed64: function(arr) {
54331                 if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());
54332                 var end = readPackedEnd(this);
54333                 arr = arr || [];
54334                 while (this.pos < end) arr.push(this.readSFixed64());
54335                 return arr;
54336             },
54337
54338             skip: function(val) {
54339                 var type = val & 0x7;
54340                 if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
54341                 else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
54342                 else if (type === Pbf.Fixed32) this.pos += 4;
54343                 else if (type === Pbf.Fixed64) this.pos += 8;
54344                 else throw new Error('Unimplemented type: ' + type);
54345             },
54346
54347             // === WRITING =================================================================
54348
54349             writeTag: function(tag, type) {
54350                 this.writeVarint((tag << 3) | type);
54351             },
54352
54353             realloc: function(min) {
54354                 var length = this.length || 16;
54355
54356                 while (length < this.pos + min) length *= 2;
54357
54358                 if (length !== this.length) {
54359                     var buf = new Uint8Array(length);
54360                     buf.set(this.buf);
54361                     this.buf = buf;
54362                     this.length = length;
54363                 }
54364             },
54365
54366             finish: function() {
54367                 this.length = this.pos;
54368                 this.pos = 0;
54369                 return this.buf.subarray(0, this.length);
54370             },
54371
54372             writeFixed32: function(val) {
54373                 this.realloc(4);
54374                 writeInt32(this.buf, val, this.pos);
54375                 this.pos += 4;
54376             },
54377
54378             writeSFixed32: function(val) {
54379                 this.realloc(4);
54380                 writeInt32(this.buf, val, this.pos);
54381                 this.pos += 4;
54382             },
54383
54384             writeFixed64: function(val) {
54385                 this.realloc(8);
54386                 writeInt32(this.buf, val & -1, this.pos);
54387                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
54388                 this.pos += 8;
54389             },
54390
54391             writeSFixed64: function(val) {
54392                 this.realloc(8);
54393                 writeInt32(this.buf, val & -1, this.pos);
54394                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
54395                 this.pos += 8;
54396             },
54397
54398             writeVarint: function(val) {
54399                 val = +val || 0;
54400
54401                 if (val > 0xfffffff || val < 0) {
54402                     writeBigVarint(val, this);
54403                     return;
54404                 }
54405
54406                 this.realloc(4);
54407
54408                 this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54409                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54410                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54411                 this.buf[this.pos++] =   (val >>> 7) & 0x7f;
54412             },
54413
54414             writeSVarint: function(val) {
54415                 this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
54416             },
54417
54418             writeBoolean: function(val) {
54419                 this.writeVarint(Boolean(val));
54420             },
54421
54422             writeString: function(str) {
54423                 str = String(str);
54424                 this.realloc(str.length * 4);
54425
54426                 this.pos++; // reserve 1 byte for short string length
54427
54428                 var startPos = this.pos;
54429                 // write the string directly to the buffer and see how much was written
54430                 this.pos = writeUtf8(this.buf, str, this.pos);
54431                 var len = this.pos - startPos;
54432
54433                 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
54434
54435                 // finally, write the message length in the reserved place and restore the position
54436                 this.pos = startPos - 1;
54437                 this.writeVarint(len);
54438                 this.pos += len;
54439             },
54440
54441             writeFloat: function(val) {
54442                 this.realloc(4);
54443                 ieee754.write(this.buf, val, this.pos, true, 23, 4);
54444                 this.pos += 4;
54445             },
54446
54447             writeDouble: function(val) {
54448                 this.realloc(8);
54449                 ieee754.write(this.buf, val, this.pos, true, 52, 8);
54450                 this.pos += 8;
54451             },
54452
54453             writeBytes: function(buffer) {
54454                 var len = buffer.length;
54455                 this.writeVarint(len);
54456                 this.realloc(len);
54457                 for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
54458             },
54459
54460             writeRawMessage: function(fn, obj) {
54461                 this.pos++; // reserve 1 byte for short message length
54462
54463                 // write the message directly to the buffer and see how much was written
54464                 var startPos = this.pos;
54465                 fn(obj, this);
54466                 var len = this.pos - startPos;
54467
54468                 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
54469
54470                 // finally, write the message length in the reserved place and restore the position
54471                 this.pos = startPos - 1;
54472                 this.writeVarint(len);
54473                 this.pos += len;
54474             },
54475
54476             writeMessage: function(tag, fn, obj) {
54477                 this.writeTag(tag, Pbf.Bytes);
54478                 this.writeRawMessage(fn, obj);
54479             },
54480
54481             writePackedVarint:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr);   },
54482             writePackedSVarint:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr);  },
54483             writePackedBoolean:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr);  },
54484             writePackedFloat:    function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr);    },
54485             writePackedDouble:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr);   },
54486             writePackedFixed32:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr);  },
54487             writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },
54488             writePackedFixed64:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr);  },
54489             writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },
54490
54491             writeBytesField: function(tag, buffer) {
54492                 this.writeTag(tag, Pbf.Bytes);
54493                 this.writeBytes(buffer);
54494             },
54495             writeFixed32Field: function(tag, val) {
54496                 this.writeTag(tag, Pbf.Fixed32);
54497                 this.writeFixed32(val);
54498             },
54499             writeSFixed32Field: function(tag, val) {
54500                 this.writeTag(tag, Pbf.Fixed32);
54501                 this.writeSFixed32(val);
54502             },
54503             writeFixed64Field: function(tag, val) {
54504                 this.writeTag(tag, Pbf.Fixed64);
54505                 this.writeFixed64(val);
54506             },
54507             writeSFixed64Field: function(tag, val) {
54508                 this.writeTag(tag, Pbf.Fixed64);
54509                 this.writeSFixed64(val);
54510             },
54511             writeVarintField: function(tag, val) {
54512                 this.writeTag(tag, Pbf.Varint);
54513                 this.writeVarint(val);
54514             },
54515             writeSVarintField: function(tag, val) {
54516                 this.writeTag(tag, Pbf.Varint);
54517                 this.writeSVarint(val);
54518             },
54519             writeStringField: function(tag, str) {
54520                 this.writeTag(tag, Pbf.Bytes);
54521                 this.writeString(str);
54522             },
54523             writeFloatField: function(tag, val) {
54524                 this.writeTag(tag, Pbf.Fixed32);
54525                 this.writeFloat(val);
54526             },
54527             writeDoubleField: function(tag, val) {
54528                 this.writeTag(tag, Pbf.Fixed64);
54529                 this.writeDouble(val);
54530             },
54531             writeBooleanField: function(tag, val) {
54532                 this.writeVarintField(tag, Boolean(val));
54533             }
54534         };
54535
54536         function readVarintRemainder(l, s, p) {
54537             var buf = p.buf,
54538                 h, b;
54539
54540             b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);
54541             b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);
54542             b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
54543             b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
54544             b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
54545             b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
54546
54547             throw new Error('Expected varint not more than 10 bytes');
54548         }
54549
54550         function readPackedEnd(pbf) {
54551             return pbf.type === Pbf.Bytes ?
54552                 pbf.readVarint() + pbf.pos : pbf.pos + 1;
54553         }
54554
54555         function toNum(low, high, isSigned) {
54556             if (isSigned) {
54557                 return high * 0x100000000 + (low >>> 0);
54558             }
54559
54560             return ((high >>> 0) * 0x100000000) + (low >>> 0);
54561         }
54562
54563         function writeBigVarint(val, pbf) {
54564             var low, high;
54565
54566             if (val >= 0) {
54567                 low  = (val % 0x100000000) | 0;
54568                 high = (val / 0x100000000) | 0;
54569             } else {
54570                 low  = ~(-val % 0x100000000);
54571                 high = ~(-val / 0x100000000);
54572
54573                 if (low ^ 0xffffffff) {
54574                     low = (low + 1) | 0;
54575                 } else {
54576                     low = 0;
54577                     high = (high + 1) | 0;
54578                 }
54579             }
54580
54581             if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
54582                 throw new Error('Given varint doesn\'t fit into 10 bytes');
54583             }
54584
54585             pbf.realloc(10);
54586
54587             writeBigVarintLow(low, high, pbf);
54588             writeBigVarintHigh(high, pbf);
54589         }
54590
54591         function writeBigVarintLow(low, high, pbf) {
54592             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54593             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54594             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54595             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54596             pbf.buf[pbf.pos]   = low & 0x7f;
54597         }
54598
54599         function writeBigVarintHigh(high, pbf) {
54600             var lsb = (high & 0x07) << 4;
54601
54602             pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
54603             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54604             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54605             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54606             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54607             pbf.buf[pbf.pos++]  = high & 0x7f;
54608         }
54609
54610         function makeRoomForExtraLength(startPos, len, pbf) {
54611             var extraLen =
54612                 len <= 0x3fff ? 1 :
54613                 len <= 0x1fffff ? 2 :
54614                 len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));
54615
54616             // if 1 byte isn't enough for encoding message length, shift the data to the right
54617             pbf.realloc(extraLen);
54618             for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
54619         }
54620
54621         function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }
54622         function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }
54623         function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }
54624         function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }
54625         function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }
54626         function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }
54627         function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
54628         function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }
54629         function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
54630
54631         // Buffer code below from https://github.com/feross/buffer, MIT-licensed
54632
54633         function readUInt32(buf, pos) {
54634             return ((buf[pos]) |
54635                 (buf[pos + 1] << 8) |
54636                 (buf[pos + 2] << 16)) +
54637                 (buf[pos + 3] * 0x1000000);
54638         }
54639
54640         function writeInt32(buf, val, pos) {
54641             buf[pos] = val;
54642             buf[pos + 1] = (val >>> 8);
54643             buf[pos + 2] = (val >>> 16);
54644             buf[pos + 3] = (val >>> 24);
54645         }
54646
54647         function readInt32(buf, pos) {
54648             return ((buf[pos]) |
54649                 (buf[pos + 1] << 8) |
54650                 (buf[pos + 2] << 16)) +
54651                 (buf[pos + 3] << 24);
54652         }
54653
54654         function readUtf8(buf, pos, end) {
54655             var str = '';
54656             var i = pos;
54657
54658             while (i < end) {
54659                 var b0 = buf[i];
54660                 var c = null; // codepoint
54661                 var bytesPerSequence =
54662                     b0 > 0xEF ? 4 :
54663                     b0 > 0xDF ? 3 :
54664                     b0 > 0xBF ? 2 : 1;
54665
54666                 if (i + bytesPerSequence > end) break;
54667
54668                 var b1, b2, b3;
54669
54670                 if (bytesPerSequence === 1) {
54671                     if (b0 < 0x80) {
54672                         c = b0;
54673                     }
54674                 } else if (bytesPerSequence === 2) {
54675                     b1 = buf[i + 1];
54676                     if ((b1 & 0xC0) === 0x80) {
54677                         c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
54678                         if (c <= 0x7F) {
54679                             c = null;
54680                         }
54681                     }
54682                 } else if (bytesPerSequence === 3) {
54683                     b1 = buf[i + 1];
54684                     b2 = buf[i + 2];
54685                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
54686                         c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
54687                         if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
54688                             c = null;
54689                         }
54690                     }
54691                 } else if (bytesPerSequence === 4) {
54692                     b1 = buf[i + 1];
54693                     b2 = buf[i + 2];
54694                     b3 = buf[i + 3];
54695                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
54696                         c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
54697                         if (c <= 0xFFFF || c >= 0x110000) {
54698                             c = null;
54699                         }
54700                     }
54701                 }
54702
54703                 if (c === null) {
54704                     c = 0xFFFD;
54705                     bytesPerSequence = 1;
54706
54707                 } else if (c > 0xFFFF) {
54708                     c -= 0x10000;
54709                     str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
54710                     c = 0xDC00 | c & 0x3FF;
54711                 }
54712
54713                 str += String.fromCharCode(c);
54714                 i += bytesPerSequence;
54715             }
54716
54717             return str;
54718         }
54719
54720         function writeUtf8(buf, str, pos) {
54721             for (var i = 0, c, lead; i < str.length; i++) {
54722                 c = str.charCodeAt(i); // code point
54723
54724                 if (c > 0xD7FF && c < 0xE000) {
54725                     if (lead) {
54726                         if (c < 0xDC00) {
54727                             buf[pos++] = 0xEF;
54728                             buf[pos++] = 0xBF;
54729                             buf[pos++] = 0xBD;
54730                             lead = c;
54731                             continue;
54732                         } else {
54733                             c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
54734                             lead = null;
54735                         }
54736                     } else {
54737                         if (c > 0xDBFF || (i + 1 === str.length)) {
54738                             buf[pos++] = 0xEF;
54739                             buf[pos++] = 0xBF;
54740                             buf[pos++] = 0xBD;
54741                         } else {
54742                             lead = c;
54743                         }
54744                         continue;
54745                     }
54746                 } else if (lead) {
54747                     buf[pos++] = 0xEF;
54748                     buf[pos++] = 0xBF;
54749                     buf[pos++] = 0xBD;
54750                     lead = null;
54751                 }
54752
54753                 if (c < 0x80) {
54754                     buf[pos++] = c;
54755                 } else {
54756                     if (c < 0x800) {
54757                         buf[pos++] = c >> 0x6 | 0xC0;
54758                     } else {
54759                         if (c < 0x10000) {
54760                             buf[pos++] = c >> 0xC | 0xE0;
54761                         } else {
54762                             buf[pos++] = c >> 0x12 | 0xF0;
54763                             buf[pos++] = c >> 0xC & 0x3F | 0x80;
54764                         }
54765                         buf[pos++] = c >> 0x6 & 0x3F | 0x80;
54766                     }
54767                     buf[pos++] = c & 0x3F | 0x80;
54768                 }
54769             }
54770             return pos;
54771         }
54772
54773         var pointGeometry = Point;
54774
54775         /**
54776          * A standalone point geometry with useful accessor, comparison, and
54777          * modification methods.
54778          *
54779          * @class Point
54780          * @param {Number} x the x-coordinate. this could be longitude or screen
54781          * pixels, or any other sort of unit.
54782          * @param {Number} y the y-coordinate. this could be latitude or screen
54783          * pixels, or any other sort of unit.
54784          * @example
54785          * var point = new Point(-77, 38);
54786          */
54787         function Point(x, y) {
54788             this.x = x;
54789             this.y = y;
54790         }
54791
54792         Point.prototype = {
54793
54794             /**
54795              * Clone this point, returning a new point that can be modified
54796              * without affecting the old one.
54797              * @return {Point} the clone
54798              */
54799             clone: function() { return new Point(this.x, this.y); },
54800
54801             /**
54802              * Add this point's x & y coordinates to another point,
54803              * yielding a new point.
54804              * @param {Point} p the other point
54805              * @return {Point} output point
54806              */
54807             add:     function(p) { return this.clone()._add(p); },
54808
54809             /**
54810              * Subtract this point's x & y coordinates to from point,
54811              * yielding a new point.
54812              * @param {Point} p the other point
54813              * @return {Point} output point
54814              */
54815             sub:     function(p) { return this.clone()._sub(p); },
54816
54817             /**
54818              * Multiply this point's x & y coordinates by point,
54819              * yielding a new point.
54820              * @param {Point} p the other point
54821              * @return {Point} output point
54822              */
54823             multByPoint:    function(p) { return this.clone()._multByPoint(p); },
54824
54825             /**
54826              * Divide this point's x & y coordinates by point,
54827              * yielding a new point.
54828              * @param {Point} p the other point
54829              * @return {Point} output point
54830              */
54831             divByPoint:     function(p) { return this.clone()._divByPoint(p); },
54832
54833             /**
54834              * Multiply this point's x & y coordinates by a factor,
54835              * yielding a new point.
54836              * @param {Point} k factor
54837              * @return {Point} output point
54838              */
54839             mult:    function(k) { return this.clone()._mult(k); },
54840
54841             /**
54842              * Divide this point's x & y coordinates by a factor,
54843              * yielding a new point.
54844              * @param {Point} k factor
54845              * @return {Point} output point
54846              */
54847             div:     function(k) { return this.clone()._div(k); },
54848
54849             /**
54850              * Rotate this point around the 0, 0 origin by an angle a,
54851              * given in radians
54852              * @param {Number} a angle to rotate around, in radians
54853              * @return {Point} output point
54854              */
54855             rotate:  function(a) { return this.clone()._rotate(a); },
54856
54857             /**
54858              * Rotate this point around p point by an angle a,
54859              * given in radians
54860              * @param {Number} a angle to rotate around, in radians
54861              * @param {Point} p Point to rotate around
54862              * @return {Point} output point
54863              */
54864             rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },
54865
54866             /**
54867              * Multiply this point by a 4x1 transformation matrix
54868              * @param {Array<Number>} m transformation matrix
54869              * @return {Point} output point
54870              */
54871             matMult: function(m) { return this.clone()._matMult(m); },
54872
54873             /**
54874              * Calculate this point but as a unit vector from 0, 0, meaning
54875              * that the distance from the resulting point to the 0, 0
54876              * coordinate will be equal to 1 and the angle from the resulting
54877              * point to the 0, 0 coordinate will be the same as before.
54878              * @return {Point} unit vector point
54879              */
54880             unit:    function() { return this.clone()._unit(); },
54881
54882             /**
54883              * Compute a perpendicular point, where the new y coordinate
54884              * is the old x coordinate and the new x coordinate is the old y
54885              * coordinate multiplied by -1
54886              * @return {Point} perpendicular point
54887              */
54888             perp:    function() { return this.clone()._perp(); },
54889
54890             /**
54891              * Return a version of this point with the x & y coordinates
54892              * rounded to integers.
54893              * @return {Point} rounded point
54894              */
54895             round:   function() { return this.clone()._round(); },
54896
54897             /**
54898              * Return the magitude of this point: this is the Euclidean
54899              * distance from the 0, 0 coordinate to this point's x and y
54900              * coordinates.
54901              * @return {Number} magnitude
54902              */
54903             mag: function() {
54904                 return Math.sqrt(this.x * this.x + this.y * this.y);
54905             },
54906
54907             /**
54908              * Judge whether this point is equal to another point, returning
54909              * true or false.
54910              * @param {Point} other the other point
54911              * @return {boolean} whether the points are equal
54912              */
54913             equals: function(other) {
54914                 return this.x === other.x &&
54915                        this.y === other.y;
54916             },
54917
54918             /**
54919              * Calculate the distance from this point to another point
54920              * @param {Point} p the other point
54921              * @return {Number} distance
54922              */
54923             dist: function(p) {
54924                 return Math.sqrt(this.distSqr(p));
54925             },
54926
54927             /**
54928              * Calculate the distance from this point to another point,
54929              * without the square root step. Useful if you're comparing
54930              * relative distances.
54931              * @param {Point} p the other point
54932              * @return {Number} distance
54933              */
54934             distSqr: function(p) {
54935                 var dx = p.x - this.x,
54936                     dy = p.y - this.y;
54937                 return dx * dx + dy * dy;
54938             },
54939
54940             /**
54941              * Get the angle from the 0, 0 coordinate to this point, in radians
54942              * coordinates.
54943              * @return {Number} angle
54944              */
54945             angle: function() {
54946                 return Math.atan2(this.y, this.x);
54947             },
54948
54949             /**
54950              * Get the angle from this point to another point, in radians
54951              * @param {Point} b the other point
54952              * @return {Number} angle
54953              */
54954             angleTo: function(b) {
54955                 return Math.atan2(this.y - b.y, this.x - b.x);
54956             },
54957
54958             /**
54959              * Get the angle between this point and another point, in radians
54960              * @param {Point} b the other point
54961              * @return {Number} angle
54962              */
54963             angleWith: function(b) {
54964                 return this.angleWithSep(b.x, b.y);
54965             },
54966
54967             /*
54968              * Find the angle of the two vectors, solving the formula for
54969              * the cross product a x b = |a||b|sin(θ) for θ.
54970              * @param {Number} x the x-coordinate
54971              * @param {Number} y the y-coordinate
54972              * @return {Number} the angle in radians
54973              */
54974             angleWithSep: function(x, y) {
54975                 return Math.atan2(
54976                     this.x * y - this.y * x,
54977                     this.x * x + this.y * y);
54978             },
54979
54980             _matMult: function(m) {
54981                 var x = m[0] * this.x + m[1] * this.y,
54982                     y = m[2] * this.x + m[3] * this.y;
54983                 this.x = x;
54984                 this.y = y;
54985                 return this;
54986             },
54987
54988             _add: function(p) {
54989                 this.x += p.x;
54990                 this.y += p.y;
54991                 return this;
54992             },
54993
54994             _sub: function(p) {
54995                 this.x -= p.x;
54996                 this.y -= p.y;
54997                 return this;
54998             },
54999
55000             _mult: function(k) {
55001                 this.x *= k;
55002                 this.y *= k;
55003                 return this;
55004             },
55005
55006             _div: function(k) {
55007                 this.x /= k;
55008                 this.y /= k;
55009                 return this;
55010             },
55011
55012             _multByPoint: function(p) {
55013                 this.x *= p.x;
55014                 this.y *= p.y;
55015                 return this;
55016             },
55017
55018             _divByPoint: function(p) {
55019                 this.x /= p.x;
55020                 this.y /= p.y;
55021                 return this;
55022             },
55023
55024             _unit: function() {
55025                 this._div(this.mag());
55026                 return this;
55027             },
55028
55029             _perp: function() {
55030                 var y = this.y;
55031                 this.y = this.x;
55032                 this.x = -y;
55033                 return this;
55034             },
55035
55036             _rotate: function(angle) {
55037                 var cos = Math.cos(angle),
55038                     sin = Math.sin(angle),
55039                     x = cos * this.x - sin * this.y,
55040                     y = sin * this.x + cos * this.y;
55041                 this.x = x;
55042                 this.y = y;
55043                 return this;
55044             },
55045
55046             _rotateAround: function(angle, p) {
55047                 var cos = Math.cos(angle),
55048                     sin = Math.sin(angle),
55049                     x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
55050                     y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
55051                 this.x = x;
55052                 this.y = y;
55053                 return this;
55054             },
55055
55056             _round: function() {
55057                 this.x = Math.round(this.x);
55058                 this.y = Math.round(this.y);
55059                 return this;
55060             }
55061         };
55062
55063         /**
55064          * Construct a point from an array if necessary, otherwise if the input
55065          * is already a Point, or an unknown type, return it unchanged
55066          * @param {Array<Number>|Point|*} a any kind of input value
55067          * @return {Point} constructed point, or passed-through value.
55068          * @example
55069          * // this
55070          * var point = Point.convert([0, 1]);
55071          * // is equivalent to
55072          * var point = new Point(0, 1);
55073          */
55074         Point.convert = function (a) {
55075             if (a instanceof Point) {
55076                 return a;
55077             }
55078             if (Array.isArray(a)) {
55079                 return new Point(a[0], a[1]);
55080             }
55081             return a;
55082         };
55083
55084         var vectortilefeature = VectorTileFeature;
55085
55086         function VectorTileFeature(pbf, end, extent, keys, values) {
55087             // Public
55088             this.properties = {};
55089             this.extent = extent;
55090             this.type = 0;
55091
55092             // Private
55093             this._pbf = pbf;
55094             this._geometry = -1;
55095             this._keys = keys;
55096             this._values = values;
55097
55098             pbf.readFields(readFeature, this, end);
55099         }
55100
55101         function readFeature(tag, feature, pbf) {
55102             if (tag == 1) feature.id = pbf.readVarint();
55103             else if (tag == 2) readTag(pbf, feature);
55104             else if (tag == 3) feature.type = pbf.readVarint();
55105             else if (tag == 4) feature._geometry = pbf.pos;
55106         }
55107
55108         function readTag(pbf, feature) {
55109             var end = pbf.readVarint() + pbf.pos;
55110
55111             while (pbf.pos < end) {
55112                 var key = feature._keys[pbf.readVarint()],
55113                     value = feature._values[pbf.readVarint()];
55114                 feature.properties[key] = value;
55115             }
55116         }
55117
55118         VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
55119
55120         VectorTileFeature.prototype.loadGeometry = function() {
55121             var pbf = this._pbf;
55122             pbf.pos = this._geometry;
55123
55124             var end = pbf.readVarint() + pbf.pos,
55125                 cmd = 1,
55126                 length = 0,
55127                 x = 0,
55128                 y = 0,
55129                 lines = [],
55130                 line;
55131
55132             while (pbf.pos < end) {
55133                 if (length <= 0) {
55134                     var cmdLen = pbf.readVarint();
55135                     cmd = cmdLen & 0x7;
55136                     length = cmdLen >> 3;
55137                 }
55138
55139                 length--;
55140
55141                 if (cmd === 1 || cmd === 2) {
55142                     x += pbf.readSVarint();
55143                     y += pbf.readSVarint();
55144
55145                     if (cmd === 1) { // moveTo
55146                         if (line) lines.push(line);
55147                         line = [];
55148                     }
55149
55150                     line.push(new pointGeometry(x, y));
55151
55152                 } else if (cmd === 7) {
55153
55154                     // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
55155                     if (line) {
55156                         line.push(line[0].clone()); // closePolygon
55157                     }
55158
55159                 } else {
55160                     throw new Error('unknown command ' + cmd);
55161                 }
55162             }
55163
55164             if (line) lines.push(line);
55165
55166             return lines;
55167         };
55168
55169         VectorTileFeature.prototype.bbox = function() {
55170             var pbf = this._pbf;
55171             pbf.pos = this._geometry;
55172
55173             var end = pbf.readVarint() + pbf.pos,
55174                 cmd = 1,
55175                 length = 0,
55176                 x = 0,
55177                 y = 0,
55178                 x1 = Infinity,
55179                 x2 = -Infinity,
55180                 y1 = Infinity,
55181                 y2 = -Infinity;
55182
55183             while (pbf.pos < end) {
55184                 if (length <= 0) {
55185                     var cmdLen = pbf.readVarint();
55186                     cmd = cmdLen & 0x7;
55187                     length = cmdLen >> 3;
55188                 }
55189
55190                 length--;
55191
55192                 if (cmd === 1 || cmd === 2) {
55193                     x += pbf.readSVarint();
55194                     y += pbf.readSVarint();
55195                     if (x < x1) x1 = x;
55196                     if (x > x2) x2 = x;
55197                     if (y < y1) y1 = y;
55198                     if (y > y2) y2 = y;
55199
55200                 } else if (cmd !== 7) {
55201                     throw new Error('unknown command ' + cmd);
55202                 }
55203             }
55204
55205             return [x1, y1, x2, y2];
55206         };
55207
55208         VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
55209             var size = this.extent * Math.pow(2, z),
55210                 x0 = this.extent * x,
55211                 y0 = this.extent * y,
55212                 coords = this.loadGeometry(),
55213                 type = VectorTileFeature.types[this.type],
55214                 i, j;
55215
55216             function project(line) {
55217                 for (var j = 0; j < line.length; j++) {
55218                     var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
55219                     line[j] = [
55220                         (p.x + x0) * 360 / size - 180,
55221                         360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
55222                     ];
55223                 }
55224             }
55225
55226             switch (this.type) {
55227             case 1:
55228                 var points = [];
55229                 for (i = 0; i < coords.length; i++) {
55230                     points[i] = coords[i][0];
55231                 }
55232                 coords = points;
55233                 project(coords);
55234                 break;
55235
55236             case 2:
55237                 for (i = 0; i < coords.length; i++) {
55238                     project(coords[i]);
55239                 }
55240                 break;
55241
55242             case 3:
55243                 coords = classifyRings(coords);
55244                 for (i = 0; i < coords.length; i++) {
55245                     for (j = 0; j < coords[i].length; j++) {
55246                         project(coords[i][j]);
55247                     }
55248                 }
55249                 break;
55250             }
55251
55252             if (coords.length === 1) {
55253                 coords = coords[0];
55254             } else {
55255                 type = 'Multi' + type;
55256             }
55257
55258             var result = {
55259                 type: "Feature",
55260                 geometry: {
55261                     type: type,
55262                     coordinates: coords
55263                 },
55264                 properties: this.properties
55265             };
55266
55267             if ('id' in this) {
55268                 result.id = this.id;
55269             }
55270
55271             return result;
55272         };
55273
55274         // classifies an array of rings into polygons with outer rings and holes
55275
55276         function classifyRings(rings) {
55277             var len = rings.length;
55278
55279             if (len <= 1) return [rings];
55280
55281             var polygons = [],
55282                 polygon,
55283                 ccw;
55284
55285             for (var i = 0; i < len; i++) {
55286                 var area = signedArea(rings[i]);
55287                 if (area === 0) continue;
55288
55289                 if (ccw === undefined) ccw = area < 0;
55290
55291                 if (ccw === area < 0) {
55292                     if (polygon) polygons.push(polygon);
55293                     polygon = [rings[i]];
55294
55295                 } else {
55296                     polygon.push(rings[i]);
55297                 }
55298             }
55299             if (polygon) polygons.push(polygon);
55300
55301             return polygons;
55302         }
55303
55304         function signedArea(ring) {
55305             var sum = 0;
55306             for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
55307                 p1 = ring[i];
55308                 p2 = ring[j];
55309                 sum += (p2.x - p1.x) * (p1.y + p2.y);
55310             }
55311             return sum;
55312         }
55313
55314         var vectortilelayer = VectorTileLayer;
55315
55316         function VectorTileLayer(pbf, end) {
55317             // Public
55318             this.version = 1;
55319             this.name = null;
55320             this.extent = 4096;
55321             this.length = 0;
55322
55323             // Private
55324             this._pbf = pbf;
55325             this._keys = [];
55326             this._values = [];
55327             this._features = [];
55328
55329             pbf.readFields(readLayer, this, end);
55330
55331             this.length = this._features.length;
55332         }
55333
55334         function readLayer(tag, layer, pbf) {
55335             if (tag === 15) layer.version = pbf.readVarint();
55336             else if (tag === 1) layer.name = pbf.readString();
55337             else if (tag === 5) layer.extent = pbf.readVarint();
55338             else if (tag === 2) layer._features.push(pbf.pos);
55339             else if (tag === 3) layer._keys.push(pbf.readString());
55340             else if (tag === 4) layer._values.push(readValueMessage(pbf));
55341         }
55342
55343         function readValueMessage(pbf) {
55344             var value = null,
55345                 end = pbf.readVarint() + pbf.pos;
55346
55347             while (pbf.pos < end) {
55348                 var tag = pbf.readVarint() >> 3;
55349
55350                 value = tag === 1 ? pbf.readString() :
55351                     tag === 2 ? pbf.readFloat() :
55352                     tag === 3 ? pbf.readDouble() :
55353                     tag === 4 ? pbf.readVarint64() :
55354                     tag === 5 ? pbf.readVarint() :
55355                     tag === 6 ? pbf.readSVarint() :
55356                     tag === 7 ? pbf.readBoolean() : null;
55357             }
55358
55359             return value;
55360         }
55361
55362         // return feature `i` from this layer as a `VectorTileFeature`
55363         VectorTileLayer.prototype.feature = function(i) {
55364             if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
55365
55366             this._pbf.pos = this._features[i];
55367
55368             var end = this._pbf.readVarint() + this._pbf.pos;
55369             return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
55370         };
55371
55372         var vectortile = VectorTile;
55373
55374         function VectorTile(pbf, end) {
55375             this.layers = pbf.readFields(readTile, {}, end);
55376         }
55377
55378         function readTile(tag, layers, pbf) {
55379             if (tag === 3) {
55380                 var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
55381                 if (layer.length) layers[layer.name] = layer;
55382             }
55383         }
55384
55385         var VectorTile$1 = vectortile;
55386         var VectorTileFeature$1 = vectortilefeature;
55387         var VectorTileLayer$1 = vectortilelayer;
55388
55389         var vectorTile = {
55390                 VectorTile: VectorTile$1,
55391                 VectorTileFeature: VectorTileFeature$1,
55392                 VectorTileLayer: VectorTileLayer$1
55393         };
55394
55395         var tiler$6 = utilTiler().tileSize(512).margin(1);
55396         var dispatch$7 = dispatch('loadedData');
55397         var _vtCache;
55398
55399
55400         function abortRequest$6(controller) {
55401             controller.abort();
55402         }
55403
55404
55405         function vtToGeoJSON(data, tile, mergeCache) {
55406             var vectorTile$1 = new vectorTile.VectorTile(new pbf(data));
55407             var layers = Object.keys(vectorTile$1.layers);
55408             if (!Array.isArray(layers)) { layers = [layers]; }
55409
55410             var features = [];
55411             layers.forEach(function(layerID) {
55412                 var layer = vectorTile$1.layers[layerID];
55413                 if (layer) {
55414                     for (var i = 0; i < layer.length; i++) {
55415                         var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
55416                         var geometry = feature.geometry;
55417
55418                         // Treat all Polygons as MultiPolygons
55419                         if (geometry.type === 'Polygon') {
55420                             geometry.type = 'MultiPolygon';
55421                             geometry.coordinates = [geometry.coordinates];
55422                         }
55423
55424                         // Clip to tile bounds
55425                         if (geometry.type === 'MultiPolygon') {
55426                             var isClipped = false;
55427                             var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
55428                             if (!fastDeepEqual(feature.geometry, featureClip.geometry)) {
55429                                 // feature = featureClip;
55430                                 isClipped = true;
55431                             }
55432                             if (!feature.geometry.coordinates.length) continue;   // not actually on this tile
55433                             if (!feature.geometry.coordinates[0].length) continue;   // not actually on this tile
55434                         }
55435
55436                         // Generate some unique IDs and add some metadata
55437                         var featurehash = utilHashcode(fastJsonStableStringify(feature));
55438                         var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
55439                         feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
55440                         feature.__featurehash__ = featurehash;
55441                         feature.__propertyhash__ = propertyhash;
55442                         features.push(feature);
55443
55444                         // Clipped Polygons at same zoom with identical properties can get merged
55445                         if (isClipped && geometry.type === 'MultiPolygon') {
55446                             var merged = mergeCache[propertyhash];
55447                             if (merged && merged.length) {
55448                                 var other = merged[0];
55449                                 var coords = martinez.union(
55450                                     feature.geometry.coordinates, other.geometry.coordinates
55451                                 );
55452
55453                                 if (!coords || !coords.length) {
55454                                     continue;  // something failed in martinez union
55455                                 }
55456
55457                                 merged.push(feature);
55458                                 for (var j = 0; j < merged.length; j++) {      // all these features get...
55459                                     merged[j].geometry.coordinates = coords;   // same coords
55460                                     merged[j].__featurehash__ = featurehash;   // same hash, so deduplication works
55461                                 }
55462                             } else {
55463                                 mergeCache[propertyhash] = [feature];
55464                             }
55465                         }
55466                     }
55467                 }
55468             });
55469
55470             return features;
55471         }
55472
55473
55474         function loadTile(source, tile) {
55475             if (source.loaded[tile.id] || source.inflight[tile.id]) return;
55476
55477             var url = source.template
55478                 .replace('{x}', tile.xyz[0])
55479                 .replace('{y}', tile.xyz[1])
55480                 // TMS-flipped y coordinate
55481                 .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
55482                 .replace(/\{z(oom)?\}/, tile.xyz[2])
55483                 .replace(/\{switch:([^}]+)\}/, function(s, r) {
55484                     var subdomains = r.split(',');
55485                     return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
55486                 });
55487
55488
55489             var controller = new AbortController();
55490             source.inflight[tile.id] = controller;
55491
55492             fetch(url, { signal: controller.signal })
55493                 .then(function(response) {
55494                     if (!response.ok) {
55495                         throw new Error(response.status + ' ' + response.statusText);
55496                     }
55497                     source.loaded[tile.id] = [];
55498                     delete source.inflight[tile.id];
55499                     return response.arrayBuffer();
55500                 })
55501                 .then(function(data) {
55502                     if (!data) {
55503                         throw new Error('No Data');
55504                     }
55505
55506                     var z = tile.xyz[2];
55507                     if (!source.canMerge[z]) {
55508                         source.canMerge[z] = {};  // initialize mergeCache
55509                     }
55510
55511                     source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
55512                     dispatch$7.call('loadedData');
55513                 })
55514                 .catch(function() {
55515                     source.loaded[tile.id] = [];
55516                     delete source.inflight[tile.id];
55517                 });
55518         }
55519
55520
55521         var serviceVectorTile = {
55522
55523             init: function() {
55524                 if (!_vtCache) {
55525                     this.reset();
55526                 }
55527
55528                 this.event = utilRebind(this, dispatch$7, 'on');
55529             },
55530
55531
55532             reset: function() {
55533                 for (var sourceID in _vtCache) {
55534                     var source = _vtCache[sourceID];
55535                     if (source && source.inflight) {
55536                         Object.values(source.inflight).forEach(abortRequest$6);
55537                     }
55538                 }
55539
55540                 _vtCache = {};
55541             },
55542
55543
55544             addSource: function(sourceID, template) {
55545                 _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
55546                 return _vtCache[sourceID];
55547             },
55548
55549
55550             data: function(sourceID, projection) {
55551                 var source = _vtCache[sourceID];
55552                 if (!source) return [];
55553
55554                 var tiles = tiler$6.getTiles(projection);
55555                 var seen = {};
55556                 var results = [];
55557
55558                 for (var i = 0; i < tiles.length; i++) {
55559                     var features = source.loaded[tiles[i].id];
55560                     if (!features || !features.length) continue;
55561
55562                     for (var j = 0; j < features.length; j++) {
55563                         var feature = features[j];
55564                         var hash = feature.__featurehash__;
55565                         if (seen[hash]) continue;
55566                         seen[hash] = true;
55567
55568                         // return a shallow copy, because the hash may change
55569                         // later if this feature gets merged with another
55570                         results.push(Object.assign({}, feature));  // shallow copy
55571                     }
55572                 }
55573
55574                 return results;
55575             },
55576
55577
55578             loadTiles: function(sourceID, template, projection) {
55579                 var source = _vtCache[sourceID];
55580                 if (!source) {
55581                     source = this.addSource(sourceID, template);
55582                 }
55583
55584                 var tiles = tiler$6.getTiles(projection);
55585
55586                 // abort inflight requests that are no longer needed
55587                 Object.keys(source.inflight).forEach(function(k) {
55588                     var wanted = tiles.find(function(tile) { return k === tile.id; });
55589                     if (!wanted) {
55590                         abortRequest$6(source.inflight[k]);
55591                         delete source.inflight[k];
55592                     }
55593                 });
55594
55595                 tiles.forEach(function(tile) {
55596                     loadTile(source, tile);
55597                 });
55598             },
55599
55600
55601             cache: function() {
55602                 return _vtCache;
55603             }
55604
55605         };
55606
55607         var apibase$5 = 'https://www.wikidata.org/w/api.php?';
55608         var _wikidataCache = {};
55609
55610
55611         var serviceWikidata = {
55612
55613             init: function() {},
55614
55615             reset: function() {
55616                 _wikidataCache = {};
55617             },
55618
55619
55620             // Search for Wikidata items matching the query
55621             itemsForSearchQuery: function(query, callback) {
55622                 if (!query) {
55623                     if (callback) callback('No query', {});
55624                     return;
55625                 }
55626
55627                 var url = apibase$5 + utilQsString({
55628                     action: 'wbsearchentities',
55629                     format: 'json',
55630                     formatversion: 2,
55631                     search: query,
55632                     type: 'item',
55633                     language: this.languagesToQuery()[0],
55634                     limit: 10,
55635                     origin: '*'
55636                 });
55637
55638                 d3_json(url)
55639                     .then(function(result) {
55640                         if (result && result.error) {
55641                             throw new Error(result.error);
55642                         }
55643                         if (callback) callback(null, result.search || {});
55644                     })
55645                     .catch(function(err) {
55646                         if (callback) callback(err.message, {});
55647                     });
55648             },
55649
55650
55651             // Given a Wikipedia language and article title,
55652             // return an array of corresponding Wikidata entities.
55653             itemsByTitle: function(lang, title, callback) {
55654                 if (!title) {
55655                     if (callback) callback('No title', {});
55656                     return;
55657                 }
55658
55659                 lang = lang || 'en';
55660                 var url = apibase$5 + utilQsString({
55661                     action: 'wbgetentities',
55662                     format: 'json',
55663                     formatversion: 2,
55664                     sites: lang.replace(/-/g, '_') + 'wiki',
55665                     titles: title,
55666                     languages: 'en', // shrink response by filtering to one language
55667                     origin: '*'
55668                 });
55669
55670                 d3_json(url)
55671                     .then(function(result) {
55672                         if (result && result.error) {
55673                             throw new Error(result.error);
55674                         }
55675                         if (callback) callback(null, result.entities || {});
55676                     })
55677                     .catch(function(err) {
55678                         if (callback) callback(err.message, {});
55679                     });
55680             },
55681
55682
55683             languagesToQuery: function() {
55684                 return utilArrayUniq([
55685                     currentLocale.toLowerCase(),
55686                     currentLocale.split('-', 2)[0].toLowerCase(),
55687                     'en'
55688                 ]);
55689             },
55690
55691
55692             entityByQID: function(qid, callback) {
55693                 if (!qid) {
55694                     callback('No qid', {});
55695                     return;
55696                 }
55697                 if (_wikidataCache[qid]) {
55698                     if (callback) callback(null, _wikidataCache[qid]);
55699                     return;
55700                 }
55701
55702                 var langs = this.languagesToQuery();
55703                 var url = apibase$5 + utilQsString({
55704                     action: 'wbgetentities',
55705                     format: 'json',
55706                     formatversion: 2,
55707                     ids: qid,
55708                     props: 'labels|descriptions|claims|sitelinks',
55709                     sitefilter: langs.map(function(d) { return d + 'wiki'; }).join('|'),
55710                     languages: langs.join('|'),
55711                     languagefallback: 1,
55712                     origin: '*'
55713                 });
55714
55715                 d3_json(url)
55716                     .then(function(result) {
55717                         if (result && result.error) {
55718                             throw new Error(result.error);
55719                         }
55720                         if (callback) callback(null, result.entities[qid] || {});
55721                     })
55722                     .catch(function(err) {
55723                         if (callback) callback(err.message, {});
55724                     });
55725             },
55726
55727
55728             // Pass `params` object of the form:
55729             // {
55730             //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
55731             // }
55732             //
55733             // Get an result object used to display tag documentation
55734             // {
55735             //   title:        'string',
55736             //   description:  'string',
55737             //   editURL:      'string',
55738             //   imageURL:     'string',
55739             //   wiki:         { title: 'string', text: 'string', url: 'string' }
55740             // }
55741             //
55742             getDocs: function(params, callback) {
55743                 var langs = this.languagesToQuery();
55744                 this.entityByQID(params.qid, function(err, entity) {
55745                     if (err || !entity) {
55746                         callback(err || 'No entity');
55747                         return;
55748                     }
55749
55750                     var i;
55751                     var description;
55752                     if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
55753                         description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
55754                     }
55755
55756                     // prepare result
55757                     var result = {
55758                         title: entity.id,
55759                         description: description,
55760                         editURL: 'https://www.wikidata.org/wiki/' + entity.id
55761                     };
55762
55763                     // add image
55764                     if (entity.claims) {
55765                         var imageroot = 'https://commons.wikimedia.org/w/index.php';
55766                         var props = ['P154','P18'];  // logo image, image
55767                         var prop, image;
55768                         for (i = 0; i < props.length; i++) {
55769                             prop = entity.claims[props[i]];
55770                             if (prop && Object.keys(prop).length > 0) {
55771                                 image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value;
55772                                 if (image) {
55773                                     result.imageURL = imageroot + '?' + utilQsString({
55774                                         title: 'Special:Redirect/file/' + image,
55775                                         width: 400
55776                                     });
55777                                     break;
55778                                 }
55779                             }
55780                         }
55781                     }
55782
55783                     if (entity.sitelinks) {
55784                         var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en');
55785
55786                         // must be one of these that we requested..
55787                         for (i = 0; i < langs.length; i++) {   // check each, in order of preference
55788                             var w = langs[i] + 'wiki';
55789                             if (entity.sitelinks[w]) {
55790                                 var title = entity.sitelinks[w].title;
55791                                 var tKey = 'inspector.wiki_reference';
55792                                 if (!englishLocale && langs[i] === 'en') {   // user's currentLocale isn't English but
55793                                     tKey = 'inspector.wiki_en_reference';    // we are sending them to enwiki anyway..
55794                                 }
55795
55796                                 result.wiki = {
55797                                     title: title,
55798                                     text: tKey,
55799                                     url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_')
55800                                 };
55801                                 break;
55802                             }
55803                         }
55804                     }
55805
55806                     callback(null, result);
55807                 });
55808             }
55809
55810         };
55811
55812         var endpoint = 'https://en.wikipedia.org/w/api.php?';
55813
55814         var serviceWikipedia = {
55815
55816             init: function() {},
55817             reset: function() {},
55818
55819
55820             search: function(lang, query, callback) {
55821                 if (!query) {
55822                     if (callback) callback('No Query', []);
55823                     return;
55824                 }
55825
55826                 lang = lang || 'en';
55827                 var url = endpoint.replace('en', lang) +
55828                     utilQsString({
55829                         action: 'query',
55830                         list: 'search',
55831                         srlimit: '10',
55832                         srinfo: 'suggestion',
55833                         format: 'json',
55834                         origin: '*',
55835                         srsearch: query
55836                     });
55837
55838                 d3_json(url)
55839                     .then(function(result) {
55840                         if (result && result.error) {
55841                             throw new Error(result.error);
55842                         } else if (!result || !result.query || !result.query.search) {
55843                             throw new Error('No Results');
55844                         }
55845                         if (callback) {
55846                             var titles = result.query.search.map(function(d) { return d.title; });
55847                             callback(null, titles);
55848                         }
55849                     })
55850                     .catch(function(err) {
55851                         if (callback) callback(err, []);
55852                     });
55853             },
55854
55855
55856             suggestions: function(lang, query, callback) {
55857                 if (!query) {
55858                     if (callback) callback('', []);
55859                     return;
55860                 }
55861
55862                 lang = lang || 'en';
55863                 var url = endpoint.replace('en', lang) +
55864                     utilQsString({
55865                         action: 'opensearch',
55866                         namespace: 0,
55867                         suggest: '',
55868                         format: 'json',
55869                         origin: '*',
55870                         search: query
55871                     });
55872
55873                 d3_json(url)
55874                     .then(function(result) {
55875                         if (result && result.error) {
55876                             throw new Error(result.error);
55877                         } else if (!result || result.length < 2) {
55878                             throw new Error('No Results');
55879                         }
55880                         if (callback) callback(null, result[1] || []);
55881                     })
55882                     .catch(function(err) {
55883                         if (callback) callback(err.message, []);
55884                     });
55885             },
55886
55887
55888             translations: function(lang, title, callback) {
55889                 if (!title) {
55890                     if (callback) callback('No Title');
55891                     return;
55892                 }
55893
55894                 var url = endpoint.replace('en', lang) +
55895                     utilQsString({
55896                         action: 'query',
55897                         prop: 'langlinks',
55898                         format: 'json',
55899                         origin: '*',
55900                         lllimit: 500,
55901                         titles: title
55902                     });
55903
55904                 d3_json(url)
55905                     .then(function(result) {
55906                         if (result && result.error) {
55907                             throw new Error(result.error);
55908                         } else if (!result || !result.query || !result.query.pages) {
55909                             throw new Error('No Results');
55910                         }
55911                         if (callback) {
55912                             var list = result.query.pages[Object.keys(result.query.pages)[0]];
55913                             var translations = {};
55914                             if (list && list.langlinks) {
55915                                 list.langlinks.forEach(function(d) { translations[d.lang] = d['*']; });
55916                             }
55917                             callback(null, translations);
55918                         }
55919                     })
55920                     .catch(function(err) {
55921                         if (callback) callback(err.message);
55922                     });
55923             }
55924
55925         };
55926
55927         var services$1 = {
55928             geocoder: serviceNominatim,
55929             keepRight: serviceKeepRight,
55930             improveOSM: serviceImproveOSM,
55931             mapillary: serviceMapillary,
55932             openstreetcam: serviceOpenstreetcam,
55933             osm: serviceOsm,
55934             osmWikibase: serviceOsmWikibase,
55935             maprules: serviceMapRules,
55936             streetside: serviceStreetside,
55937             taginfo: serviceTaginfo,
55938             vectorTile: serviceVectorTile,
55939             wikidata: serviceWikidata,
55940             wikipedia: serviceWikipedia
55941         };
55942
55943         function svgIcon(name, svgklass, useklass) {
55944             return function drawIcon(selection) {
55945                 selection.selectAll('svg.icon')
55946                     .data([0])
55947                     .enter()
55948                     .append('svg')
55949                     .attr('class', 'icon ' + (svgklass || ''))
55950                     .append('use')
55951                     .attr('xlink:href', name)
55952                     .attr('class', useklass);
55953             };
55954         }
55955
55956         function uiNoteComments() {
55957             var _note;
55958
55959
55960             function noteComments(selection) {
55961                 if (_note.isNew()) return; // don't draw .comments-container
55962
55963                 var comments = selection.selectAll('.comments-container')
55964                     .data([0]);
55965
55966                 comments = comments.enter()
55967                     .append('div')
55968                     .attr('class', 'comments-container')
55969                     .merge(comments);
55970
55971                 var commentEnter = comments.selectAll('.comment')
55972                     .data(_note.comments)
55973                     .enter()
55974                     .append('div')
55975                     .attr('class', 'comment');
55976
55977                 commentEnter
55978                     .append('div')
55979                     .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
55980                     .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
55981
55982                 var mainEnter = commentEnter
55983                     .append('div')
55984                     .attr('class', 'comment-main');
55985
55986                 var metadataEnter = mainEnter
55987                     .append('div')
55988                     .attr('class', 'comment-metadata');
55989
55990                 metadataEnter
55991                     .append('div')
55992                     .attr('class', 'comment-author')
55993                     .each(function(d) {
55994                         var selection = d3_select(this);
55995                         var osm = services$1.osm;
55996                         if (osm && d.user) {
55997                             selection = selection
55998                                 .append('a')
55999                                 .attr('class', 'comment-author-link')
56000                                 .attr('href', osm.userURL(d.user))
56001                                 .attr('tabindex', -1)
56002                                 .attr('target', '_blank');
56003                         }
56004                         selection
56005                             .text(function(d) { return d.user || t('note.anonymous'); });
56006                     });
56007
56008                 metadataEnter
56009                     .append('div')
56010                     .attr('class', 'comment-date')
56011                     .text(function(d) {
56012                         return t('note.status.' + d.action, { when: localeDateString(d.date) });
56013                     });
56014
56015                 mainEnter
56016                     .append('div')
56017                     .attr('class', 'comment-text')
56018                     .html(function(d) { return d.html; });
56019
56020                 comments
56021                     .call(replaceAvatars);
56022             }
56023
56024
56025             function replaceAvatars(selection) {
56026                 var osm = services$1.osm;
56027                 if (!osm) return;
56028
56029                 var uids = {};  // gather uids in the comment thread
56030                 _note.comments.forEach(function(d) {
56031                     if (d.uid) uids[d.uid] = true;
56032                 });
56033
56034                 Object.keys(uids).forEach(function(uid) {
56035                     osm.loadUser(uid, function(err, user) {
56036                         if (!user || !user.image_url) return;
56037
56038                         selection.selectAll('.comment-avatar.user-' + uid)
56039                             .html('')
56040                             .append('img')
56041                             .attr('class', 'icon comment-avatar-icon')
56042                             .attr('src', user.image_url)
56043                             .attr('alt', user.display_name);
56044                     });
56045                 });
56046             }
56047
56048
56049             function localeDateString(s) {
56050                 if (!s) return null;
56051                 var detected = utilDetect();
56052                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
56053                 s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
56054                 var d = new Date(s);
56055                 if (isNaN(d.getTime())) return null;
56056                 return d.toLocaleDateString(detected.locale, options);
56057             }
56058
56059
56060             noteComments.note = function(val) {
56061                 if (!arguments.length) return _note;
56062                 _note = val;
56063                 return noteComments;
56064             };
56065
56066
56067             return noteComments;
56068         }
56069
56070         function uiNoteHeader() {
56071             var _note;
56072
56073
56074             function noteHeader(selection) {
56075                 var header = selection.selectAll('.note-header')
56076                     .data(
56077                         (_note ? [_note] : []),
56078                         function(d) { return d.status + d.id; }
56079                     );
56080
56081                 header.exit()
56082                     .remove();
56083
56084                 var headerEnter = header.enter()
56085                     .append('div')
56086                     .attr('class', 'note-header');
56087
56088                 var iconEnter = headerEnter
56089                     .append('div')
56090                     .attr('class', function(d) { return 'note-header-icon ' + d.status; })
56091                     .classed('new', function(d) { return d.id < 0; });
56092
56093                 iconEnter
56094                     .append('div')
56095                     .attr('class', 'preset-icon-28')
56096                     .call(svgIcon('#iD-icon-note', 'note-fill'));
56097
56098                 iconEnter.each(function(d) {
56099                     var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
56100                     iconEnter
56101                         .append('div')
56102                         .attr('class', 'note-icon-annotation')
56103                         .call(svgIcon(statusIcon, 'icon-annotation'));
56104                 });
56105
56106                 headerEnter
56107                     .append('div')
56108                     .attr('class', 'note-header-label')
56109                     .text(function(d) {
56110                         if (_note.isNew()) { return t('note.new'); }
56111                         return t('note.note') + ' ' + d.id + ' ' +
56112                             (d.status === 'closed' ? t('note.closed') : '');
56113                     });
56114             }
56115
56116
56117             noteHeader.note = function(val) {
56118                 if (!arguments.length) return _note;
56119                 _note = val;
56120                 return noteHeader;
56121             };
56122
56123
56124             return noteHeader;
56125         }
56126
56127         function uiNoteReport() {
56128             var _note;
56129
56130             function noteReport(selection) {
56131                 var url;
56132                 if (services$1.osm && (_note instanceof osmNote) && (!_note.isNew())) {
56133                     url = services$1.osm.noteReportURL(_note);
56134                 }
56135
56136                 var link = selection.selectAll('.note-report')
56137                     .data(url ? [url] : []);
56138
56139                 // exit
56140                 link.exit()
56141                     .remove();
56142
56143                 // enter
56144                 var linkEnter = link.enter()
56145                     .append('a')
56146                     .attr('class', 'note-report')
56147                     .attr('target', '_blank')
56148                     .attr('href', function(d) { return d; })
56149                     .call(svgIcon('#iD-icon-out-link', 'inline'));
56150
56151                 linkEnter
56152                     .append('span')
56153                     .text(t('note.report'));
56154             }
56155
56156
56157             noteReport.note = function(val) {
56158                 if (!arguments.length) return _note;
56159                 _note = val;
56160                 return noteReport;
56161             };
56162
56163             return noteReport;
56164         }
56165
56166         var _tooltipID = 0;
56167
56168         function tooltip(klass) {
56169             var _id = _tooltipID++;
56170             var tooltip = function(selection) {
56171                 selection.each(setup);
56172             };
56173             var _animation = utilFunctor(false);
56174             var _title = function() {
56175                 var title = this.getAttribute('data-original-title');
56176                 if (title) {
56177                     return title;
56178                 } else {
56179                     title = this.getAttribute('title');
56180                     this.removeAttribute('title');
56181                     this.setAttribute('data-original-title', title);
56182                 }
56183                 return title;
56184             };
56185             var _html = utilFunctor(false);
56186             var _placement = utilFunctor('top');
56187
56188
56189             tooltip.title = function(val) {
56190                 if (arguments.length) {
56191                     _title = utilFunctor(val);
56192                     return tooltip;
56193                 } else {
56194                     return _title;
56195                 }
56196             };
56197
56198
56199             tooltip.html = function(val) {
56200                 if (arguments.length) {
56201                     _html = utilFunctor(val);
56202                     return tooltip;
56203                 } else {
56204                     return _html;
56205                 }
56206             };
56207
56208
56209             tooltip.placement = function(val) {
56210                 if (arguments.length) {
56211                     _placement = utilFunctor(val);
56212                     return tooltip;
56213                 } else {
56214                     return _placement;
56215                 }
56216             };
56217
56218
56219             tooltip.show = function(selection) {
56220                 selection.each(show);
56221             };
56222
56223
56224             tooltip.hide = function(selection) {
56225                 selection.each(hide);
56226             };
56227
56228
56229             tooltip.toggle = function(selection) {
56230                 selection.each(toggle);
56231             };
56232
56233
56234             tooltip.destroy = function(selection, selector) {
56235                 // by default, just destroy the current tooltip
56236                 selector = selector || '.tooltip-' + _id;
56237
56238                 selection
56239                     .on('mouseenter.tooltip', null)
56240                     .on('mouseleave.tooltip', null)
56241                     .attr('title', function() {
56242                         return this.getAttribute('data-original-title') || this.getAttribute('title');
56243                     })
56244                     .attr('data-original-title', null)
56245                     .selectAll(selector)
56246                     .remove();
56247             };
56248
56249
56250             tooltip.destroyAny = function(selection) {
56251                 selection.call(tooltip.destroy, '.tooltip');
56252             };
56253
56254             var isTouchEvent = false;
56255
56256             function setup() {
56257                 var root = d3_select(this);
56258                 var animate = _animation.apply(this, arguments);
56259                 var tip = root.selectAll('.tooltip-' + _id)
56260                     .data([0]);
56261
56262                 var enter = tip.enter()
56263                     .append('div')
56264                     .attr('class', 'tooltip tooltip-' + _id + ' ' + (klass ? klass : ''));
56265
56266                 enter
56267                     .append('div')
56268                     .attr('class', 'tooltip-arrow');
56269
56270                 enter
56271                     .append('div')
56272                     .attr('class', 'tooltip-inner');
56273
56274                 tip = enter
56275                     .merge(tip);
56276
56277                 if (animate) {
56278                     tip.classed('fade', true);
56279                 }
56280
56281                 var place = _placement.apply(this, arguments);
56282                 tip.classed(place, true);
56283
56284                 root.on('touchstart.tooltip', function() {
56285                     // hack to avoid showing tooltips upon touch input
56286                     isTouchEvent = true;
56287                 });
56288                 root.on('mouseenter.tooltip', show);
56289                 root.on('mouseleave.tooltip', hide);
56290             }
56291
56292
56293             function show() {
56294                 if (isTouchEvent) {
56295                     isTouchEvent = false;
56296                     return;
56297                 }
56298                 var root = d3_select(this);
56299                 var content = _title.apply(this, arguments);
56300                 var tip = root.selectAll('.tooltip-' + _id);
56301
56302                 if (tip.empty()) {   // tooltip was removed somehow, put it back
56303                     root.call(tooltip.destroy);
56304                     root.each(setup);
56305                     tip = root.selectAll('.tooltip-' + _id);
56306                 }
56307
56308                 tip.classed('in', true);
56309                 var markup = _html.apply(this, arguments);
56310
56311                 tip.selectAll('.tooltip-inner')[markup ? 'html' : 'text'](content);
56312                 var place = _placement.apply(this, arguments);
56313                 var outer = getPosition(root.node());
56314                 var inner = getPosition(tip.node());
56315                 var pos;
56316
56317                 switch (place) {
56318                     case 'top':
56319                     pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y - inner.h };
56320                     break;
56321                     case 'right':
56322                     pos = { x: outer.x + outer.w, y: outer.y + (outer.h - inner.h) / 2 };
56323                     break;
56324                     case 'left':
56325                     pos = { x: outer.x - inner.w, y: outer.y + (outer.h - inner.h) / 2 };
56326                     break;
56327                     case 'bottom':
56328                     pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y + outer.h };
56329                     break;
56330                 }
56331
56332                 if (pos) {
56333                     tip.style('left', ~~pos.x + 'px').style('top', ~~pos.y + 'px');
56334                 } else {
56335                     tip.style('left', null).style('top', null);
56336                 }
56337
56338                 this.tooltipVisible = true;
56339
56340
56341                 function getPosition(node) {
56342                     var mode = d3_select(node).style('position');
56343                     if (mode === 'absolute' || mode === 'static') {
56344                         return {
56345                             x: node.offsetLeft,
56346                             y: node.offsetTop,
56347                             w: node.offsetWidth,
56348                             h: node.offsetHeight
56349                         };
56350                     } else {
56351                         return {
56352                             x: 0,
56353                             y: 0,
56354                             w: node.offsetWidth,
56355                             h: node.offsetHeight
56356                         };
56357                     }
56358                 }
56359             }
56360
56361
56362             function hide() {
56363                 d3_select(this).selectAll('.tooltip-' + _id).classed('in', false);
56364                 this.tooltipVisible = false;
56365             }
56366
56367
56368             function toggle() {
56369                 if (this.tooltipVisible) {
56370                     hide.apply(this, arguments);
56371                 } else {
56372                     show.apply(this, arguments);
56373                 }
56374             }
56375
56376
56377             return tooltip;
56378         }
56379
56380         function uiQuickLinks() {
56381             var _choices = [];
56382
56383
56384             function quickLinks(selection) {
56385                 var container = selection.selectAll('.quick-links')
56386                     .data([0]);
56387
56388                 container = container.enter()
56389                     .append('div')
56390                     .attr('class', 'quick-links')
56391                     .merge(container);
56392
56393                 var items = container.selectAll('.quick-link')
56394                     .data(_choices, function(d) { return d.id; });
56395
56396                 items.exit()
56397                     .remove();
56398
56399                 items.enter()
56400                     .append('a')
56401                     .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
56402                     .attr('href', '#')
56403                     .text(function(d) { return t(d.label); })
56404                     .each(function(d) {
56405                         if (typeof d.tooltip !== 'function') return;
56406                         d3_select(this)
56407                             .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
56408                     })
56409                     .on('click', function(d) {
56410                         if (typeof d.click !== 'function') return;
56411                         event.preventDefault();
56412                         d.click(d);
56413                     });
56414             }
56415
56416
56417             //  val should be an array of choices like:
56418             //    [{
56419             //       id: 'link-id',
56420             //       label: 'translation.key',
56421             //       tooltip: function(d),
56422             //       click: function(d)
56423             //    }, ..]
56424             quickLinks.choices = function(val) {
56425                 if (!arguments.length) return _choices;
56426                 _choices = val;
56427                 return quickLinks;
56428             };
56429
56430
56431             return quickLinks;
56432         }
56433
56434         function uiTooltipHtml(text, key, heading) {
56435             var s = '';
56436
56437             if (heading) {
56438                 s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
56439             }
56440             if (text) {
56441                 s += '<div class="tooltip-text"><span>' + text + '</span></div>';
56442             }
56443             if (key) {
56444                 s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>' +
56445                     '<span class="keyhint">' + key + '</span></div>';
56446             }
56447
56448             return s;
56449         }
56450
56451         function uiViewOnOSM(context) {
56452             var _what;   // an osmEntity or osmNote
56453
56454
56455             function viewOnOSM(selection) {
56456                 var url;
56457                 if (_what instanceof osmEntity) {
56458                     url = context.connection().entityURL(_what);
56459                 } else if (_what instanceof osmNote) {
56460                     url = context.connection().noteURL(_what);
56461                 }
56462
56463                 var data = ((!_what || _what.isNew()) ? [] : [_what]);
56464                 var link = selection.selectAll('.view-on-osm')
56465                     .data(data, function(d) { return d.id; });
56466
56467                 // exit
56468                 link.exit()
56469                     .remove();
56470
56471                 // enter
56472                 var linkEnter = link.enter()
56473                     .append('a')
56474                     .attr('class', 'view-on-osm')
56475                     .attr('target', '_blank')
56476                     .attr('href', url)
56477                     .call(svgIcon('#iD-icon-out-link', 'inline'));
56478
56479                 linkEnter
56480                     .append('span')
56481                     .text(t('inspector.view_on_osm'));
56482             }
56483
56484
56485             viewOnOSM.what = function(_) {
56486                 if (!arguments.length) return _what;
56487                 _what = _;
56488                 return viewOnOSM;
56489             };
56490
56491             return viewOnOSM;
56492         }
56493
56494         function uiNoteEditor(context) {
56495             var dispatch$1 = dispatch('change');
56496             var quickLinks = uiQuickLinks();
56497             var noteComments = uiNoteComments();
56498             var noteHeader = uiNoteHeader();
56499
56500             // var formFields = uiFormFields(context);
56501
56502             var _note;
56503             // var _fieldsArr;
56504
56505
56506             function noteEditor(selection) {
56507                 // quick links
56508                 var choices = [{
56509                     id: 'zoom_to',
56510                     label: 'inspector.zoom_to.title',
56511                     tooltip: function() {
56512                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
56513                     },
56514                     click: function zoomTo() {
56515                         context.mode().zoomToSelected();
56516                     }
56517                 }];
56518
56519
56520                 var header = selection.selectAll('.header')
56521                     .data([0]);
56522
56523                 var headerEnter = header.enter()
56524                     .append('div')
56525                     .attr('class', 'header fillL');
56526
56527                 headerEnter
56528                     .append('button')
56529                     .attr('class', 'fr note-editor-close')
56530                     .on('click', function() {
56531                         context.enter(modeBrowse(context));
56532                     })
56533                     .call(svgIcon('#iD-icon-close'));
56534
56535                 headerEnter
56536                     .append('h3')
56537                     .text(t('note.title'));
56538
56539
56540                 var body = selection.selectAll('.body')
56541                     .data([0]);
56542
56543                 body = body.enter()
56544                     .append('div')
56545                     .attr('class', 'body')
56546                     .merge(body);
56547
56548                 var editor = body.selectAll('.note-editor')
56549                     .data([0]);
56550
56551                 editor.enter()
56552                     .append('div')
56553                     .attr('class', 'modal-section note-editor')
56554                     .merge(editor)
56555                     .call(noteHeader.note(_note))
56556                     .call(quickLinks.choices(choices))
56557                     .call(noteComments.note(_note))
56558                     .call(noteSaveSection);
56559
56560
56561                 var footer = selection.selectAll('.footer')
56562                     .data([0]);
56563
56564                 footer.enter()
56565                     .append('div')
56566                     .attr('class', 'footer')
56567                     .merge(footer)
56568                     .call(uiViewOnOSM(context).what(_note))
56569                     .call(uiNoteReport().note(_note));
56570
56571
56572                 // rerender the note editor on any auth change
56573                 var osm = services$1.osm;
56574                 if (osm) {
56575                     osm.on('change.note-save', function() {
56576                         selection.call(noteEditor);
56577                     });
56578                 }
56579             }
56580
56581
56582             function noteSaveSection(selection) {
56583                 var isSelected = (_note && _note.id === context.selectedNoteID());
56584                 var noteSave = selection.selectAll('.note-save')
56585                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
56586
56587                 // exit
56588                 noteSave.exit()
56589                     .remove();
56590
56591                 // enter
56592                 var noteSaveEnter = noteSave.enter()
56593                     .append('div')
56594                     .attr('class', 'note-save save-section cf');
56595
56596                 // // if new note, show categories to pick from
56597                 // if (_note.isNew()) {
56598                 //     var presets = context.presets();
56599
56600                 //     // NOTE: this key isn't a age and therefore there is no documentation (yet)
56601                 //     _fieldsArr = [
56602                 //         uiField(context, presets.field('category'), null, { show: true, revert: false }),
56603                 //     ];
56604
56605                 //     _fieldsArr.forEach(function(field) {
56606                 //         field
56607                 //             .on('change', changeCategory);
56608                 //     });
56609
56610                 //     noteSaveEnter
56611                 //         .append('div')
56612                 //         .attr('class', 'note-category')
56613                 //         .call(formFields.fieldsArr(_fieldsArr));
56614                 // }
56615
56616                 // function changeCategory() {
56617                 //     // NOTE: perhaps there is a better way to get value
56618                 //     var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
56619
56620                 //     // store the unsaved category with the note itself
56621                 //     _note = _note.update({ newCategory: val });
56622                 //     var osm = services.osm;
56623                 //     if (osm) {
56624                 //         osm.replaceNote(_note);  // update note cache
56625                 //     }
56626                 //     noteSave
56627                 //         .call(noteSaveButtons);
56628                 // }
56629
56630                 noteSaveEnter
56631                     .append('h4')
56632                     .attr('class', '.note-save-header')
56633                     .text(function() {
56634                         return _note.isNew() ? t('note.newDescription') : t('note.newComment');
56635                     });
56636
56637                 noteSaveEnter
56638                     .append('textarea')
56639                     .attr('class', 'new-comment-input')
56640                     .attr('placeholder', t('note.inputPlaceholder'))
56641                     .attr('maxlength', 1000)
56642                     .property('value', function(d) { return d.newComment; })
56643                     .call(utilNoAuto)
56644                     .on('keydown.note-input', keydown)
56645                     .on('input.note-input', changeInput)
56646                     .on('blur.note-input', changeInput);
56647
56648                 // update
56649                 noteSave = noteSaveEnter
56650                     .merge(noteSave)
56651                     .call(userDetails)
56652                     .call(noteSaveButtons);
56653
56654
56655                 // fast submit if user presses cmd+enter
56656                 function keydown() {
56657                     if (!(event.keyCode === 13 && event.metaKey)) return;
56658
56659                     var osm = services$1.osm;
56660                     if (!osm) return;
56661
56662                     var hasAuth = osm.authenticated();
56663                     if (!hasAuth) return;
56664
56665                     if (!_note.newComment) return;
56666
56667                     event.preventDefault();
56668
56669                     d3_select(this)
56670                         .on('keydown.note-input', null);
56671
56672                     // focus on button and submit
56673                     window.setTimeout(function() {
56674                         if (_note.isNew()) {
56675                             noteSave.selectAll('.save-button').node().focus();
56676                             clickSave(_note);
56677                         } else  {
56678                             noteSave.selectAll('.comment-button').node().focus();
56679                             clickComment(_note);
56680                         }
56681                     }, 10);
56682                 }
56683
56684
56685                 function changeInput() {
56686                     var input = d3_select(this);
56687                     var val = input.property('value').trim() || undefined;
56688
56689                     // store the unsaved comment with the note itself
56690                     _note = _note.update({ newComment: val });
56691
56692                     var osm = services$1.osm;
56693                     if (osm) {
56694                         osm.replaceNote(_note);  // update note cache
56695                     }
56696
56697                     noteSave
56698                         .call(noteSaveButtons);
56699                 }
56700             }
56701
56702
56703             function userDetails(selection) {
56704                 var detailSection = selection.selectAll('.detail-section')
56705                     .data([0]);
56706
56707                 detailSection = detailSection.enter()
56708                     .append('div')
56709                     .attr('class', 'detail-section')
56710                     .merge(detailSection);
56711
56712                 var osm = services$1.osm;
56713                 if (!osm) return;
56714
56715                 // Add warning if user is not logged in
56716                 var hasAuth = osm.authenticated();
56717                 var authWarning = detailSection.selectAll('.auth-warning')
56718                     .data(hasAuth ? [] : [0]);
56719
56720                 authWarning.exit()
56721                     .transition()
56722                     .duration(200)
56723                     .style('opacity', 0)
56724                     .remove();
56725
56726                 var authEnter = authWarning.enter()
56727                     .insert('div', '.tag-reference-body')
56728                     .attr('class', 'field-warning auth-warning')
56729                     .style('opacity', 0);
56730
56731                 authEnter
56732                     .call(svgIcon('#iD-icon-alert', 'inline'));
56733
56734                 authEnter
56735                     .append('span')
56736                     .text(t('note.login'));
56737
56738                 authEnter
56739                     .append('a')
56740                     .attr('target', '_blank')
56741                     .call(svgIcon('#iD-icon-out-link', 'inline'))
56742                     .append('span')
56743                     .text(t('login'))
56744                     .on('click.note-login', function() {
56745                         event.preventDefault();
56746                         osm.authenticate();
56747                     });
56748
56749                 authEnter
56750                     .transition()
56751                     .duration(200)
56752                     .style('opacity', 1);
56753
56754
56755                 var prose = detailSection.selectAll('.note-save-prose')
56756                     .data(hasAuth ? [0] : []);
56757
56758                 prose.exit()
56759                     .remove();
56760
56761                 prose = prose.enter()
56762                     .append('p')
56763                     .attr('class', 'note-save-prose')
56764                     .text(t('note.upload_explanation'))
56765                     .merge(prose);
56766
56767                 osm.userDetails(function(err, user) {
56768                     if (err) return;
56769
56770                     var userLink = d3_select(document.createElement('div'));
56771
56772                     if (user.image_url) {
56773                         userLink
56774                             .append('img')
56775                             .attr('src', user.image_url)
56776                             .attr('class', 'icon pre-text user-icon');
56777                     }
56778
56779                     userLink
56780                         .append('a')
56781                         .attr('class', 'user-info')
56782                         .text(user.display_name)
56783                         .attr('href', osm.userURL(user.display_name))
56784                         .attr('tabindex', -1)
56785                         .attr('target', '_blank');
56786
56787                     prose
56788                         .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
56789                 });
56790             }
56791
56792
56793             function noteSaveButtons(selection) {
56794                 var osm = services$1.osm;
56795                 var hasAuth = osm && osm.authenticated();
56796
56797                 var isSelected = (_note && _note.id === context.selectedNoteID());
56798                 var buttonSection = selection.selectAll('.buttons')
56799                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
56800
56801                 // exit
56802                 buttonSection.exit()
56803                     .remove();
56804
56805                 // enter
56806                 var buttonEnter = buttonSection.enter()
56807                     .append('div')
56808                     .attr('class', 'buttons');
56809
56810                 if (_note.isNew()) {
56811                     buttonEnter
56812                         .append('button')
56813                         .attr('class', 'button cancel-button secondary-action')
56814                         .text(t('confirm.cancel'));
56815
56816                     buttonEnter
56817                         .append('button')
56818                         .attr('class', 'button save-button action')
56819                         .text(t('note.save'));
56820
56821                 } else {
56822                     buttonEnter
56823                         .append('button')
56824                         .attr('class', 'button status-button action');
56825
56826                     buttonEnter
56827                         .append('button')
56828                         .attr('class', 'button comment-button action')
56829                         .text(t('note.comment'));
56830                 }
56831
56832
56833                 // update
56834                 buttonSection = buttonSection
56835                     .merge(buttonEnter);
56836
56837                 buttonSection.select('.cancel-button')   // select and propagate data
56838                     .on('click.cancel', clickCancel);
56839
56840                 buttonSection.select('.save-button')     // select and propagate data
56841                     .attr('disabled', isSaveDisabled)
56842                     .on('click.save', clickSave);
56843
56844                 buttonSection.select('.status-button')   // select and propagate data
56845                     .attr('disabled', (hasAuth ? null : true))
56846                     .text(function(d) {
56847                         var action = (d.status === 'open' ? 'close' : 'open');
56848                         var andComment = (d.newComment ? '_comment' : '');
56849                         return t('note.' + action + andComment);
56850                     })
56851                     .on('click.status', clickStatus);
56852
56853                 buttonSection.select('.comment-button')   // select and propagate data
56854                     .attr('disabled', isSaveDisabled)
56855                     .on('click.comment', clickComment);
56856
56857
56858                 function isSaveDisabled(d) {
56859                     return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
56860                 }
56861             }
56862
56863
56864
56865             function clickCancel(d) {
56866                 this.blur();    // avoid keeping focus on the button - #4641
56867                 var osm = services$1.osm;
56868                 if (osm) {
56869                     osm.removeNote(d);
56870                 }
56871                 context.enter(modeBrowse(context));
56872                 dispatch$1.call('change');
56873             }
56874
56875
56876             function clickSave(d) {
56877                 this.blur();    // avoid keeping focus on the button - #4641
56878                 var osm = services$1.osm;
56879                 if (osm) {
56880                     osm.postNoteCreate(d, function(err, note) {
56881                         dispatch$1.call('change', note);
56882                     });
56883                 }
56884             }
56885
56886
56887             function clickStatus(d) {
56888                 this.blur();    // avoid keeping focus on the button - #4641
56889                 var osm = services$1.osm;
56890                 if (osm) {
56891                     var setStatus = (d.status === 'open' ? 'closed' : 'open');
56892                     osm.postNoteUpdate(d, setStatus, function(err, note) {
56893                         dispatch$1.call('change', note);
56894                     });
56895                 }
56896             }
56897
56898             function clickComment(d) {
56899                 this.blur();    // avoid keeping focus on the button - #4641
56900                 var osm = services$1.osm;
56901                 if (osm) {
56902                     osm.postNoteUpdate(d, d.status, function(err, note) {
56903                         dispatch$1.call('change', note);
56904                     });
56905                 }
56906             }
56907
56908
56909             noteEditor.note = function(val) {
56910                 if (!arguments.length) return _note;
56911                 _note = val;
56912                 return noteEditor;
56913             };
56914
56915
56916             return utilRebind(noteEditor, dispatch$1, 'on');
56917         }
56918
56919         function modeSelectNote(context, selectedNoteID) {
56920             var mode = {
56921                 id: 'select-note',
56922                 button: 'browse'
56923             };
56924
56925             var osm = services$1.osm;
56926             var keybinding = utilKeybinding('select-note');
56927             var noteEditor = uiNoteEditor(context)
56928                 .on('change', function() {
56929                     context.map().pan([0,0]);  // trigger a redraw
56930                     var note = checkSelectedID();
56931                     if (!note) return;
56932                     context.ui().sidebar
56933                         .show(noteEditor.note(note));
56934                 });
56935
56936             var behaviors = [
56937                 behaviorBreathe(),
56938                 behaviorHover(context),
56939                 behaviorSelect(context),
56940                 behaviorLasso(context),
56941                 modeDragNode(context).behavior,
56942                 modeDragNote(context).behavior
56943             ];
56944
56945             var newFeature = false;
56946
56947
56948             function checkSelectedID() {
56949                 if (!osm) return;
56950                 var note = osm.getNote(selectedNoteID);
56951                 if (!note) {
56952                     context.enter(modeBrowse(context));
56953                 }
56954                 return note;
56955             }
56956
56957
56958             // class the note as selected, or return to browse mode if the note is gone
56959             function selectNote(drawn) {
56960                 if (!checkSelectedID()) return;
56961
56962                 var selection = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
56963
56964                 if (selection.empty()) {
56965                     // Return to browse mode if selected DOM elements have
56966                     // disappeared because the user moved them out of view..
56967                     var source = event && event.type === 'zoom' && event.sourceEvent;
56968                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
56969                         context.enter(modeBrowse(context));
56970                     }
56971
56972                 } else {
56973                     selection
56974                         .classed('selected', true);
56975
56976                     context.selectedNoteID(selectedNoteID);
56977                 }
56978             }
56979
56980
56981             function esc() {
56982                 if (d3_select('.combobox').size()) return;
56983                 context.enter(modeBrowse(context));
56984             }
56985
56986
56987             mode.zoomToSelected = function() {
56988                 if (!osm) return;
56989                 var note = osm.getNote(selectedNoteID);
56990                 if (note) {
56991                     context.map().centerZoomEase(note.loc, 20);
56992                 }
56993             };
56994
56995
56996             mode.newFeature = function(val) {
56997                 if (!arguments.length) return newFeature;
56998                 newFeature = val;
56999                 return mode;
57000             };
57001
57002
57003             mode.enter = function() {
57004                 var note = checkSelectedID();
57005                 if (!note) return;
57006
57007                 behaviors.forEach(context.install);
57008
57009                 keybinding
57010                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
57011                     .on('⎋', esc, true);
57012
57013                 d3_select(document)
57014                     .call(keybinding);
57015
57016                 selectNote();
57017
57018                 var sidebar = context.ui().sidebar;
57019                 sidebar.show(noteEditor.note(note));
57020
57021                 // expand the sidebar, avoid obscuring the note if needed
57022                 sidebar.expand(sidebar.intersects(note.extent()));
57023
57024                 context.map()
57025                     .on('drawn.select', selectNote);
57026             };
57027
57028
57029             mode.exit = function() {
57030                 behaviors.forEach(context.uninstall);
57031
57032                 d3_select(document)
57033                     .call(keybinding.unbind);
57034
57035                 context.surface()
57036                     .selectAll('.layer-notes .selected')
57037                     .classed('selected hover', false);
57038
57039                 context.map()
57040                     .on('drawn.select', null);
57041
57042                 context.ui().sidebar
57043                     .hide();
57044
57045                 context.selectedNoteID(null);
57046             };
57047
57048
57049             return mode;
57050         }
57051
57052         function modeDragNote(context) {
57053             var mode = {
57054                 id: 'drag-note',
57055                 button: 'browse'
57056             };
57057
57058             var edit = behaviorEdit(context);
57059
57060             var _nudgeInterval;
57061             var _lastLoc;
57062             var _note;    // most current note.. dragged note may have stale datum.
57063
57064
57065             function startNudge(nudge) {
57066                 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
57067                 _nudgeInterval = window.setInterval(function() {
57068                     context.pan(nudge);
57069                     doMove(nudge);
57070                 }, 50);
57071             }
57072
57073
57074             function stopNudge() {
57075                 if (_nudgeInterval) {
57076                     window.clearInterval(_nudgeInterval);
57077                     _nudgeInterval = null;
57078                 }
57079             }
57080
57081
57082             function origin(note) {
57083                 return context.projection(note.loc);
57084             }
57085
57086
57087             function start(note) {
57088                 _note = note;
57089                 var osm = services$1.osm;
57090                 if (osm) {
57091                     // Get latest note from cache.. The marker may have a stale datum bound to it
57092                     // and dragging it around can sometimes delete the users note comment.
57093                     _note = osm.getNote(_note.id);
57094                 }
57095
57096                 context.surface().selectAll('.note-' + _note.id)
57097                     .classed('active', true);
57098
57099                 context.perform(actionNoop());
57100                 context.enter(mode);
57101                 context.selectedNoteID(_note.id);
57102             }
57103
57104
57105             function move() {
57106                 event.sourceEvent.stopPropagation();
57107                 _lastLoc = context.projection.invert(event.point);
57108
57109                 doMove();
57110                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
57111                 if (nudge) {
57112                     startNudge(nudge);
57113                 } else {
57114                     stopNudge();
57115                 }
57116             }
57117
57118
57119             function doMove(nudge) {
57120                 nudge = nudge || [0, 0];
57121
57122                 var currPoint = (event && event.point) || context.projection(_lastLoc);
57123                 var currMouse = geoVecSubtract(currPoint, nudge);
57124                 var loc = context.projection.invert(currMouse);
57125
57126                 _note = _note.move(loc);
57127
57128                 var osm = services$1.osm;
57129                 if (osm) {
57130                     osm.replaceNote(_note);  // update note cache
57131                 }
57132
57133                 context.replace(actionNoop());   // trigger redraw
57134             }
57135
57136
57137             function end() {
57138                 context.replace(actionNoop());   // trigger redraw
57139
57140                 context
57141                     .selectedNoteID(_note.id)
57142                     .enter(modeSelectNote(context, _note.id));
57143             }
57144
57145
57146             var drag = behaviorDrag()
57147                 .selector('.layer-touch.markers .target.note.new')
57148                 .surface(d3_select('#map').node())
57149                 .origin(origin)
57150                 .on('start', start)
57151                 .on('move', move)
57152                 .on('end', end);
57153
57154
57155             mode.enter = function() {
57156                 context.install(edit);
57157             };
57158
57159
57160             mode.exit = function() {
57161                 context.ui().sidebar.hover.cancel();
57162                 context.uninstall(edit);
57163
57164                 context.surface()
57165                     .selectAll('.active')
57166                     .classed('active', false);
57167
57168                 stopNudge();
57169             };
57170
57171             mode.behavior = drag;
57172
57173             return mode;
57174         }
57175
57176         function uiDataHeader() {
57177             var _datum;
57178
57179
57180             function dataHeader(selection) {
57181                 var header = selection.selectAll('.data-header')
57182                     .data(
57183                         (_datum ? [_datum] : []),
57184                         function(d) { return d.__featurehash__; }
57185                     );
57186
57187                 header.exit()
57188                     .remove();
57189
57190                 var headerEnter = header.enter()
57191                     .append('div')
57192                     .attr('class', 'data-header');
57193
57194                 var iconEnter = headerEnter
57195                     .append('div')
57196                     .attr('class', 'data-header-icon');
57197
57198                 iconEnter
57199                     .append('div')
57200                     .attr('class', 'preset-icon-28')
57201                     .call(svgIcon('#iD-icon-data', 'note-fill'));
57202
57203                 headerEnter
57204                     .append('div')
57205                     .attr('class', 'data-header-label')
57206                     .text(t('map_data.layers.custom.title'));
57207             }
57208
57209
57210             dataHeader.datum = function(val) {
57211                 if (!arguments.length) return _datum;
57212                 _datum = val;
57213                 return this;
57214             };
57215
57216
57217             return dataHeader;
57218         }
57219
57220         // This code assumes that the combobox values will not have duplicate entries.
57221         // It is keyed on the `value` of the entry. Data should be an array of objects like:
57222         //   [{
57223         //       value:  'display text',  // required
57224         //       title:  'hover text'     // optional
57225         //   }, ...]
57226
57227         var _comboHideTimerID;
57228
57229         function uiCombobox(context, klass) {
57230             var dispatch$1 = dispatch('accept', 'cancel');
57231             var container = context.container();
57232
57233             var _suggestions = [];
57234             var _data = [];
57235             var _fetched = {};
57236             var _selected = null;
57237             var _canAutocomplete = true;
57238             var _caseSensitive = false;
57239             var _cancelFetch = false;
57240             var _minItems = 2;
57241             var _tDown = 0;
57242             var _mouseEnterHandler, _mouseLeaveHandler;
57243
57244             var _fetcher = function(val, cb) {
57245                 cb(_data.filter(function(d) {
57246                     var terms = d.terms || [];
57247                     terms.push(d.value);
57248                     return terms.some(function(term) {
57249                         return term
57250                             .toString()
57251                             .toLowerCase()
57252                             .indexOf(val.toLowerCase()) !== -1;
57253                     });
57254                 }));
57255             };
57256
57257             var combobox = function(input, attachTo) {
57258                 if (!input || input.empty()) return;
57259
57260                 input
57261                     .classed('combobox-input', true)
57262                     .on('focus.combo-input', focus)
57263                     .on('blur.combo-input', blur)
57264                     .on('keydown.combo-input', keydown)
57265                     .on('keyup.combo-input', keyup)
57266                     .on('input.combo-input', change)
57267                     .on('mousedown.combo-input', mousedown)
57268                     .each(function() {
57269                         var parent = this.parentNode;
57270                         var sibling = this.nextSibling;
57271
57272                         d3_select(parent).selectAll('.combobox-caret')
57273                             .filter(function(d) { return d === input.node(); })
57274                             .data([input.node()])
57275                             .enter()
57276                             .insert('div', function() { return sibling; })
57277                             .attr('class', 'combobox-caret')
57278                             .on('mousedown.combo-caret', function() {
57279                                 event.preventDefault(); // don't steal focus from input
57280                                 input.node().focus(); // focus the input as if it was clicked
57281                                 mousedown();
57282                             })
57283                             .on('mouseup.combo-caret', function() {
57284                                 event.preventDefault(); // don't steal focus from input
57285                                 mouseup();
57286                             });
57287                     });
57288
57289
57290                 function mousedown() {
57291                     if (event.button !== 0) return;    // left click only
57292                     _tDown = +new Date();
57293
57294                     // clear selection
57295                     var start = input.property('selectionStart');
57296                     var end = input.property('selectionEnd');
57297                     if (start !== end) {
57298                         var val = utilGetSetValue(input);
57299                         input.node().setSelectionRange(val.length, val.length);
57300                         return;
57301                     }
57302
57303                     input.on('mouseup.combo-input', mouseup);
57304                 }
57305
57306
57307                 function mouseup() {
57308                     input.on('mouseup.combo-input', null);
57309                     if (event.button !== 0) return;    // left click only
57310                     if (input.node() !== document.activeElement) return;   // exit if this input is not focused
57311
57312                     var start = input.property('selectionStart');
57313                     var end = input.property('selectionEnd');
57314                     if (start !== end) return;  // exit if user is selecting
57315
57316                     // not showing or showing for a different field - try to show it.
57317                     var combo = container.selectAll('.combobox');
57318                     if (combo.empty() || combo.datum() !== input.node()) {
57319                         var tOrig = _tDown;
57320                         window.setTimeout(function() {
57321                             if (tOrig !== _tDown) return;   // exit if user double clicked
57322                             fetchComboData('', function() {
57323                                 show();
57324                                 render();
57325                             });
57326                         }, 250);
57327
57328                     } else {
57329                         hide();
57330                     }
57331                 }
57332
57333
57334                 function focus() {
57335                     fetchComboData('');   // prefetch values (may warm taginfo cache)
57336                 }
57337
57338
57339                 function blur() {
57340                     _comboHideTimerID = window.setTimeout(hide, 75);
57341                 }
57342
57343
57344                 function show() {
57345                     hide();   // remove any existing
57346
57347                     container
57348                         .insert('div', ':first-child')
57349                         .datum(input.node())
57350                         .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
57351                         .style('position', 'absolute')
57352                         .style('display', 'block')
57353                         .style('left', '0px')
57354                         .on('mousedown.combo-container', function () {
57355                             // prevent moving focus out of the input field
57356                             event.preventDefault();
57357                         });
57358
57359                     d3_select('body')
57360                         .on('scroll.combo-scroll', render, true);
57361                 }
57362
57363
57364                 function hide() {
57365                     if (_comboHideTimerID) {
57366                         window.clearTimeout(_comboHideTimerID);
57367                         _comboHideTimerID = undefined;
57368                     }
57369
57370                     container.selectAll('.combobox')
57371                         .remove();
57372
57373                     d3_select('body')
57374                         .on('scroll.combo-scroll', null);
57375                 }
57376
57377
57378                 function keydown() {
57379                     var shown = !container.selectAll('.combobox').empty();
57380                     var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
57381
57382                     switch (event.keyCode) {
57383                         case 8:   // ⌫ Backspace
57384                         case 46:  // ⌦ Delete
57385                             event.stopPropagation();
57386                             _selected = null;
57387                             render();
57388                             input.on('input.combo-input', function() {
57389                                 var start = input.property('selectionStart');
57390                                 input.node().setSelectionRange(start, start);
57391                                 input.on('input.combo-input', change);
57392                             });
57393                             break;
57394
57395                         case 9:   // ⇥ Tab
57396                             accept();
57397                             break;
57398
57399                         case 13:  // ↩ Return
57400                             event.preventDefault();
57401                             event.stopPropagation();
57402                             break;
57403
57404                         case 38:  // ↑ Up arrow
57405                             if (tagName === 'textarea' && !shown) return;
57406                             event.preventDefault();
57407                             if (tagName === 'input' && !shown) {
57408                                 show();
57409                             }
57410                             nav(-1);
57411                             break;
57412
57413                         case 40:  // ↓ Down arrow
57414                             if (tagName === 'textarea' && !shown) return;
57415                             event.preventDefault();
57416                             if (tagName === 'input' && !shown) {
57417                                 show();
57418                             }
57419                             nav(+1);
57420                             break;
57421                     }
57422                 }
57423
57424
57425                 function keyup() {
57426                     switch (event.keyCode) {
57427                         case 27:  // ⎋ Escape
57428                             cancel();
57429                             break;
57430
57431                         case 13:  // ↩ Return
57432                             accept();
57433                             break;
57434                     }
57435                 }
57436
57437
57438                 // Called whenever the input value is changed (e.g. on typing)
57439                 function change() {
57440                     fetchComboData(value(), function() {
57441                         _selected = null;
57442                         var val = input.property('value');
57443
57444                         if (_suggestions.length) {
57445                             if (input.property('selectionEnd') === val.length) {
57446                                 _selected = tryAutocomplete();
57447                             }
57448
57449                             if (!_selected) {
57450                                 _selected = val;
57451                             }
57452                         }
57453
57454                         if (val.length) {
57455                             var combo = container.selectAll('.combobox');
57456                             if (combo.empty()) {
57457                                 show();
57458                             }
57459                         } else {
57460                             hide();
57461                         }
57462
57463                         render();
57464                     });
57465                 }
57466
57467
57468                 // Called when the user presses up/down arrows to navigate the list
57469                 function nav(dir) {
57470                     if (_suggestions.length) {
57471                         // try to determine previously selected index..
57472                         var index = -1;
57473                         for (var i = 0; i < _suggestions.length; i++) {
57474                             if (_selected && _suggestions[i].value === _selected) {
57475                                 index = i;
57476                                 break;
57477                             }
57478                         }
57479
57480                         // pick new _selected
57481                         index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
57482                         _selected = _suggestions[index].value;
57483                         input.property('value', _selected);
57484                     }
57485
57486                     render();
57487                     ensureVisible();
57488                 }
57489
57490
57491                 function ensureVisible() {
57492                     var combo = container.selectAll('.combobox');
57493                     if (combo.empty()) return;
57494
57495                     var containerRect = container.node().getBoundingClientRect();
57496                     var comboRect = combo.node().getBoundingClientRect();
57497
57498                     if (comboRect.bottom > containerRect.bottom) {
57499                         var node = attachTo ? attachTo.node() : input.node();
57500                         node.scrollIntoView({ behavior: 'instant', block: 'center' });
57501                         render();
57502                     }
57503
57504                     // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
57505                     var selected = combo.selectAll('.combobox-option.selected').node();
57506                     if (selected) {
57507                         selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
57508                     }
57509                 }
57510
57511
57512                 function value() {
57513                     var value = input.property('value');
57514                     var start = input.property('selectionStart');
57515                     var end = input.property('selectionEnd');
57516
57517                     if (start && end) {
57518                         value = value.substring(0, start);
57519                     }
57520
57521                     return value;
57522                 }
57523
57524
57525                 function fetchComboData(v, cb) {
57526                     _cancelFetch = false;
57527
57528                     _fetcher.call(input, v, function(results) {
57529                         // already chose a value, don't overwrite or autocomplete it
57530                         if (_cancelFetch) return;
57531
57532                         _suggestions = results;
57533                         results.forEach(function(d) { _fetched[d.value] = d; });
57534
57535                         if (cb) {
57536                             cb();
57537                         }
57538                     });
57539                 }
57540
57541
57542                 function tryAutocomplete() {
57543                     if (!_canAutocomplete) return;
57544
57545                     var val = _caseSensitive ? value() : value().toLowerCase();
57546                     if (!val) return;
57547
57548                     // Don't autocomplete if user is typing a number - #4935
57549                     if (!isNaN(parseFloat(val)) && isFinite(val)) return;
57550
57551                     var bestIndex = -1;
57552                     for (var i = 0; i < _suggestions.length; i++) {
57553                         var suggestion = _suggestions[i].value;
57554                         var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
57555
57556                         // if search string matches suggestion exactly, pick it..
57557                         if (compare === val) {
57558                             bestIndex = i;
57559                             break;
57560
57561                         // otherwise lock in the first result that starts with the search string..
57562                         } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
57563                             bestIndex = i;
57564                         }
57565                     }
57566
57567                     if (bestIndex !== -1) {
57568                         var bestVal = _suggestions[bestIndex].value;
57569                         input.property('value', bestVal);
57570                         input.node().setSelectionRange(val.length, bestVal.length);
57571                         return bestVal;
57572                     }
57573                 }
57574
57575
57576                 function render() {
57577                     if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
57578                         hide();
57579                         return;
57580                     }
57581
57582                     var shown = !container.selectAll('.combobox').empty();
57583                     if (!shown) return;
57584
57585                     var combo = container.selectAll('.combobox');
57586                     var options = combo.selectAll('.combobox-option')
57587                         .data(_suggestions, function(d) { return d.value; });
57588
57589                     options.exit()
57590                         .remove();
57591
57592                     // enter/update
57593                     options.enter()
57594                         .append('a')
57595                         .attr('class', 'combobox-option')
57596                         .attr('title', function(d) { return d.title; })
57597                         .text(function(d) { return d.display || d.value; })
57598                         .on('mouseenter', _mouseEnterHandler)
57599                         .on('mouseleave', _mouseLeaveHandler)
57600                         .merge(options)
57601                         .classed('selected', function(d) { return d.value === _selected; })
57602                         .on('click.combo-option', accept)
57603                         .order();
57604
57605                     var node = attachTo ? attachTo.node() : input.node();
57606                     var rect = node.getBoundingClientRect();
57607
57608                     combo
57609                         .style('left', (rect.left + 5) + 'px')
57610                         .style('width', (rect.width - 10) + 'px')
57611                         .style('top', rect.height + rect.top + 'px');
57612                 }
57613
57614
57615                 // Dispatches an 'accept' event
57616                 // Then hides the combobox.
57617                 function accept(d) {
57618                     _cancelFetch = true;
57619                     var thiz = input.node();
57620
57621                     if (d) {   // user clicked on a suggestion
57622                         utilGetSetValue(input, d.value);    // replace field contents
57623                         utilTriggerEvent(input, 'change');
57624                     }
57625
57626                     // clear (and keep) selection
57627                     var val = utilGetSetValue(input);
57628                     thiz.setSelectionRange(val.length, val.length);
57629
57630                     d = _fetched[val];
57631                     dispatch$1.call('accept', thiz, d, val);
57632                     hide();
57633                 }
57634
57635
57636                 // Dispatches an 'cancel' event
57637                 // Then hides the combobox.
57638                 function cancel() {
57639                     _cancelFetch = true;
57640                     var thiz = input.node();
57641
57642                     // clear (and remove) selection, and replace field contents
57643                     var val = utilGetSetValue(input);
57644                     var start = input.property('selectionStart');
57645                     var end = input.property('selectionEnd');
57646                     val = val.slice(0, start) + val.slice(end);
57647                     utilGetSetValue(input, val);
57648                     thiz.setSelectionRange(val.length, val.length);
57649
57650                     dispatch$1.call('cancel', thiz);
57651                     hide();
57652                 }
57653
57654             };
57655
57656
57657             combobox.canAutocomplete = function(val) {
57658                 if (!arguments.length) return _canAutocomplete;
57659                 _canAutocomplete = val;
57660                 return combobox;
57661             };
57662
57663             combobox.caseSensitive = function(val) {
57664                 if (!arguments.length) return _caseSensitive;
57665                 _caseSensitive = val;
57666                 return combobox;
57667             };
57668
57669             combobox.data = function(val) {
57670                 if (!arguments.length) return _data;
57671                 _data = val;
57672                 return combobox;
57673             };
57674
57675             combobox.fetcher = function(val) {
57676                 if (!arguments.length) return _fetcher;
57677                 _fetcher = val;
57678                 return combobox;
57679             };
57680
57681             combobox.minItems = function(val) {
57682                 if (!arguments.length) return _minItems;
57683                 _minItems = val;
57684                 return combobox;
57685             };
57686
57687             combobox.itemsMouseEnter = function(val) {
57688                 if (!arguments.length) return _mouseEnterHandler;
57689                 _mouseEnterHandler = val;
57690                 return combobox;
57691             };
57692
57693             combobox.itemsMouseLeave = function(val) {
57694                 if (!arguments.length) return _mouseLeaveHandler;
57695                 _mouseLeaveHandler = val;
57696                 return combobox;
57697             };
57698
57699             return utilRebind(combobox, dispatch$1, 'on');
57700         }
57701
57702
57703         uiCombobox.off = function(input) {
57704             input
57705                 .on('focus.combo-input', null)
57706                 .on('blur.combo-input', null)
57707                 .on('keydown.combo-input', null)
57708                 .on('keyup.combo-input', null)
57709                 .on('input.combo-input', null)
57710                 .on('mousedown.combo-input', null)
57711                 .on('mouseup.combo-input', null);
57712
57713
57714             d3_select('body')
57715                 .on('scroll.combo-scroll', null);
57716         };
57717
57718         // toggles the visibility of ui elements, using a combination of the
57719         // hide class, which sets display=none, and a d3 transition for opacity.
57720         // this will cause blinking when called repeatedly, so check that the
57721         // value actually changes between calls.
57722         function uiToggle(show, callback) {
57723             return function(selection) {
57724                 selection
57725                     .style('opacity', show ? 0 : 1)
57726                     .classed('hide', false)
57727                     .transition()
57728                     .style('opacity', show ? 1 : 0)
57729                     .on('end', function() {
57730                         d3_select(this)
57731                             .classed('hide', !show)
57732                             .style('opacity', null);
57733                         if (callback) callback.apply(this);
57734                     });
57735             };
57736         }
57737
57738         function uiDisclosure(context, key, expandedDefault) {
57739             var dispatch$1 = dispatch('toggled');
57740             var _preference = (context.storage('disclosure.' + key + '.expanded'));
57741             var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
57742             var _title;
57743             var _updatePreference = true;
57744             var _content = function () {};
57745
57746
57747             var disclosure = function(selection) {
57748                 var hideToggle = selection.selectAll('.hide-toggle-' + key)
57749                     .data([0]);
57750
57751                 // enter
57752                 var hideToggleEnter = hideToggle.enter()
57753                     .append('a')
57754                     .attr('href', '#')
57755                     .attr('class', 'hide-toggle hide-toggle-' + key)
57756                     .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
57757
57758                 hideToggleEnter
57759                     .append('span')
57760                     .attr('class', 'hide-toggle-text');
57761
57762                 // update
57763                 hideToggle = hideToggleEnter
57764                     .merge(hideToggle);
57765
57766                 hideToggle
57767                     .on('click', toggle)
57768                     .classed('expanded', _expanded);
57769
57770                 hideToggle.selectAll('.hide-toggle-text')
57771                     .text(_title);
57772
57773                 hideToggle.selectAll('.hide-toggle-icon')
57774                     .attr('xlink:href', _expanded ? '#iD-icon-down'
57775                         : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
57776                     );
57777
57778
57779                 var wrap = selection.selectAll('.disclosure-wrap')
57780                     .data([0]);
57781
57782                 // enter/update
57783                 wrap = wrap.enter()
57784                     .append('div')
57785                     .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
57786                     .merge(wrap)
57787                     .classed('hide', !_expanded);
57788
57789                 if (_expanded) {
57790                     wrap
57791                         .call(_content);
57792                 }
57793
57794
57795                 function toggle() {
57796                     event.preventDefault();
57797
57798                     _expanded = !_expanded;
57799
57800                     if (_updatePreference) {
57801                         context.storage('disclosure.' + key + '.expanded', _expanded);
57802                     }
57803
57804                     hideToggle
57805                         .classed('expanded', _expanded);
57806
57807                     hideToggle.selectAll('.hide-toggle-icon')
57808                         .attr('xlink:href', _expanded ? '#iD-icon-down'
57809                             : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
57810                         );
57811
57812                     wrap
57813                         .call(uiToggle(_expanded));
57814
57815                     if (_expanded) {
57816                         wrap
57817                             .call(_content);
57818                     }
57819
57820                     dispatch$1.call('toggled', this, _expanded);
57821                 }
57822             };
57823
57824
57825             disclosure.title = function(val) {
57826                 if (!arguments.length) return _title;
57827                 _title = val;
57828                 return disclosure;
57829             };
57830
57831
57832             disclosure.expanded = function(val) {
57833                 if (!arguments.length) return _expanded;
57834                 _expanded = val;
57835                 return disclosure;
57836             };
57837
57838
57839             disclosure.updatePreference = function(val) {
57840                 if (!arguments.length) return _updatePreference;
57841                 _updatePreference = val;
57842                 return disclosure;
57843             };
57844
57845
57846             disclosure.content = function(val) {
57847                 if (!arguments.length) return _content;
57848                 _content = val;
57849                 return disclosure;
57850             };
57851
57852
57853             return utilRebind(disclosure, dispatch$1, 'on');
57854         }
57855
57856         // Pass `which` object of the form:
57857         // {
57858         //   key: 'string',     // required
57859         //   value: 'string'    // optional
57860         // }
57861         //   -or-
57862         // {
57863         //   rtype: 'string'    // relation type  (e.g. 'multipolygon')
57864         // }
57865         //   -or-
57866         // {
57867         //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
57868         // }
57869         //
57870         function uiTagReference(what) {
57871             var wikibase = what.qid ? services$1.wikidata : services$1.osmWikibase;
57872             var tagReference = {};
57873
57874             var _button = d3_select(null);
57875             var _body = d3_select(null);
57876             var _loaded;
57877             var _showing;
57878
57879
57880             function load() {
57881                 if (!wikibase) return;
57882
57883                 _button
57884                     .classed('tag-reference-loading', true);
57885
57886                 wikibase.getDocs(what, gotDocs);
57887             }
57888
57889
57890             function gotDocs(err, docs) {
57891                 _body.html('');
57892
57893                 if (!docs || !docs.title) {
57894                     _body
57895                         .append('p')
57896                         .attr('class', 'tag-reference-description')
57897                         .text(t('inspector.no_documentation_key'));
57898                     done();
57899                     return;
57900                 }
57901
57902                 if (docs.imageURL) {
57903                     _body
57904                         .append('img')
57905                         .attr('class', 'tag-reference-wiki-image')
57906                         .attr('src', docs.imageURL)
57907                         .on('load', function() { done(); })
57908                         .on('error', function() { d3_select(this).remove(); done(); });
57909                 } else {
57910                     done();
57911                 }
57912
57913                 _body
57914                     .append('p')
57915                     .attr('class', 'tag-reference-description')
57916                     .text(docs.description || t('inspector.no_documentation_key'))
57917                     .append('a')
57918                     .attr('class', 'tag-reference-edit')
57919                     .attr('target', '_blank')
57920                     .attr('tabindex', -1)
57921                     .attr('title', t('inspector.edit_reference'))
57922                     .attr('href', docs.editURL)
57923                     .call(svgIcon('#iD-icon-edit', 'inline'));
57924
57925                 if (docs.wiki) {
57926                     _body
57927                       .append('a')
57928                       .attr('class', 'tag-reference-link')
57929                       .attr('target', '_blank')
57930                       .attr('tabindex', -1)
57931                       .attr('href', docs.wiki.url)
57932                       .call(svgIcon('#iD-icon-out-link', 'inline'))
57933                       .append('span')
57934                       .text(t(docs.wiki.text));
57935                 }
57936
57937                 // Add link to info about "good changeset comments" - #2923
57938                 if (what.key === 'comment') {
57939                     _body
57940                         .append('a')
57941                         .attr('class', 'tag-reference-comment-link')
57942                         .attr('target', '_blank')
57943                         .attr('tabindex', -1)
57944                         .call(svgIcon('#iD-icon-out-link', 'inline'))
57945                         .attr('href', t('commit.about_changeset_comments_link'))
57946                         .append('span')
57947                         .text(t('commit.about_changeset_comments'));
57948                 }
57949             }
57950
57951
57952             function done() {
57953                 _loaded = true;
57954
57955                 _button
57956                     .classed('tag-reference-loading', false);
57957
57958                 _body
57959                     .classed('expanded', true)
57960                     .transition()
57961                     .duration(200)
57962                     .style('max-height', '200px')
57963                     .style('opacity', '1');
57964
57965                 _showing = true;
57966
57967                 _button.selectAll('svg.icon use').each(function() {
57968                     var iconUse = d3_select(this);
57969                     if (iconUse.attr('href') === '#iD-icon-info') {
57970                         iconUse.attr('href', '#iD-icon-info-filled');
57971                     }
57972                 });
57973             }
57974
57975
57976             function hide() {
57977                 _body
57978                     .transition()
57979                     .duration(200)
57980                     .style('max-height', '0px')
57981                     .style('opacity', '0')
57982                     .on('end', function () {
57983                         _body.classed('expanded', false);
57984                     });
57985
57986                 _showing = false;
57987
57988                 _button.selectAll('svg.icon use').each(function() {
57989                     var iconUse = d3_select(this);
57990                     if (iconUse.attr('href') === '#iD-icon-info-filled') {
57991                         iconUse.attr('href', '#iD-icon-info');
57992                     }
57993                 });
57994
57995             }
57996
57997
57998             tagReference.button = function(selection, klass, iconName) {
57999                 _button = selection.selectAll('.tag-reference-button')
58000                     .data([0]);
58001
58002                 _button = _button.enter()
58003                     .append('button')
58004                     .attr('class', 'tag-reference-button ' + klass)
58005                     .attr('title', t('icons.information'))
58006                     .attr('tabindex', -1)
58007                     .call(svgIcon('#iD-icon-' + (iconName || 'inspect')))
58008                     .merge(_button);
58009
58010                 _button
58011                     .on('click', function () {
58012                         event.stopPropagation();
58013                         event.preventDefault();
58014                         this.blur();    // avoid keeping focus on the button - #4641
58015                         if (_showing) {
58016                             hide();
58017                         } else if (_loaded) {
58018                             done();
58019                         } else {
58020                             load();
58021                         }
58022                     });
58023             };
58024
58025
58026             tagReference.body = function(selection) {
58027                 var itemID = what.qid || what.rtype || (what.key + '-' + what.value);
58028                 _body = selection.selectAll('.tag-reference-body')
58029                     .data([itemID], function(d) { return d; });
58030
58031                 _body.exit()
58032                     .remove();
58033
58034                 _body = _body.enter()
58035                     .append('div')
58036                     .attr('class', 'tag-reference-body')
58037                     .style('max-height', '0')
58038                     .style('opacity', '0')
58039                     .merge(_body);
58040
58041                 if (_showing === false) {
58042                     hide();
58043                 }
58044             };
58045
58046
58047             tagReference.showing = function(val) {
58048                 if (!arguments.length) return _showing;
58049                 _showing = val;
58050                 return tagReference;
58051             };
58052
58053
58054             return tagReference;
58055         }
58056
58057         function uiRawTagEditor(context) {
58058             var taginfo = services$1.taginfo;
58059             var dispatch$1 = dispatch('change');
58060             var availableViews = [
58061                 { id: 'text', icon: '#fas-i-cursor' },
58062                 { id: 'list', icon: '#fas-th-list' }
58063             ];
58064
58065             var _tagView = (context.storage('raw-tag-editor-view') || 'list');   // 'list, 'text'
58066             var _readOnlyTags = [];
58067             var _indexedKeys = [];
58068             var _showBlank = false;
58069             var _updatePreference = true;
58070             var _expanded = false;
58071             var _pendingChange = null;
58072             var _state;
58073             var _preset;
58074             var _tags;
58075             var _entityID;
58076
58077
58078             function rawTagEditor(selection) {
58079                 var count = Object.keys(_tags).filter(function(d) { return d; }).length;
58080
58081                 var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
58082                     .title(t('inspector.all_tags') + ' (' + count + ')')
58083                     .on('toggled', toggled)
58084                     .updatePreference(_updatePreference)
58085                     .content(content);
58086
58087                 // Sometimes we want to force the raw_tag_editor to be opened/closed..
58088                 // When undefined, uiDisclosure will use the user's stored preference.
58089                 if (_expanded !== undefined) {
58090                     disclosure.expanded(_expanded);
58091                 }
58092
58093                 selection.call(disclosure);
58094
58095                 function toggled(expanded) {
58096                     _expanded = expanded;
58097                     if (expanded) {
58098                         selection.node().parentNode.scrollTop += 200;
58099                     }
58100                 }
58101             }
58102
58103
58104             function content(wrap) {
58105                 // When switching to a different entity or changing the state (hover/select)
58106                 // reorder the keys alphabetically.
58107                 // We trigger this by emptying the `_indexedKeys` array, then it will be rebuilt here.
58108                 // Otherwise leave their order alone - #5857, #5927
58109                 var all = Object.keys(_tags).sort();
58110                 var known = _indexedKeys.map(function(t) { return t.key; });
58111                 var missing = utilArrayDifference(all, known);
58112                 for (var i = 0; i < missing.length; i++) {
58113                     _indexedKeys.push({ index: _indexedKeys.length, key: missing[i] });
58114                 }
58115
58116                 // assemble row data, excluding any deleted tags
58117                 var rowData = _indexedKeys.map(function(row) {
58118                     var v = _tags[row.key];
58119                     return (v === undefined) ? null : Object.assign(row, { value: v });
58120                 }).filter(Boolean);
58121
58122                 // append blank row last, if necessary
58123                 if (!_indexedKeys.length || _showBlank) {
58124                     _showBlank = false;
58125                     rowData.push({ index: _indexedKeys.length, key: '', value: '' });
58126                 }
58127
58128
58129                 // View Options
58130                 var options = wrap.selectAll('.raw-tag-options')
58131                     .data([0]);
58132
58133                 var optionsEnter = options.enter()
58134                     .append('div')
58135                     .attr('class', 'raw-tag-options');
58136
58137                 var optionEnter = optionsEnter.selectAll('.raw-tag-option')
58138                     .data(availableViews, function(d) { return d.id; })
58139                     .enter();
58140
58141                 optionEnter
58142                     .append('button')
58143                     .attr('class', function(d) {
58144                         return 'raw-tag-option raw-tag-option-' + d.id + (_tagView === d.id ? ' selected' : '');
58145                     })
58146                     .attr('title', function(d) { return d.id; })
58147                     .on('click', function(d) {
58148                         _tagView = d.id;
58149                         context.storage('raw-tag-editor-view', d.id);
58150
58151                         wrap.selectAll('.raw-tag-option')
58152                             .classed('selected', function(datum) { return datum === d; });
58153
58154                         wrap.selectAll('.tag-text')
58155                             .classed('hide', (d.id !== 'text'))
58156                             .each(setTextareaHeight);
58157
58158                         wrap.selectAll('.tag-list, .add-row')
58159                             .classed('hide', (d.id !== 'list'));
58160                     })
58161                     .each(function(d) {
58162                         d3_select(this)
58163                             .call(svgIcon(d.icon));
58164                     });
58165
58166
58167                 // View as Text
58168                 var textData = rowsToText(rowData);
58169                 var textarea = wrap.selectAll('.tag-text')
58170                     .data([0]);
58171
58172                 textarea = textarea.enter()
58173                     .append('textarea')
58174                     .attr('class', 'tag-text' + (_tagView !== 'text' ? ' hide' : ''))
58175                     .call(utilNoAuto)
58176                     .attr('spellcheck', 'false')
58177                     .merge(textarea);
58178
58179                 textarea
58180                     .call(utilGetSetValue, textData)
58181                     .each(setTextareaHeight)
58182                     .on('input', setTextareaHeight)
58183                     .on('blur', textChanged)
58184                     .on('change', textChanged);
58185
58186                 // If All Fields section is hidden, focus textarea and put cursor at end..
58187                 var fieldsExpanded = d3_select('.hide-toggle-preset_fields.expanded').size();
58188                 if (_state !== 'hover' && _tagView === 'text' && !fieldsExpanded) {
58189                     var element = textarea.node();
58190                     element.focus();
58191                     element.setSelectionRange(textData.length, textData.length);
58192                 }
58193
58194
58195                 // View as List
58196                 var list = wrap.selectAll('.tag-list')
58197                     .data([0]);
58198
58199                 list = list.enter()
58200                     .append('ul')
58201                     .attr('class', 'tag-list' + (_tagView !== 'list' ? ' hide' : ''))
58202                     .merge(list);
58203
58204
58205                 // Container for the Add button
58206                 var addRowEnter = wrap.selectAll('.add-row')
58207                     .data([0])
58208                     .enter()
58209                     .append('div')
58210                     .attr('class', 'add-row' + (_tagView !== 'list' ? ' hide' : ''));
58211
58212                 addRowEnter
58213                     .append('button')
58214                     .attr('class', 'add-tag')
58215                     .call(svgIcon('#iD-icon-plus', 'light'))
58216                     .on('click', addTag);
58217
58218                 addRowEnter
58219                     .append('div')
58220                     .attr('class', 'space-value');   // preserve space
58221
58222                 addRowEnter
58223                     .append('div')
58224                     .attr('class', 'space-buttons');  // preserve space
58225
58226
58227                 // Tag list items
58228                 var items = list.selectAll('.tag-row')
58229                     .data(rowData, function(d) { return d.key; });
58230
58231                 items.exit()
58232                     .each(unbind)
58233                     .remove();
58234
58235
58236                 // Enter
58237                 var itemsEnter = items.enter()
58238                     .append('li')
58239                     .attr('class', 'tag-row')
58240                     .classed('readonly', isReadOnly);
58241
58242                 var innerWrap = itemsEnter.append('div')
58243                     .attr('class', 'inner-wrap');
58244
58245                 innerWrap
58246                     .append('div')
58247                     .attr('class', 'key-wrap')
58248                     .append('input')
58249                     .property('type', 'text')
58250                     .attr('class', 'key')
58251                     .attr('maxlength', 255)
58252                     .call(utilNoAuto)
58253                     .on('blur', keyChange)
58254                     .on('change', keyChange);
58255
58256                 innerWrap
58257                     .append('div')
58258                     .attr('class', 'value-wrap')
58259                     .append('input')
58260                     .property('type', 'text')
58261                     .attr('class', 'value')
58262                     .attr('maxlength', 255)
58263                     .call(utilNoAuto)
58264                     .on('blur', valueChange)
58265                     .on('change', valueChange)
58266                     .on('keydown.push-more', pushMore);
58267
58268                 innerWrap
58269                     .append('button')
58270                     .attr('tabindex', -1)
58271                     .attr('class', 'form-field-button remove')
58272                     .attr('title', t('icons.remove'))
58273                     .call(svgIcon('#iD-operation-delete'));
58274
58275
58276                 // Update
58277                 items = items
58278                     .merge(itemsEnter)
58279                     .sort(function(a, b) { return a.index - b.index; });
58280
58281                 items
58282                     .each(function(d) {
58283                         var row = d3_select(this);
58284                         var key = row.select('input.key');      // propagate bound data
58285                         var value = row.select('input.value');  // propagate bound data
58286
58287                         if (_entityID && taginfo && _state !== 'hover') {
58288                             bindTypeahead(key, value);
58289                         }
58290
58291                         var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
58292                         var reference;
58293
58294                         if (isRelation && d.key === 'type') {
58295                             reference = uiTagReference({ rtype: d.value });
58296                         } else {
58297                             reference = uiTagReference({ key: d.key, value: d.value });
58298                         }
58299
58300                         if (_state === 'hover') {
58301                             reference.showing(false);
58302                         }
58303
58304                         row.select('.inner-wrap')      // propagate bound data
58305                             .call(reference.button);
58306
58307                         row.call(reference.body);
58308
58309                         row.select('button.remove');   // propagate bound data
58310                     });
58311
58312                 items.selectAll('input.key')
58313                     .attr('title', function(d) { return d.key; })
58314                     .call(utilGetSetValue, function(d) { return d.key; })
58315                     .attr('readonly', function(d) {
58316                         return isReadOnly(d) || null;
58317                     });
58318
58319                 items.selectAll('input.value')
58320                     .attr('title', function(d) { return d.value; })
58321                     .call(utilGetSetValue, function(d) { return d.value; })
58322                     .attr('readonly', function(d) {
58323                         return isReadOnly(d) || null;
58324                     });
58325
58326                 items.selectAll('button.remove')
58327                     .on('mousedown', removeTag);  // 'click' fires too late - #5878
58328
58329
58330
58331                 function isReadOnly(d) {
58332                     for (var i = 0; i < _readOnlyTags.length; i++) {
58333                         if (d.key.match(_readOnlyTags[i]) !== null) {
58334                             return true;
58335                         }
58336                     }
58337                     return false;
58338                 }
58339
58340
58341                 function setTextareaHeight() {
58342                     if (_tagView !== 'text') return;
58343
58344                     var selection = d3_select(this);
58345                     selection.style('height', null);
58346                     selection.style('height', selection.node().scrollHeight + 5 + 'px');
58347                 }
58348
58349
58350                 function stringify(s) {
58351                     return JSON.stringify(s).slice(1, -1);   // without leading/trailing "
58352                 }
58353
58354                 function unstringify(s) {
58355                     var leading = '';
58356                     var trailing = '';
58357                     if (s.length < 1 || s.charAt(0) !== '"') {
58358                         leading = '"';
58359                     }
58360                     if (s.length < 2 || s.charAt(s.length - 1) !== '"' ||
58361                         (s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\')
58362                     ) {
58363                         trailing = '"';
58364                     }
58365                     return JSON.parse(leading + s + trailing);
58366                 }
58367
58368
58369                 function rowsToText(rows) {
58370                     var str = rows
58371                         .filter(function(row) { return row.key && row.key.trim() !== ''; })
58372                         .map(function(row) { return stringify(row.key) + '=' + stringify(row.value); })
58373                         .join('\n');
58374
58375                     return _state === 'hover' ? str : str + '\n';
58376                 }
58377
58378
58379                 function textChanged() {
58380                     var newText = this.value.trim();
58381                     var newTags = {};
58382                     newText.split('\n').forEach(function(row) {
58383                         var m = row.match(/^\s*([^=]+)=(.*)$/);
58384                         if (m !== null) {
58385                             var k = unstringify(m[1].trim());
58386                             var v = unstringify(m[2].trim());
58387                             newTags[k] = v;
58388                         }
58389                     });
58390
58391                     var tagDiff = utilTagDiff(_tags, newTags);
58392                     if (!tagDiff.length) return;
58393
58394                     _pendingChange  = _pendingChange || {};
58395
58396                     tagDiff.forEach(function(change) {
58397                         if (isReadOnly({ key: change.key })) return;
58398
58399                         if (change.type === '-') {
58400                             _pendingChange[change.key] = undefined;
58401                         } else if (change.type === '+') {
58402                             _pendingChange[change.key] = change.newVal || '';
58403                         }
58404                     });
58405
58406                     scheduleChange();
58407                 }
58408
58409
58410                 function pushMore() {
58411                     if (event.keyCode === 9 && !event.shiftKey &&
58412                         list.selectAll('li:last-child input.value').node() === this) {
58413                         addTag();
58414                     }
58415                 }
58416
58417
58418                 function bindTypeahead(key, value) {
58419                     if (isReadOnly(key.datum())) return;
58420
58421                     var geometry = context.geometry(_entityID);
58422
58423                     key.call(uiCombobox(context, 'tag-key')
58424                         .fetcher(function(value, callback) {
58425                             taginfo.keys({
58426                                 debounce: true,
58427                                 geometry: geometry,
58428                                 query: value
58429                             }, function(err, data) {
58430                                 if (!err) {
58431                                     var filtered = data.filter(function(d) { return _tags[d.value] === undefined; });
58432                                     callback(sort(value, filtered));
58433                                 }
58434                             });
58435                         }));
58436
58437                     value.call(uiCombobox(context, 'tag-value')
58438                         .fetcher(function(value, callback) {
58439                             taginfo.values({
58440                                 debounce: true,
58441                                 key: utilGetSetValue(key),
58442                                 geometry: geometry,
58443                                 query: value
58444                             }, function(err, data) {
58445                                 if (!err) callback(sort(value, data));
58446                             });
58447                         }));
58448
58449
58450                     function sort(value, data) {
58451                         var sameletter = [];
58452                         var other = [];
58453                         for (var i = 0; i < data.length; i++) {
58454                             if (data[i].value.substring(0, value.length) === value) {
58455                                 sameletter.push(data[i]);
58456                             } else {
58457                                 other.push(data[i]);
58458                             }
58459                         }
58460                         return sameletter.concat(other);
58461                     }
58462                 }
58463
58464
58465                 function unbind() {
58466                     var row = d3_select(this);
58467
58468                     row.selectAll('input.key')
58469                         .call(uiCombobox.off);
58470
58471                     row.selectAll('input.value')
58472                         .call(uiCombobox.off);
58473                 }
58474
58475
58476                 function keyChange(d) {
58477                     var kOld = d.key;
58478                     var kNew = this.value.trim();
58479                     var row = this.parentNode.parentNode;
58480                     var inputVal = d3_select(row).selectAll('input.value');
58481                     var vNew = utilGetSetValue(inputVal);
58482
58483                     // allow no change if the key should be readonly
58484                     if (isReadOnly({ key: kNew })) {
58485                         this.value = kOld;
58486                         return;
58487                     }
58488
58489                     // switch focus if key is already in use
58490                     if (kNew && kNew !== kOld) {
58491                         if (_tags[kNew] !== undefined) {      // new key is already in use
58492                             this.value = kOld;                // reset the key
58493                             list.selectAll('input.value')
58494                                 .each(function(d) {
58495                                     if (d.key === kNew) {     // send focus to that other value combo instead
58496                                         var input = d3_select(this).node();
58497                                         input.focus();
58498                                         input.select();
58499                                     }
58500                                 });
58501                             return;
58502                         }
58503                     }
58504
58505                     _pendingChange  = _pendingChange || {};
58506
58507                     // exit if we are currently about to delete this row anyway - #6366
58508                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) return;
58509
58510                     if (kOld) {
58511                         _pendingChange[kOld] = undefined;
58512                     }
58513
58514                     _pendingChange[kNew] = vNew;
58515
58516                     d.key = kNew;    // update datum to avoid exit/enter on tag update
58517                     d.value = vNew;
58518
58519                     this.value = kNew;
58520                     utilGetSetValue(inputVal, vNew);
58521                     scheduleChange();
58522                 }
58523
58524
58525                 function valueChange(d) {
58526                     if (isReadOnly(d)) return;
58527
58528                     _pendingChange  = _pendingChange || {};
58529
58530                     // exit if we are currently about to delete this row anyway - #6366
58531                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) return;
58532
58533                     _pendingChange[d.key] = this.value;
58534                     scheduleChange();
58535                 }
58536
58537
58538                 function removeTag(d) {
58539                     if (isReadOnly(d)) return;
58540
58541                     if (d.key === '') {    // removing the blank row
58542                         _showBlank = false;
58543                         content(wrap);
58544
58545                     } else {
58546                         // remove from indexedKeys too, so that if the user puts it back,
58547                         // it will be sorted to the end and not back to its original position
58548                         _indexedKeys = _indexedKeys.filter(function(row) { return row.key !== d.key; });
58549
58550                         _pendingChange  = _pendingChange || {};
58551                         _pendingChange[d.key] = undefined;
58552                         scheduleChange();
58553                     }
58554                 }
58555
58556
58557                 function addTag() {
58558                     // Delay render in case this click is blurring an edited combo.
58559                     // Without the setTimeout, the `content` render would wipe out the pending tag change.
58560                     window.setTimeout(function() {
58561                         _showBlank = true;
58562                         content(wrap);
58563                         list.selectAll('li:last-child input.key').node().focus();
58564                     }, 20);
58565                 }
58566
58567
58568                 function scheduleChange() {
58569                     // Delay change in case this change is blurring an edited combo. - #5878
58570                     window.setTimeout(function() {
58571                         dispatch$1.call('change', this, _pendingChange);
58572                         _pendingChange = null;
58573                     }, 10);
58574                 }
58575
58576             }
58577
58578
58579             rawTagEditor.state = function(val) {
58580                 if (!arguments.length) return _state;
58581                 if (_state !== val) {
58582                     _indexedKeys = [];
58583                     _state = val;
58584                 }
58585                 return rawTagEditor;
58586             };
58587
58588
58589             rawTagEditor.preset = function(val) {
58590                 if (!arguments.length) return _preset;
58591                 _preset = val;
58592                 if (_preset.isFallback()) {
58593                     _expanded = true;
58594                     _updatePreference = false;
58595                 } else {
58596                     _expanded = undefined;
58597                     _updatePreference = true;
58598                 }
58599                 return rawTagEditor;
58600             };
58601
58602
58603             rawTagEditor.tags = function(val) {
58604                 if (!arguments.length) return _tags;
58605                 _tags = val;
58606                 return rawTagEditor;
58607             };
58608
58609
58610             rawTagEditor.entityID = function(val) {
58611                 if (!arguments.length) return _entityID;
58612                 if (_entityID !== val) {
58613                     _indexedKeys = [];
58614                     _entityID = val;
58615                 }
58616                 return rawTagEditor;
58617             };
58618
58619
58620             rawTagEditor.expanded = function(val) {
58621                 if (!arguments.length) return _expanded;
58622                 _expanded = val;
58623                 _updatePreference = false;
58624                 return rawTagEditor;
58625             };
58626
58627
58628             // pass an array of regular expressions to test against the tag key
58629             rawTagEditor.readOnlyTags = function(val) {
58630                 if (!arguments.length) return _readOnlyTags;
58631                 _readOnlyTags = val;
58632                 return rawTagEditor;
58633             };
58634
58635
58636             return utilRebind(rawTagEditor, dispatch$1, 'on');
58637         }
58638
58639         function uiDataEditor(context) {
58640             var dataHeader = uiDataHeader();
58641             var quickLinks = uiQuickLinks();
58642             var rawTagEditor = uiRawTagEditor(context);
58643             var _datum;
58644
58645
58646             function dataEditor(selection) {
58647                 // quick links
58648                 var choices = [{
58649                     id: 'zoom_to',
58650                     label: 'inspector.zoom_to.title',
58651                     tooltip: function() {
58652                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
58653                     },
58654                     click: function zoomTo() {
58655                         context.mode().zoomToSelected();
58656                     }
58657                 }];
58658
58659
58660                 var header = selection.selectAll('.header')
58661                     .data([0]);
58662
58663                 var headerEnter = header.enter()
58664                     .append('div')
58665                     .attr('class', 'header fillL');
58666
58667                 headerEnter
58668                     .append('button')
58669                     .attr('class', 'fr data-editor-close')
58670                     .on('click', function() {
58671                         context.enter(modeBrowse(context));
58672                     })
58673                     .call(svgIcon('#iD-icon-close'));
58674
58675                 headerEnter
58676                     .append('h3')
58677                     .text(t('map_data.title'));
58678
58679
58680                 var body = selection.selectAll('.body')
58681                     .data([0]);
58682
58683                 body = body.enter()
58684                     .append('div')
58685                     .attr('class', 'body')
58686                     .merge(body);
58687
58688                 var editor = body.selectAll('.data-editor')
58689                     .data([0]);
58690
58691                 // enter/update
58692                 editor.enter()
58693                     .append('div')
58694                     .attr('class', 'modal-section data-editor')
58695                     .merge(editor)
58696                     .call(dataHeader.datum(_datum))
58697                     .call(quickLinks.choices(choices));
58698
58699                 var rte = body.selectAll('.raw-tag-editor')
58700                     .data([0]);
58701
58702                 // enter/update
58703                 rte.enter()
58704                     .append('div')
58705                     .attr('class', 'raw-tag-editor inspector-inner data-editor')
58706                     .merge(rte)
58707                     .call(rawTagEditor
58708                         .expanded(true)
58709                         .readOnlyTags([/./])
58710                         .tags((_datum && _datum.properties) || {})
58711                         .state('hover')
58712                     )
58713                     .selectAll('textarea.tag-text')
58714                     .attr('readonly', true)
58715                     .classed('readonly', true);
58716             }
58717
58718
58719             dataEditor.datum = function(val) {
58720                 if (!arguments.length) return _datum;
58721                 _datum = val;
58722                 return this;
58723             };
58724
58725
58726             return dataEditor;
58727         }
58728
58729         function modeSelectData(context, selectedDatum) {
58730             var mode = {
58731                 id: 'select-data',
58732                 button: 'browse'
58733             };
58734
58735             var keybinding = utilKeybinding('select-data');
58736             var dataEditor = uiDataEditor(context);
58737
58738             var behaviors = [
58739                 behaviorBreathe(),
58740                 behaviorHover(context),
58741                 behaviorSelect(context),
58742                 behaviorLasso(context),
58743                 modeDragNode(context).behavior,
58744                 modeDragNote(context).behavior
58745             ];
58746
58747
58748             // class the data as selected, or return to browse mode if the data is gone
58749             function selectData(drawn) {
58750                 var selection = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
58751
58752                 if (selection.empty()) {
58753                     // Return to browse mode if selected DOM elements have
58754                     // disappeared because the user moved them out of view..
58755                     var source = event && event.type === 'zoom' && event.sourceEvent;
58756                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
58757                         context.enter(modeBrowse(context));
58758                     }
58759                 } else {
58760                     selection.classed('selected', true);
58761                 }
58762             }
58763
58764
58765             function esc() {
58766                 if (d3_select('.combobox').size()) return;
58767                 context.enter(modeBrowse(context));
58768             }
58769
58770
58771             mode.zoomToSelected = function() {
58772                 var extent = geoExtent(d3_geoBounds(selectedDatum));
58773                 context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
58774             };
58775
58776
58777             mode.enter = function() {
58778                 behaviors.forEach(context.install);
58779
58780                 keybinding
58781                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
58782                     .on('⎋', esc, true);
58783
58784                 d3_select(document)
58785                     .call(keybinding);
58786
58787                 selectData();
58788
58789                 var sidebar = context.ui().sidebar;
58790                 sidebar.show(dataEditor.datum(selectedDatum));
58791
58792                 // expand the sidebar, avoid obscuring the data if needed
58793                 var extent = geoExtent(d3_geoBounds(selectedDatum));
58794                 sidebar.expand(sidebar.intersects(extent));
58795
58796                 context.map()
58797                     .on('drawn.select-data', selectData);
58798             };
58799
58800
58801             mode.exit = function() {
58802                 behaviors.forEach(context.uninstall);
58803
58804                 d3_select(document)
58805                     .call(keybinding.unbind);
58806
58807                 context.surface()
58808                     .selectAll('.layer-mapdata .selected')
58809                     .classed('selected hover', false);
58810
58811                 context.map()
58812                     .on('drawn.select-data', null);
58813
58814                 context.ui().sidebar
58815                     .hide();
58816             };
58817
58818
58819             return mode;
58820         }
58821
58822         function uiImproveOsmComments() {
58823             var _error;
58824
58825
58826             function errorComments(selection) {
58827                 // make the div immediately so it appears above the buttons
58828                 var comments = selection.selectAll('.comments-container')
58829                     .data([0]);
58830
58831                 comments = comments.enter()
58832                     .append('div')
58833                     .attr('class', 'comments-container')
58834                     .merge(comments);
58835
58836                 // must retrieve comments from API before they can be displayed
58837                 services$1.improveOSM.getComments(_error, function(err, d) {
58838                     if (!d.comments) { return; } // nothing to do here
58839
58840                     var commentEnter = comments.selectAll('.comment')
58841                         .data(d.comments)
58842                         .enter()
58843                         .append('div')
58844                         .attr('class', 'comment');
58845
58846                     commentEnter
58847                         .append('div')
58848                         .attr('class', 'comment-avatar')
58849                         .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
58850
58851                     var mainEnter = commentEnter
58852                         .append('div')
58853                         .attr('class', 'comment-main');
58854
58855                     var metadataEnter = mainEnter
58856                         .append('div')
58857                         .attr('class', 'comment-metadata');
58858
58859                     metadataEnter
58860                         .append('div')
58861                         .attr('class', 'comment-author')
58862                         .each(function(d) {
58863                             var selection = d3_select(this);
58864                             var osm = services$1.osm;
58865                             if (osm && d.username) {
58866                                 selection = selection
58867                                     .append('a')
58868                                     .attr('class', 'comment-author-link')
58869                                     .attr('href', osm.userURL(d.username))
58870                                     .attr('tabindex', -1)
58871                                     .attr('target', '_blank');
58872                             }
58873                             selection
58874                                 .text(function(d) { return d.username; });
58875                         });
58876
58877                     metadataEnter
58878                         .append('div')
58879                         .attr('class', 'comment-date')
58880                         .text(function(d) {
58881                             return t('note.status.commented', { when: localeDateString(d.timestamp) });
58882                         });
58883
58884                     mainEnter
58885                         .append('div')
58886                         .attr('class', 'comment-text')
58887                         .append('p')
58888                         .text(function(d) { return d.text; });
58889                 });
58890             }
58891
58892             function localeDateString(s) {
58893                 if (!s) return null;
58894                 var detected = utilDetect();
58895                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
58896                 var d = new Date(s * 1000); // timestamp is served in seconds, date takes ms
58897                 if (isNaN(d.getTime())) return null;
58898                 return d.toLocaleDateString(detected.locale, options);
58899             }
58900
58901             errorComments.error = function(val) {
58902                 if (!arguments.length) return _error;
58903                 _error = val;
58904                 return errorComments;
58905             };
58906
58907             return errorComments;
58908         }
58909
58910         function uiImproveOsmDetails(context) {
58911             var _error;
58912
58913
58914             function errorDetail(d) {
58915                 var unknown = t('inspector.unknown');
58916
58917                 if (!d) return unknown;
58918
58919                 if (d.desc) return d.desc;
58920
58921                 var errorType = d.error_key;
58922                 var et = en.QA.improveOSM.error_types[errorType];
58923
58924                 var detail;
58925                 if (et && et.description) {
58926                     detail = t('QA.improveOSM.error_types.' + errorType + '.description', d.replacements);
58927                 } else {
58928                     detail = unknown;
58929                 }
58930
58931                 return detail;
58932             }
58933
58934
58935             function improveOsmDetails(selection) {
58936                 var details = selection.selectAll('.error-details')
58937                     .data(
58938                         (_error ? [_error] : []),
58939                         function(d) { return d.id + '-' + (d.status || 0); }
58940                     );
58941
58942                 details.exit()
58943                     .remove();
58944
58945                 var detailsEnter = details.enter()
58946                     .append('div')
58947                     .attr('class', 'error-details error-details-container');
58948
58949
58950                 // description
58951                 var descriptionEnter = detailsEnter
58952                     .append('div')
58953                     .attr('class', 'error-details-description');
58954
58955                 descriptionEnter
58956                     .append('h4')
58957                     .text(function() { return t('QA.keepRight.detail_description'); });
58958
58959                 descriptionEnter
58960                     .append('div')
58961                     .attr('class', 'error-details-description-text')
58962                     .html(errorDetail);
58963
58964                 // If there are entity links in the error message..
58965                 var relatedEntities = [];
58966                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
58967                     .each(function() {
58968                         var link = d3_select(this);
58969                         var isObjectLink = link.classed('error_object_link');
58970                         var entityID = isObjectLink ?
58971                             (utilEntityRoot(_error.object_type) + _error.object_id)
58972                             : this.textContent;
58973                         var entity = context.hasEntity(entityID);
58974
58975                         relatedEntities.push(entityID);
58976
58977                         // Add click handler
58978                         link
58979                             .on('mouseover', function() {
58980                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
58981                                     .classed('hover', true);
58982                             })
58983                             .on('mouseout', function() {
58984                                 context.surface().selectAll('.hover')
58985                                     .classed('hover', false);
58986                             })
58987                             .on('click', function() {
58988                                 event.preventDefault();
58989                                 var osmlayer = context.layers().layer('osm');
58990                                 if (!osmlayer.enabled()) {
58991                                     osmlayer.enabled(true);
58992                                 }
58993
58994                                 context.map().centerZoom(_error.loc, 20);
58995
58996                                 if (entity) {
58997                                     context.enter(modeSelect(context, [entityID]));
58998                                 } else {
58999                                     context.loadEntity(entityID, function() {
59000                                         context.enter(modeSelect(context, [entityID]));
59001                                     });
59002                                 }
59003                             });
59004
59005                         // Replace with friendly name if possible
59006                         // (The entity may not yet be loaded into the graph)
59007                         if (entity) {
59008                             var name = utilDisplayName(entity);  // try to use common name
59009
59010                             if (!name && !isObjectLink) {
59011                                 var preset = context.presets().match(entity, context.graph());
59012                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
59013                             }
59014
59015                             if (name) {
59016                                 this.innerText = name;
59017                             }
59018                         }
59019                     });
59020
59021                 // Don't hide entities related to this error - #5880
59022                 context.features().forceVisible(relatedEntities);
59023             }
59024
59025
59026             improveOsmDetails.error = function(val) {
59027                 if (!arguments.length) return _error;
59028                 _error = val;
59029                 return improveOsmDetails;
59030             };
59031
59032
59033             return improveOsmDetails;
59034         }
59035
59036         function uiImproveOsmHeader() {
59037             var _error;
59038
59039
59040             function errorTitle(d) {
59041                 var unknown = t('inspector.unknown');
59042
59043                 if (!d) return unknown;
59044                 var errorType = d.error_key;
59045                 var et = en.QA.improveOSM.error_types[errorType];
59046
59047                 if (et && et.title) {
59048                     return t('QA.improveOSM.error_types.' + errorType + '.title');
59049                 } else {
59050                     return unknown;
59051                 }
59052             }
59053
59054
59055             function improveOsmHeader(selection) {
59056                 var header = selection.selectAll('.error-header')
59057                     .data(
59058                         (_error ? [_error] : []),
59059                         function(d) { return d.id + '-' + (d.status || 0); }
59060                     );
59061
59062                 header.exit()
59063                     .remove();
59064
59065                 var headerEnter = header.enter()
59066                     .append('div')
59067                     .attr('class', 'error-header');
59068
59069                 var iconEnter = headerEnter
59070                     .append('div')
59071                     .attr('class', 'error-header-icon')
59072                     .classed('new', function(d) { return d.id < 0; });
59073
59074                 var svgEnter = iconEnter
59075                     .append('svg')
59076                     .attr('width', '20px')
59077                     .attr('height', '30px')
59078                     .attr('viewbox', '0 0 20 30')
59079                     .attr('class', function(d) {
59080                         return [
59081                             'preset-icon-28',
59082                             'qa_error',
59083                             d.service,
59084                             'error_id-' + d.id,
59085                             'error_type-' + d.error_type,
59086                             'category-' + d.category
59087                         ].join(' ');
59088                     });
59089
59090                 svgEnter
59091                     .append('polygon')
59092                     .attr('fill', 'currentColor')
59093                     .attr('class', 'qa_error-fill')
59094                     .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');
59095
59096                 svgEnter
59097                     .append('use')
59098                     .attr('class', 'icon-annotation')
59099                     .attr('width', '11px')
59100                     .attr('height', '11px')
59101                     .attr('transform', 'translate(4.5, 7)')
59102                     .attr('xlink:href', function(d) {
59103                         var picon = d.icon;
59104
59105                         if (!picon) {
59106                             return '';
59107                         } else {
59108                             var isMaki = /^maki-/.test(picon);
59109                             return '#' + picon + (isMaki ? '-11' : '');
59110                         }
59111                     });
59112
59113                 headerEnter
59114                     .append('div')
59115                     .attr('class', 'error-header-label')
59116                     .text(errorTitle);
59117             }
59118
59119
59120             improveOsmHeader.error = function(val) {
59121                 if (!arguments.length) return _error;
59122                 _error = val;
59123                 return improveOsmHeader;
59124             };
59125
59126
59127             return improveOsmHeader;
59128         }
59129
59130         function uiImproveOsmEditor(context) {
59131             var dispatch$1 = dispatch('change');
59132             var errorDetails = uiImproveOsmDetails(context);
59133             var errorComments = uiImproveOsmComments();
59134             var errorHeader = uiImproveOsmHeader();
59135             var quickLinks = uiQuickLinks();
59136
59137             var _error;
59138
59139
59140             function improveOsmEditor(selection) {
59141                 // quick links
59142                 var choices = [{
59143                     id: 'zoom_to',
59144                     label: 'inspector.zoom_to.title',
59145                     tooltip: function() {
59146                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
59147                     },
59148                     click: function zoomTo() {
59149                         context.mode().zoomToSelected();
59150                     }
59151                 }];
59152
59153
59154                 var header = selection.selectAll('.header')
59155                     .data([0]);
59156
59157                 var headerEnter = header.enter()
59158                     .append('div')
59159                     .attr('class', 'header fillL');
59160
59161                 headerEnter
59162                     .append('button')
59163                     .attr('class', 'fr error-editor-close')
59164                     .on('click', function() {
59165                         context.enter(modeBrowse(context));
59166                     })
59167                     .call(svgIcon('#iD-icon-close'));
59168
59169                 headerEnter
59170                     .append('h3')
59171                     .text(t('QA.improveOSM.title'));
59172
59173
59174                 var body = selection.selectAll('.body')
59175                     .data([0]);
59176
59177                 body = body.enter()
59178                     .append('div')
59179                     .attr('class', 'body')
59180                     .merge(body);
59181
59182                 var editor = body.selectAll('.error-editor')
59183                     .data([0]);
59184
59185                 editor.enter()
59186                     .append('div')
59187                     .attr('class', 'modal-section error-editor')
59188                     .merge(editor)
59189                     .call(errorHeader.error(_error))
59190                     .call(quickLinks.choices(choices))
59191                     .call(errorDetails.error(_error))
59192                     .call(errorComments.error(_error))
59193                     .call(improveOsmSaveSection);
59194             }
59195
59196             function improveOsmSaveSection(selection) {
59197                 var isSelected = (_error && _error.id === context.selectedErrorID());
59198                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
59199                 var saveSection = selection.selectAll('.error-save')
59200                     .data(
59201                         (isShown ? [_error] : []),
59202                         function(d) { return d.id + '-' + (d.status || 0); }
59203                     );
59204
59205                 // exit
59206                 saveSection.exit()
59207                     .remove();
59208
59209                 // enter
59210                 var saveSectionEnter = saveSection.enter()
59211                     .append('div')
59212                     .attr('class', 'error-save save-section cf');
59213
59214                 saveSectionEnter
59215                     .append('h4')
59216                     .attr('class', '.error-save-header')
59217                     .text(t('note.newComment'));
59218
59219                 saveSectionEnter
59220                     .append('textarea')
59221                     .attr('class', 'new-comment-input')
59222                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
59223                     .attr('maxlength', 1000)
59224                     .property('value', function(d) { return d.newComment; })
59225                     .call(utilNoAuto)
59226                     .on('input', changeInput)
59227                     .on('blur', changeInput);
59228
59229                 // update
59230                 saveSection = saveSectionEnter
59231                     .merge(saveSection)
59232                     .call(errorSaveButtons);
59233
59234                 function changeInput() {
59235                     var input = d3_select(this);
59236                     var val = input.property('value').trim();
59237
59238                     if (val === '') {
59239                         val = undefined;
59240                     }
59241
59242                     // store the unsaved comment with the error itself
59243                     _error = _error.update({ newComment: val });
59244
59245                     var errorService = services$1.improveOSM;
59246                     if (errorService) {
59247                         errorService.replaceError(_error);
59248                     }
59249
59250                     saveSection
59251                         .call(errorSaveButtons);
59252                 }
59253             }
59254
59255             function errorSaveButtons(selection) {
59256                 var isSelected = (_error && _error.id === context.selectedErrorID());
59257                 var buttonSection = selection.selectAll('.buttons')
59258                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
59259
59260                 // exit
59261                 buttonSection.exit()
59262                     .remove();
59263
59264                 // enter
59265                 var buttonEnter = buttonSection.enter()
59266                     .append('div')
59267                     .attr('class', 'buttons');
59268
59269                 buttonEnter
59270                     .append('button')
59271                     .attr('class', 'button comment-button action')
59272                     .text(t('QA.keepRight.save_comment'));
59273
59274                 buttonEnter
59275                     .append('button')
59276                     .attr('class', 'button close-button action');
59277
59278                 buttonEnter
59279                     .append('button')
59280                     .attr('class', 'button ignore-button action');
59281
59282
59283                 // update
59284                 buttonSection = buttonSection
59285                     .merge(buttonEnter);
59286
59287                 buttonSection.select('.comment-button')
59288                     .attr('disabled', function(d) {
59289                         return d.newComment === undefined ? true : null;
59290                     })
59291                     .on('click.comment', function(d) {
59292                         this.blur();    // avoid keeping focus on the button - #4641
59293                         var errorService = services$1.improveOSM;
59294                         if (errorService) {
59295                             errorService.postUpdate(d, function(err, error) {
59296                                 dispatch$1.call('change', error);
59297                             });
59298                         }
59299                     });
59300
59301                 buttonSection.select('.close-button')
59302                     .text(function(d) {
59303                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59304                         return t('QA.keepRight.close' + andComment);
59305                     })
59306                     .on('click.close', function(d) {
59307                         this.blur();    // avoid keeping focus on the button - #4641
59308                         var errorService = services$1.improveOSM;
59309                         if (errorService) {
59310                             d.newStatus = 'SOLVED';
59311                             errorService.postUpdate(d, function(err, error) {
59312                                 dispatch$1.call('change', error);
59313                             });
59314                         }
59315                     });
59316
59317                 buttonSection.select('.ignore-button')
59318                     .text(function(d) {
59319                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59320                         return t('QA.keepRight.ignore' + andComment);
59321                     })
59322                     .on('click.ignore', function(d) {
59323                         this.blur();    // avoid keeping focus on the button - #4641
59324                         var errorService = services$1.improveOSM;
59325                         if (errorService) {
59326                             d.newStatus = 'INVALID';
59327                             errorService.postUpdate(d, function(err, error) {
59328                                 dispatch$1.call('change', error);
59329                             });
59330                         }
59331                     });
59332             }
59333
59334             improveOsmEditor.error = function(val) {
59335                 if (!arguments.length) return _error;
59336                 _error = val;
59337                 return improveOsmEditor;
59338             };
59339
59340
59341             return utilRebind(improveOsmEditor, dispatch$1, 'on');
59342         }
59343
59344         function uiKeepRightDetails(context) {
59345             var _error;
59346
59347
59348             function errorDetail(d) {
59349                 var unknown = t('inspector.unknown');
59350
59351                 if (!d) return unknown;
59352                 var errorType = d.error_type;
59353                 var parentErrorType = d.parent_error_type;
59354
59355                 var et = en.QA.keepRight.errorTypes[errorType];
59356                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
59357
59358                 var detail;
59359                 if (et && et.description) {
59360                     detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
59361                 } else if (pt && pt.description) {
59362                     detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
59363                 } else {
59364                     detail = unknown;
59365                 }
59366
59367                 return detail;
59368             }
59369
59370
59371             function keepRightDetails(selection) {
59372                 var details = selection.selectAll('.error-details')
59373                     .data(
59374                         (_error ? [_error] : []),
59375                         function(d) { return d.id + '-' + (d.status || 0); }
59376                     );
59377
59378                 details.exit()
59379                     .remove();
59380
59381                 var detailsEnter = details.enter()
59382                     .append('div')
59383                     .attr('class', 'error-details error-details-container');
59384
59385
59386                 // description
59387                 var descriptionEnter = detailsEnter
59388                     .append('div')
59389                     .attr('class', 'error-details-description');
59390
59391                 descriptionEnter
59392                     .append('h4')
59393                     .text(function() { return t('QA.keepRight.detail_description'); });
59394
59395                 descriptionEnter
59396                     .append('div')
59397                     .attr('class', 'error-details-description-text')
59398                     .html(errorDetail);
59399
59400                 // If there are entity links in the error message..
59401                 var relatedEntities = [];
59402                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
59403                     .each(function() {
59404                         var link = d3_select(this);
59405                         var isObjectLink = link.classed('error_object_link');
59406                         var entityID = isObjectLink ?
59407                             (utilEntityRoot(_error.object_type) + _error.object_id)
59408                             : this.textContent;
59409                         var entity = context.hasEntity(entityID);
59410
59411                         relatedEntities.push(entityID);
59412
59413                         // Add click handler
59414                         link
59415                             .on('mouseover', function() {
59416                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
59417                                     .classed('hover', true);
59418                             })
59419                             .on('mouseout', function() {
59420                                 context.surface().selectAll('.hover')
59421                                     .classed('hover', false);
59422                             })
59423                             .on('click', function() {
59424                                 event.preventDefault();
59425                                 var osmlayer = context.layers().layer('osm');
59426                                 if (!osmlayer.enabled()) {
59427                                     osmlayer.enabled(true);
59428                                 }
59429
59430                                 context.map().centerZoomEase(_error.loc, 20);
59431
59432                                 if (entity) {
59433                                     context.enter(modeSelect(context, [entityID]));
59434                                 } else {
59435                                     context.loadEntity(entityID, function() {
59436                                         context.enter(modeSelect(context, [entityID]));
59437                                     });
59438                                 }
59439                             });
59440
59441                         // Replace with friendly name if possible
59442                         // (The entity may not yet be loaded into the graph)
59443                         if (entity) {
59444                             var name = utilDisplayName(entity);  // try to use common name
59445
59446                             if (!name && !isObjectLink) {
59447                                 var preset = context.presets().match(entity, context.graph());
59448                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
59449                             }
59450
59451                             if (name) {
59452                                 this.innerText = name;
59453                             }
59454                         }
59455                     });
59456
59457                 // Don't hide entities related to this error - #5880
59458                 context.features().forceVisible(relatedEntities);
59459             }
59460
59461
59462             keepRightDetails.error = function(val) {
59463                 if (!arguments.length) return _error;
59464                 _error = val;
59465                 return keepRightDetails;
59466             };
59467
59468
59469             return keepRightDetails;
59470         }
59471
59472         function uiKeepRightHeader() {
59473             var _error;
59474
59475
59476             function errorTitle(d) {
59477                 var unknown = t('inspector.unknown');
59478
59479                 if (!d) return unknown;
59480                 var errorType = d.error_type;
59481                 var parentErrorType = d.parent_error_type;
59482
59483                 var et = en.QA.keepRight.errorTypes[errorType];
59484                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
59485
59486                 if (et && et.title) {
59487                     return t('QA.keepRight.errorTypes.' + errorType + '.title');
59488                 } else if (pt && pt.title) {
59489                     return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
59490                 } else {
59491                     return unknown;
59492                 }
59493             }
59494
59495
59496             function keepRightHeader(selection) {
59497                 var header = selection.selectAll('.error-header')
59498                     .data(
59499                         (_error ? [_error] : []),
59500                         function(d) { return d.id + '-' + (d.status || 0); }
59501                     );
59502
59503                 header.exit()
59504                     .remove();
59505
59506                 var headerEnter = header.enter()
59507                     .append('div')
59508                     .attr('class', 'error-header');
59509
59510                 var iconEnter = headerEnter
59511                     .append('div')
59512                     .attr('class', 'error-header-icon')
59513                     .classed('new', function(d) { return d.id < 0; });
59514
59515                 iconEnter
59516                     .append('div')
59517                     .attr('class', function(d) {
59518                         return 'preset-icon-28 qa_error ' + d.service + ' error_id-' + d.id + ' error_type-' + d.parent_error_type;
59519                     })
59520                     .call(svgIcon('#iD-icon-bolt', 'qa_error-fill'));
59521
59522                 headerEnter
59523                     .append('div')
59524                     .attr('class', 'error-header-label')
59525                     .text(errorTitle);
59526             }
59527
59528
59529             keepRightHeader.error = function(val) {
59530                 if (!arguments.length) return _error;
59531                 _error = val;
59532                 return keepRightHeader;
59533             };
59534
59535
59536             return keepRightHeader;
59537         }
59538
59539         function uiViewOnKeepRight() {
59540             var _error;   // a keepright error
59541
59542
59543             function viewOnKeepRight(selection) {
59544                 var url;
59545                 if (services$1.keepRight && (_error instanceof qaError)) {
59546                     url = services$1.keepRight.errorURL(_error);
59547                 }
59548
59549                 var link = selection.selectAll('.view-on-keepRight')
59550                     .data(url ? [url] : []);
59551
59552                 // exit
59553                 link.exit()
59554                     .remove();
59555
59556                 // enter
59557                 var linkEnter = link.enter()
59558                     .append('a')
59559                     .attr('class', 'view-on-keepRight')
59560                     .attr('target', '_blank')
59561                     .attr('href', function(d) { return d; })
59562                     .call(svgIcon('#iD-icon-out-link', 'inline'));
59563
59564                 linkEnter
59565                     .append('span')
59566                     .text(t('inspector.view_on_keepRight'));
59567             }
59568
59569
59570             viewOnKeepRight.what = function(val) {
59571                 if (!arguments.length) return _error;
59572                 _error = val;
59573                 return viewOnKeepRight;
59574             };
59575
59576             return viewOnKeepRight;
59577         }
59578
59579         function uiKeepRightEditor(context) {
59580             var dispatch$1 = dispatch('change');
59581             var keepRightDetails = uiKeepRightDetails(context);
59582             var keepRightHeader = uiKeepRightHeader();
59583             var quickLinks = uiQuickLinks();
59584
59585             var _error;
59586
59587
59588             function keepRightEditor(selection) {
59589                 // quick links
59590                 var choices = [{
59591                     id: 'zoom_to',
59592                     label: 'inspector.zoom_to.title',
59593                     tooltip: function() {
59594                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
59595                     },
59596                     click: function zoomTo() {
59597                         context.mode().zoomToSelected();
59598                     }
59599                 }];
59600
59601
59602                 var header = selection.selectAll('.header')
59603                     .data([0]);
59604
59605                 var headerEnter = header.enter()
59606                     .append('div')
59607                     .attr('class', 'header fillL');
59608
59609                 headerEnter
59610                     .append('button')
59611                     .attr('class', 'fr error-editor-close')
59612                     .on('click', function() {
59613                         context.enter(modeBrowse(context));
59614                     })
59615                     .call(svgIcon('#iD-icon-close'));
59616
59617                 headerEnter
59618                     .append('h3')
59619                     .text(t('QA.keepRight.title'));
59620
59621
59622                 var body = selection.selectAll('.body')
59623                     .data([0]);
59624
59625                 body = body.enter()
59626                     .append('div')
59627                     .attr('class', 'body')
59628                     .merge(body);
59629
59630                 var editor = body.selectAll('.error-editor')
59631                     .data([0]);
59632
59633                 editor.enter()
59634                     .append('div')
59635                     .attr('class', 'modal-section error-editor')
59636                     .merge(editor)
59637                     .call(keepRightHeader.error(_error))
59638                     .call(quickLinks.choices(choices))
59639                     .call(keepRightDetails.error(_error))
59640                     .call(keepRightSaveSection);
59641
59642
59643                 var footer = selection.selectAll('.footer')
59644                     .data([0]);
59645
59646                 footer.enter()
59647                     .append('div')
59648                     .attr('class', 'footer')
59649                     .merge(footer)
59650                     .call(uiViewOnKeepRight().what(_error));
59651             }
59652
59653
59654             function keepRightSaveSection(selection) {
59655                 var isSelected = (_error && _error.id === context.selectedErrorID());
59656                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
59657                 var saveSection = selection.selectAll('.error-save')
59658                     .data(
59659                         (isShown ? [_error] : []),
59660                         function(d) { return d.id + '-' + (d.status || 0); }
59661                     );
59662
59663                 // exit
59664                 saveSection.exit()
59665                     .remove();
59666
59667                 // enter
59668                 var saveSectionEnter = saveSection.enter()
59669                     .append('div')
59670                     .attr('class', 'error-save save-section cf');
59671
59672                 saveSectionEnter
59673                     .append('h4')
59674                     .attr('class', '.error-save-header')
59675                     .text(t('QA.keepRight.comment'));
59676
59677                 saveSectionEnter
59678                     .append('textarea')
59679                     .attr('class', 'new-comment-input')
59680                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
59681                     .attr('maxlength', 1000)
59682                     .property('value', function(d) { return d.newComment || d.comment; })
59683                     .call(utilNoAuto)
59684                     .on('input', changeInput)
59685                     .on('blur', changeInput);
59686
59687                 // update
59688                 saveSection = saveSectionEnter
59689                     .merge(saveSection)
59690                     .call(keepRightSaveButtons);
59691
59692
59693                 function changeInput() {
59694                     var input = d3_select(this);
59695                     var val = input.property('value').trim();
59696
59697                     if (val === _error.comment) {
59698                         val = undefined;
59699                     }
59700
59701                     // store the unsaved comment with the error itself
59702                     _error = _error.update({ newComment: val });
59703
59704                     var keepRight = services$1.keepRight;
59705                     if (keepRight) {
59706                         keepRight.replaceError(_error);  // update keepright cache
59707                     }
59708
59709                     saveSection
59710                         .call(keepRightSaveButtons);
59711                 }
59712             }
59713
59714
59715             function keepRightSaveButtons(selection) {
59716                 var isSelected = (_error && _error.id === context.selectedErrorID());
59717                 var buttonSection = selection.selectAll('.buttons')
59718                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
59719
59720                 // exit
59721                 buttonSection.exit()
59722                     .remove();
59723
59724                 // enter
59725                 var buttonEnter = buttonSection.enter()
59726                     .append('div')
59727                     .attr('class', 'buttons');
59728
59729                 buttonEnter
59730                     .append('button')
59731                     .attr('class', 'button comment-button action')
59732                     .text(t('QA.keepRight.save_comment'));
59733
59734                 buttonEnter
59735                     .append('button')
59736                     .attr('class', 'button close-button action');
59737
59738                 buttonEnter
59739                     .append('button')
59740                     .attr('class', 'button ignore-button action');
59741
59742
59743                 // update
59744                 buttonSection = buttonSection
59745                     .merge(buttonEnter);
59746
59747                 buttonSection.select('.comment-button')   // select and propagate data
59748                     .attr('disabled', function(d) {
59749                         return d.newComment === undefined ? true : null;
59750                     })
59751                     .on('click.comment', function(d) {
59752                         this.blur();    // avoid keeping focus on the button - #4641
59753                         var keepRight = services$1.keepRight;
59754                         if (keepRight) {
59755                             keepRight.postKeepRightUpdate(d, function(err, error) {
59756                                 dispatch$1.call('change', error);
59757                             });
59758                         }
59759                     });
59760
59761                 buttonSection.select('.close-button')   // select and propagate data
59762                     .text(function(d) {
59763                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59764                         return t('QA.keepRight.close' + andComment);
59765                     })
59766                     .on('click.close', function(d) {
59767                         this.blur();    // avoid keeping focus on the button - #4641
59768                         var keepRight = services$1.keepRight;
59769                         if (keepRight) {
59770                             d.state = 'ignore_t';   // ignore temporarily (error fixed)
59771                             keepRight.postKeepRightUpdate(d, function(err, error) {
59772                                 dispatch$1.call('change', error);
59773                             });
59774                         }
59775                     });
59776
59777                 buttonSection.select('.ignore-button')   // select and propagate data
59778                     .text(function(d) {
59779                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59780                         return t('QA.keepRight.ignore' + andComment);
59781                     })
59782                     .on('click.ignore', function(d) {
59783                         this.blur();    // avoid keeping focus on the button - #4641
59784                         var keepRight = services$1.keepRight;
59785                         if (keepRight) {
59786                             d.state = 'ignore';   // ignore permanently (false positive)
59787                             keepRight.postKeepRightUpdate(d, function(err, error) {
59788                                 dispatch$1.call('change', error);
59789                             });
59790                         }
59791                     });
59792             }
59793
59794
59795             keepRightEditor.error = function(val) {
59796                 if (!arguments.length) return _error;
59797                 _error = val;
59798                 return keepRightEditor;
59799             };
59800
59801
59802             return utilRebind(keepRightEditor, dispatch$1, 'on');
59803         }
59804
59805         function modeSelectError(context, selectedErrorID, selectedErrorService) {
59806             var mode = {
59807                 id: 'select-error',
59808                 button: 'browse'
59809             };
59810
59811             var keybinding = utilKeybinding('select-error');
59812
59813             var errorService = services$1[selectedErrorService];
59814             var errorEditor;
59815             switch (selectedErrorService) {
59816                 case 'improveOSM':
59817                     errorEditor = uiImproveOsmEditor(context)
59818                     .on('change', function() {
59819                         context.map().pan([0,0]);  // trigger a redraw
59820                         var error = checkSelectedID();
59821                         if (!error) return;
59822                         context.ui().sidebar
59823                             .show(errorEditor.error(error));
59824                     });
59825                     break;
59826                 case 'keepRight':
59827                     errorEditor = uiKeepRightEditor(context)
59828                     .on('change', function() {
59829                         context.map().pan([0,0]);  // trigger a redraw
59830                         var error = checkSelectedID();
59831                         if (!error) return;
59832                         context.ui().sidebar
59833                             .show(errorEditor.error(error));
59834                     });
59835                     break;
59836             }
59837
59838
59839             var behaviors = [
59840                 behaviorBreathe(),
59841                 behaviorHover(context),
59842                 behaviorSelect(context),
59843                 behaviorLasso(context),
59844                 modeDragNode(context).behavior,
59845                 modeDragNote(context).behavior
59846             ];
59847
59848
59849             function checkSelectedID() {
59850                 if (!errorService) return;
59851                 var error = errorService.getError(selectedErrorID);
59852                 if (!error) {
59853                     context.enter(modeBrowse(context));
59854                 }
59855                 return error;
59856             }
59857
59858
59859             mode.zoomToSelected = function() {
59860                 if (!errorService) return;
59861                 var error = errorService.getError(selectedErrorID);
59862                 if (error) {
59863                     context.map().centerZoomEase(error.loc, 20);
59864                 }
59865             };
59866
59867
59868             mode.enter = function() {
59869                 var error = checkSelectedID();
59870                 if (!error) return;
59871
59872                 behaviors.forEach(context.install);
59873                 keybinding
59874                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
59875                     .on('⎋', esc, true);
59876
59877                 d3_select(document)
59878                     .call(keybinding);
59879
59880                 selectError();
59881
59882                 var sidebar = context.ui().sidebar;
59883                 sidebar.show(errorEditor.error(error));
59884
59885                 context.map()
59886                     .on('drawn.select-error', selectError);
59887
59888
59889                 // class the error as selected, or return to browse mode if the error is gone
59890                 function selectError(drawn) {
59891                     if (!checkSelectedID()) return;
59892
59893                     var selection = context.surface()
59894                         .selectAll('.error_id-' + selectedErrorID + '.' + selectedErrorService);
59895
59896                     if (selection.empty()) {
59897                         // Return to browse mode if selected DOM elements have
59898                         // disappeared because the user moved them out of view..
59899                         var source = event && event.type === 'zoom' && event.sourceEvent;
59900                         if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
59901                             context.enter(modeBrowse(context));
59902                         }
59903
59904                     } else {
59905                         selection
59906                             .classed('selected', true);
59907
59908                         context.selectedErrorID(selectedErrorID);
59909                     }
59910                 }
59911
59912                 function esc() {
59913                     if (d3_select('.combobox').size()) return;
59914                     context.enter(modeBrowse(context));
59915                 }
59916             };
59917
59918
59919             mode.exit = function() {
59920                 behaviors.forEach(context.uninstall);
59921
59922                 d3_select(document)
59923                     .call(keybinding.unbind);
59924
59925                 context.surface()
59926                     .selectAll('.qa_error.selected')
59927                     .classed('selected hover', false);
59928
59929                 context.map()
59930                     .on('drawn.select-error', null);
59931
59932                 context.ui().sidebar
59933                     .hide();
59934
59935                 context.selectedErrorID(null);
59936                 context.features().forceVisible([]);
59937             };
59938
59939
59940             return mode;
59941         }
59942
59943         function behaviorSelect(context) {
59944             // legacy option to show menu on every click
59945             var isShowAlways = +context.storage('edit-menu-show-always') === 1;
59946             var tolerance = 4;
59947             var _lastMouse = null;
59948             var _suppressMenu = true;
59949             var _p1 = null;
59950
59951
59952             function point() {
59953                 return d3_mouse(context.container().node());
59954             }
59955
59956
59957             function keydown() {
59958                 var e = event;
59959                 if (e && e.shiftKey) {
59960                     context.surface()
59961                         .classed('behavior-multiselect', true);
59962                 }
59963
59964                 if (e && e.keyCode === 93) {  // context menu
59965                     e.preventDefault();
59966                     e.stopPropagation();
59967                 }
59968             }
59969
59970
59971             function keyup() {
59972                 var e = event;
59973                 if (!e || !e.shiftKey) {
59974                     context.surface()
59975                         .classed('behavior-multiselect', false);
59976                 }
59977
59978
59979                 if (e && e.keyCode === 93) {  // context menu
59980                     e.preventDefault();
59981                     e.stopPropagation();
59982                     contextmenu();
59983                 }
59984             }
59985
59986
59987             function mousedown() {
59988                 if (!_p1) {
59989                     _p1 = point();
59990                 }
59991                 d3_select(window)
59992                     .on('mouseup.select', mouseup, true);
59993
59994                 _suppressMenu = !isShowAlways;
59995             }
59996
59997
59998             function mousemove() {
59999                 if (event) {
60000                     _lastMouse = event;
60001                 }
60002             }
60003
60004
60005             function mouseup() {
60006                 click();
60007             }
60008
60009
60010             function contextmenu() {
60011                 var e = event;
60012                 e.preventDefault();
60013                 e.stopPropagation();
60014
60015                 if (!+e.clientX && !+e.clientY) {
60016                     if (_lastMouse) {
60017                         e.sourceEvent = _lastMouse;
60018                     } else {
60019                         return;
60020                     }
60021                 }
60022
60023                 if (!_p1) {
60024                     _p1 = point();
60025                 }
60026                 _suppressMenu = false;
60027                 click();
60028             }
60029
60030
60031             function click() {
60032                 d3_select(window)
60033                     .on('mouseup.select', null, true);
60034
60035                 if (!_p1) return;
60036                 var p2 = point();
60037                 var dist = geoVecLength(_p1, p2);
60038                 _p1 = null;
60039                 if (dist > tolerance) return;
60040
60041                 // Defer processing the click,
60042                 // because this click may trigger a blur event,
60043                 // and the blur event may trigger a tag change,
60044                 // and we really want that tag change to go to the already selected entity
60045                 // and not the one that we are about to select with the click  #6028, #5878
60046                 // (Be very careful entering modeSelect anywhere that might also blur a field!)
60047                 var datum = event.target.__data__ || (_lastMouse && _lastMouse.target.__data__);
60048                 var isMultiselect = event.shiftKey || d3_select('#surface .lasso').node();
60049                 window.setTimeout(function() {
60050                     processClick(datum, isMultiselect);
60051                 }, 20);  // delay > whatever raw_tag_editor.js `scheduleChange` does (10ms).
60052             }
60053
60054
60055             function processClick(datum, isMultiselect) {
60056                 var mode = context.mode();
60057
60058                 var entity = datum && datum.properties && datum.properties.entity;
60059                 if (entity) datum = entity;
60060
60061                 if (datum && datum.type === 'midpoint') {
60062                     datum = datum.parents[0];
60063                 }
60064
60065                 if (datum instanceof osmEntity) {    // clicked an entity..
60066                     var selectedIDs = context.selectedIDs();
60067                     context.selectedNoteID(null);
60068                     context.selectedErrorID(null);
60069
60070                     if (!isMultiselect) {
60071                         if (selectedIDs.length > 1 && (!_suppressMenu && !isShowAlways)) {
60072                             // multiple things already selected, just show the menu...
60073                             mode.suppressMenu(false).reselect();
60074                         } else {
60075                             // select a single thing..
60076                             context.enter(modeSelect(context, [datum.id]).suppressMenu(_suppressMenu));
60077                         }
60078
60079                     } else {
60080                         if (selectedIDs.indexOf(datum.id) !== -1) {
60081                             // clicked entity is already in the selectedIDs list..
60082                             if (!_suppressMenu && !isShowAlways) {
60083                                 // don't deselect clicked entity, just show the menu.
60084                                 mode.suppressMenu(false).reselect();
60085                             } else {
60086                                 // deselect clicked entity, then reenter select mode or return to browse mode..
60087                                 selectedIDs = selectedIDs.filter(function(id) { return id !== datum.id; });
60088                                 context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
60089                             }
60090                         } else {
60091                             // clicked entity is not in the selected list, add it..
60092                             selectedIDs = selectedIDs.concat([datum.id]);
60093                             context.enter(modeSelect(context, selectedIDs).suppressMenu(_suppressMenu));
60094                         }
60095                     }
60096
60097                 } else if (datum && datum.__featurehash__ && !isMultiselect) {    // clicked Data..
60098                     context
60099                         .selectedNoteID(null)
60100                         .enter(modeSelectData(context, datum));
60101
60102                 } else if (datum instanceof osmNote && !isMultiselect) {    // clicked a Note..
60103                     context
60104                         .selectedNoteID(datum.id)
60105                         .enter(modeSelectNote(context, datum.id));
60106
60107                 } else if (datum instanceof qaError & !isMultiselect) {  // clicked an external QA error
60108                     context
60109                         .selectedErrorID(datum.id)
60110                         .enter(modeSelectError(context, datum.id, datum.service));
60111
60112                 } else {    // clicked nothing..
60113                     context.selectedNoteID(null);
60114                     context.selectedErrorID(null);
60115                     if (!isMultiselect && mode.id !== 'browse') {
60116                         context.enter(modeBrowse(context));
60117                     }
60118                 }
60119
60120                 // reset for next time..
60121                 _suppressMenu = true;
60122             }
60123
60124
60125             function behavior(selection) {
60126                 _lastMouse = null;
60127                 _suppressMenu = true;
60128                 _p1 = null;
60129
60130                 d3_select(window)
60131                     .on('keydown.select', keydown)
60132                     .on('keyup.select', keyup)
60133                     .on('contextmenu.select-window', function() {
60134                         // Edge and IE really like to show the contextmenu on the
60135                         // menubar when user presses a keyboard menu button
60136                         // even after we've already preventdefaulted the key event.
60137                         var e = event;
60138                         if (+e.clientX === 0 && +e.clientY === 0) {
60139                             event.preventDefault();
60140                             event.stopPropagation();
60141                         }
60142                     });
60143
60144                 selection
60145                     .on('mousedown.select', mousedown)
60146                     .on('mousemove.select', mousemove)
60147                     .on('contextmenu.select', contextmenu);
60148
60149                 if (event && event.shiftKey) {
60150                     context.surface()
60151                         .classed('behavior-multiselect', true);
60152                 }
60153             }
60154
60155
60156             behavior.off = function(selection) {
60157                 d3_select(window)
60158                     .on('keydown.select', null)
60159                     .on('keyup.select', null)
60160                     .on('contextmenu.select-window', null)
60161                     .on('mouseup.select', null, true);
60162
60163                 selection
60164                     .on('mousedown.select', null)
60165                     .on('mousemove.select', null)
60166                     .on('contextmenu.select', null);
60167
60168                 context.surface()
60169                     .classed('behavior-multiselect', false);
60170             };
60171
60172
60173             return behavior;
60174         }
60175
60176         function behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph) {
60177
60178             var origWay = context.entity(wayID);
60179
60180             var annotation = t((origWay.isDegenerate() ?
60181                 'operations.start.annotation.' :
60182                 'operations.continue.annotation.') + context.geometry(wayID)
60183             );
60184
60185             var behavior = behaviorDraw(context);
60186             behavior.hover().initialNodeID(index ? origWay.nodes[index] :
60187                 (origWay.isClosed() ? origWay.nodes[origWay.nodes.length - 2] : origWay.nodes[origWay.nodes.length - 1]));
60188
60189             var _tempEdits = 0;
60190
60191             var end = osmNode({ loc: context.map().mouseCoordinates() });
60192
60193             // Push an annotated state for undo to return back to.
60194             // We must make sure to remove this edit later.
60195             context.pauseChangeDispatch();
60196             context.perform(actionNoop(), annotation);
60197             _tempEdits++;
60198
60199             // Add the drawing node to the graph.
60200             // We must make sure to remove this edit later.
60201             context.perform(_actionAddDrawNode());
60202             _tempEdits++;
60203             context.resumeChangeDispatch();
60204
60205
60206             function keydown() {
60207                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
60208                     if (context.surface().classed('nope')) {
60209                         context.surface()
60210                             .classed('nope-suppressed', true);
60211                     }
60212                     context.surface()
60213                         .classed('nope', false)
60214                         .classed('nope-disabled', true);
60215                 }
60216             }
60217
60218
60219             function keyup() {
60220                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
60221                     if (context.surface().classed('nope-suppressed')) {
60222                         context.surface()
60223                             .classed('nope', true);
60224                     }
60225                     context.surface()
60226                         .classed('nope-suppressed', false)
60227                         .classed('nope-disabled', false);
60228                 }
60229             }
60230
60231
60232             function allowsVertex(d) {
60233                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
60234             }
60235
60236
60237             // related code
60238             // - `mode/drag_node.js`     `doMode()`
60239             // - `behavior/draw.js`      `click()`
60240             // - `behavior/draw_way.js`  `move()`
60241             function move(datum) {
60242                 context.surface().classed('nope-disabled', event.altKey);
60243
60244                 var targetLoc = datum && datum.properties && datum.properties.entity && allowsVertex(datum.properties.entity) && datum.properties.entity.loc;
60245                 var targetNodes = datum && datum.properties && datum.properties.nodes;
60246                 var loc = context.map().mouseCoordinates();
60247
60248                 if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
60249                     loc = targetLoc;
60250
60251                 } else if (targetNodes) {   // snap to way - a line target with `.nodes`
60252                     var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
60253                     if (choice) {
60254                         loc = choice.loc;
60255                     }
60256                 }
60257
60258                 context.replace(actionMoveNode(end.id, loc));
60259                 end = context.entity(end.id);
60260                 checkGeometry(false);
60261             }
60262
60263
60264             // Check whether this edit causes the geometry to break.
60265             // If so, class the surface with a nope cursor.
60266             // `finishDraw` - Only checks the relevant line segments if finishing drawing
60267             function checkGeometry(finishDraw) {
60268                 var nopeDisabled = context.surface().classed('nope-disabled');
60269                 var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
60270
60271                 if (nopeDisabled) {
60272                     context.surface()
60273                         .classed('nope', false)
60274                         .classed('nope-suppressed', isInvalid);
60275                 } else {
60276                     context.surface()
60277                         .classed('nope', isInvalid)
60278                         .classed('nope-suppressed', false);
60279                 }
60280             }
60281
60282
60283             function isInvalidGeometry(entity, graph, finishDraw) {
60284                 var parents = graph.parentWays(entity);
60285
60286                 for (var i = 0; i < parents.length; i++) {
60287                     var parent = parents[i];
60288                     var nodes = graph.childNodes(parent).slice();  // shallow copy
60289
60290                     if (origWay.isClosed()) { // Check if Area
60291                         if (finishDraw) {
60292                             if (nodes.length < 3) return false;
60293                             nodes.splice(-2, 1);
60294                             entity = nodes[nodes.length-2];
60295                         } else {
60296                             nodes.pop();
60297                         }
60298                     } else { // Line
60299                         if (finishDraw) {
60300                             nodes.pop();
60301                         }
60302                     }
60303
60304                     if (geoHasSelfIntersections(nodes, entity.id)) {
60305                         return true;
60306                     }
60307                 }
60308
60309                 return false;
60310             }
60311
60312
60313             function undone() {
60314                 context.pauseChangeDispatch();
60315                 // Undo popped the history back to the initial annotated no-op edit.
60316                 _tempEdits = 0;     // We will deal with the temp edits here
60317                 context.pop(1);     // Remove initial no-op edit
60318
60319                 if (context.graph() === baselineGraph) {    // We've undone back to the beginning
60320                     // baselineGraph may be behind startGraph if this way was added rather than continued
60321                     resetToStartGraph();
60322                     context.resumeChangeDispatch();
60323                     context.enter(modeSelect(context, [wayID]));
60324                 } else {
60325                     // Remove whatever segment was drawn previously and continue drawing
60326                     context.pop(1);
60327                     context.resumeChangeDispatch();
60328                     context.enter(mode);
60329                 }
60330             }
60331
60332
60333             function setActiveElements() {
60334                 context.surface().selectAll('.' + end.id)
60335                     .classed('active', true);
60336             }
60337
60338
60339             function resetToStartGraph() {
60340                 while (context.graph() !== startGraph) {
60341                     context.pop();
60342                 }
60343             }
60344
60345
60346             var drawWay = function(surface) {
60347                 behavior
60348                     .on('move', move)
60349                     .on('click', drawWay.add)
60350                     .on('clickWay', drawWay.addWay)
60351                     .on('clickNode', drawWay.addNode)
60352                     .on('undo', context.undo)
60353                     .on('cancel', drawWay.cancel)
60354                     .on('finish', drawWay.finish);
60355
60356                 d3_select(window)
60357                     .on('keydown.drawWay', keydown)
60358                     .on('keyup.drawWay', keyup);
60359
60360                 context.map()
60361                     .dblclickEnable(false)
60362                     .on('drawn.draw', setActiveElements);
60363
60364                 setActiveElements();
60365
60366                 surface.call(behavior);
60367
60368                 context.history()
60369                     .on('undone.draw', undone);
60370             };
60371
60372
60373             drawWay.off = function(surface) {
60374                 // Drawing was interrupted unexpectedly.
60375                 // This can happen if the user changes modes,
60376                 // clicks geolocate button, a hashchange event occurs, etc.
60377                 if (_tempEdits) {
60378                     context.pauseChangeDispatch();
60379                     context.pop(_tempEdits);
60380                     resetToStartGraph();
60381                     context.resumeChangeDispatch();
60382                 }
60383
60384                 context.map()
60385                     .on('drawn.draw', null);
60386
60387                 surface.call(behavior.off)
60388                     .selectAll('.active')
60389                     .classed('active', false);
60390
60391                 surface
60392                     .classed('nope', false)
60393                     .classed('nope-suppressed', false)
60394                     .classed('nope-disabled', false);
60395
60396                 d3_select(window)
60397                     .on('keydown.hover', null)
60398                     .on('keyup.hover', null);
60399
60400                 context.history()
60401                     .on('undone.draw', null);
60402             };
60403
60404
60405             function _actionAddDrawNode() {
60406                 return function(graph) {
60407                     return graph
60408                         .replace(end)
60409                         .replace(origWay.addNode(end.id, index));
60410                 };
60411             }
60412
60413
60414             function _actionReplaceDrawNode(newNode) {
60415                 return function(graph) {
60416                     return graph
60417                         .replace(origWay.addNode(newNode.id, index))
60418                         .remove(end);
60419                 };
60420             }
60421
60422
60423             // Accept the current position of the drawing node and continue drawing.
60424             drawWay.add = function(loc, d) {
60425                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60426                     return;   // can't click here
60427                 }
60428
60429                 context.pauseChangeDispatch();
60430                 context.pop(_tempEdits);
60431                 _tempEdits = 0;
60432
60433                 context.perform(
60434                     _actionAddDrawNode(),
60435                     annotation
60436                 );
60437
60438                 context.resumeChangeDispatch();
60439                 checkGeometry(false);   // finishDraw = false
60440                 context.enter(mode);
60441             };
60442
60443
60444             // Connect the way to an existing way.
60445             drawWay.addWay = function(loc, edge, d) {
60446                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60447                     return;   // can't click here
60448                 }
60449
60450                 context.pauseChangeDispatch();
60451                 context.pop(_tempEdits);
60452                 _tempEdits = 0;
60453
60454                 context.perform(
60455                     _actionAddDrawNode(),
60456                     actionAddMidpoint({ loc: loc, edge: edge }, end),
60457                     annotation
60458                 );
60459
60460                 context.resumeChangeDispatch();
60461                 checkGeometry(false);   // finishDraw = false
60462                 context.enter(mode);
60463             };
60464
60465
60466             // Connect the way to an existing node and continue drawing.
60467             drawWay.addNode = function(node, d) {
60468                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60469                     return;   // can't click here
60470                 }
60471
60472                 context.pauseChangeDispatch();
60473                 context.pop(_tempEdits);
60474                 _tempEdits = 0;
60475
60476                 context.perform(
60477                     _actionReplaceDrawNode(node),
60478                     annotation
60479                 );
60480
60481                 context.resumeChangeDispatch();
60482                 checkGeometry(false);   // finishDraw = false
60483                 context.enter(mode);
60484             };
60485
60486
60487             // Finish the draw operation, removing the temporary edits.
60488             // If the way has enough nodes to be valid, it's selected.
60489             // Otherwise, delete everything and return to browse mode.
60490             drawWay.finish = function() {
60491                 checkGeometry(true);   // finishDraw = true
60492                 if (context.surface().classed('nope')) {
60493                     return;   // can't click here
60494                 }
60495
60496                 context.pauseChangeDispatch();
60497                 context.pop(_tempEdits);
60498                 _tempEdits = 0;
60499
60500                 var way = context.hasEntity(wayID);
60501                 if (!way || way.isDegenerate()) {
60502                     drawWay.cancel();
60503                     return;
60504                 }
60505
60506                 context.resumeChangeDispatch();
60507
60508                 window.setTimeout(function() {
60509                     context.map().dblclickEnable(true);
60510                 }, 1000);
60511
60512                 var isNewFeature = !mode.isContinuing;
60513                 context.enter(modeSelect(context, [wayID]).newFeature(isNewFeature));
60514             };
60515
60516
60517             // Cancel the draw operation, delete everything, and return to browse mode.
60518             drawWay.cancel = function() {
60519                 context.pauseChangeDispatch();
60520                 context.pop(_tempEdits);
60521                 _tempEdits = 0;
60522
60523                 resetToStartGraph();
60524                 context.resumeChangeDispatch();
60525
60526                 window.setTimeout(function() {
60527                     context.map().dblclickEnable(true);
60528                 }, 1000);
60529
60530                 context.surface()
60531                     .classed('nope', false)
60532                     .classed('nope-disabled', false)
60533                     .classed('nope-suppressed', false);
60534
60535                 context.enter(modeBrowse(context));
60536             };
60537
60538
60539             drawWay.activeID = function() {
60540                 if (!arguments.length) return end.id;
60541                 // no assign
60542                 return drawWay;
60543             };
60544
60545
60546             drawWay.tail = function(text) {
60547                 behavior.tail(text);
60548                 return drawWay;
60549             };
60550
60551
60552             return drawWay;
60553         }
60554
60555         function modeDrawLine(context, wayID, startGraph, baselineGraph, button, affix, continuing) {
60556             var mode = {
60557                 button: button,
60558                 id: 'draw-line'
60559             };
60560
60561             var behavior;
60562
60563             mode.wayID = wayID;
60564
60565             mode.isContinuing = continuing;
60566
60567             mode.enter = function() {
60568                 var way = context.entity(wayID);
60569                 var index = (affix === 'prefix') ? 0 : undefined;
60570                 var headID = (affix === 'prefix') ? way.first() : way.last();
60571
60572                 behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph)
60573                     .tail(t('modes.draw_line.tail'));
60574
60575                 var addNode = behavior.addNode;
60576                 behavior.addNode = function(node, d) {
60577                     if (node.id === headID) {
60578                         behavior.finish();
60579                     } else {
60580                         addNode(node, d);
60581                     }
60582                 };
60583
60584                 context.install(behavior);
60585             };
60586
60587
60588             mode.exit = function() {
60589                 context.uninstall(behavior);
60590             };
60591
60592
60593             mode.selectedIDs = function() {
60594                 return [wayID];
60595             };
60596
60597
60598             mode.activeID = function() {
60599                 return (behavior && behavior.activeID()) || [];
60600             };
60601
60602             return mode;
60603         }
60604
60605         function operationContinue(selectedIDs, context) {
60606             var graph = context.graph();
60607             var entities = selectedIDs.map(function(id) { return graph.entity(id); });
60608             var geometries = Object.assign(
60609                 { line: [], vertex: [] },
60610                 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
60611             );
60612             var vertex = geometries.vertex[0];
60613
60614
60615             function candidateWays() {
60616                 return graph.parentWays(vertex).filter(function(parent) {
60617                     return parent.geometry(graph) === 'line' &&
60618                         !parent.isClosed() &&
60619                         parent.affix(vertex.id) &&
60620                         (geometries.line.length === 0 || geometries.line[0] === parent);
60621                 });
60622             }
60623
60624
60625             var operation = function() {
60626                 var candidate = candidateWays()[0];
60627                 context.enter(
60628                     modeDrawLine(context, candidate.id, context.graph(), context.graph(), 'line', candidate.affix(vertex.id), true)
60629                 );
60630             };
60631
60632
60633             operation.available = function() {
60634                 return geometries.vertex.length === 1 &&
60635                     geometries.line.length <= 1 &&
60636                     !context.features().hasHiddenConnections(vertex, context.graph());
60637             };
60638
60639
60640             operation.disabled = function() {
60641                 var candidates = candidateWays();
60642                 if (candidates.length === 0) {
60643                     return 'not_eligible';
60644                 } else if (candidates.length > 1) {
60645                     return 'multiple';
60646                 }
60647
60648                 return false;
60649             };
60650
60651
60652             operation.tooltip = function() {
60653                 var disable = operation.disabled();
60654                 return disable ?
60655                     t('operations.continue.' + disable) :
60656                     t('operations.continue.description');
60657             };
60658
60659
60660             operation.annotation = function() {
60661                 return t('operations.continue.annotation.line');
60662             };
60663
60664
60665             operation.id = 'continue';
60666             operation.keys = [t('operations.continue.key')];
60667             operation.title = t('operations.continue.title');
60668             operation.behavior = behaviorOperation(context).which(operation);
60669
60670             return operation;
60671         }
60672
60673         function operationDisconnect(selectedIDs, context) {
60674             var vertexIDs = [];
60675             var wayIDs = [];
60676             var otherIDs = [];
60677             var actions = [];
60678
60679             selectedIDs.forEach(function(id) {
60680                 if (context.geometry(id) === 'vertex') {
60681                     vertexIDs.push(id);
60682                 } else if (context.entity(id).type === 'way'){
60683                     wayIDs.push(id);
60684                 } else {
60685                     otherIDs.push(id);
60686                 }
60687             });
60688
60689             var disconnectingWayID = (vertexIDs.length === 0 && wayIDs.length === 1 && wayIDs[0]);
60690             var extent, nodes, coords;
60691
60692             if (disconnectingWayID) {   // disconnecting a way
60693                 var way = context.entity(disconnectingWayID);
60694                 extent = way.extent(context.graph());
60695                 nodes = utilGetAllNodes([disconnectingWayID], context.graph());
60696                 coords = nodes.map(function(n) { return n.loc; });
60697
60698                 way.nodes.forEach(function(vertexID) {
60699                     var action = actionDisconnect(vertexID).limitWays(wayIDs);
60700                     if (action.disabled(context.graph()) !== 'not_connected') {
60701                         actions.push(action);
60702                     }
60703                 });
60704
60705             } else {    // disconnecting a vertex
60706                 vertexIDs.forEach(function(vertexID) {
60707                     var action = actionDisconnect(vertexID);
60708
60709                     if (wayIDs.length > 0) {
60710                         var waysIDsForVertex = wayIDs.filter(function(wayID) {
60711                             var way = context.entity(wayID);
60712                             return way.nodes.indexOf(vertexID) !== -1;
60713                         });
60714                         action.limitWays(waysIDsForVertex);
60715                     }
60716                     actions.push(action);
60717                 });
60718             }
60719
60720
60721             var operation = function() {
60722                 context.perform(function(graph) {
60723                     return actions.reduce(function(graph, action) { return action(graph); }, graph);
60724                 }, operation.annotation());
60725
60726                 context.validator().validate();
60727             };
60728
60729
60730             operation.available = function() {
60731                 if (actions.length === 0) return false;
60732                 if (otherIDs.length !== 0) return false;
60733
60734                 if (vertexIDs.length !== 0 && wayIDs.length !== 0 && !wayIDs.every(function(wayID) {
60735                     return vertexIDs.some(function(vertexID) {
60736                         var way = context.entity(wayID);
60737                         return way.nodes.indexOf(vertexID) !== -1;
60738                     });
60739                 })) return false;
60740
60741                 return true;
60742             };
60743
60744
60745             operation.disabled = function() {
60746                 var reason;
60747                 for (var actionIndex in actions) {
60748                     reason = actions[actionIndex].disabled(context.graph());
60749                     if (reason) return reason;
60750                 }
60751
60752                 if (disconnectingWayID && extent.percentContainedIn(context.extent()) < 0.8) {
60753                     return 'too_large.single';
60754                 } else if (disconnectingWayID && someMissing()) {
60755                     return 'not_downloaded';
60756                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60757                     return 'connected_to_hidden';
60758                 }
60759
60760                 return false;
60761
60762
60763                 function someMissing() {
60764                     if (context.inIntro()) return false;
60765                     var osm = context.connection();
60766                     if (osm) {
60767                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60768                         if (missing.length) {
60769                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60770                             return true;
60771                         }
60772                     }
60773                     return false;
60774                 }
60775             };
60776
60777
60778             operation.tooltip = function() {
60779                 var disable = operation.disabled();
60780                 if (disable) {
60781                     return t('operations.disconnect.' + disable);
60782                 }
60783                 if (disconnectingWayID) {
60784                     return t('operations.disconnect.' + context.geometry(disconnectingWayID) + '.description');
60785                 }
60786                 return t('operations.disconnect.description');
60787             };
60788
60789
60790             operation.annotation = function() {
60791                 return t('operations.disconnect.annotation');
60792             };
60793
60794
60795             operation.id = 'disconnect';
60796             operation.keys = [t('operations.disconnect.key')];
60797             operation.title = t('operations.disconnect.title');
60798             operation.behavior = behaviorOperation(context).which(operation);
60799
60800             return operation;
60801         }
60802
60803         function operationDowngrade(selectedIDs, context) {
60804             var affectedFeatureCount = 0;
60805             var downgradeType;
60806
60807             setDowngradeTypeForEntityIDs();
60808
60809             var multi = affectedFeatureCount === 1 ? 'single' : 'multiple';
60810
60811             function setDowngradeTypeForEntityIDs() {
60812                 for (var i in selectedIDs) {
60813                     var entityID = selectedIDs[i];
60814                     var type = downgradeTypeForEntityID(entityID);
60815                     if (type) {
60816                         affectedFeatureCount += 1;
60817                         if (downgradeType && type !== downgradeType) {
60818                             downgradeType = 'building_address';
60819                         } else {
60820                             downgradeType = type;
60821                         }
60822                     }
60823                 }
60824             }
60825
60826             function downgradeTypeForEntityID(entityID) {
60827                 var graph = context.graph();
60828                 var entity = graph.entity(entityID);
60829                 var preset = context.presets().match(entity, graph);
60830
60831                 if (preset.isFallback()) return null;
60832
60833                 if (entity.type === 'node' &&
60834                     preset.id !== 'address' &&
60835                     Object.keys(entity.tags).some(function(key) {
60836                         return key.match(/^addr:.{1,}/);
60837                     })) {
60838
60839                     return 'address';
60840                 }
60841                 if (entity.geometry(graph) === 'area' &&
60842                     entity.tags.building &&
60843                     !preset.tags.building) {
60844
60845                     return 'building';
60846                 }
60847
60848                 return null;
60849             }
60850
60851             var buildingKeysToKeep = ['architect', 'building', 'height', 'layer', 'source', 'type', 'wheelchair'];
60852             var addressKeysToKeep = ['source'];
60853
60854             var operation = function () {
60855                 context.perform(function(graph) {
60856
60857                     for (var i in selectedIDs) {
60858                         var entityID = selectedIDs[i];
60859                         var type = downgradeTypeForEntityID(entityID);
60860                         if (!type) continue;
60861
60862                         var tags = Object.assign({}, graph.entity(entityID).tags);  // shallow copy
60863                         for (var key in tags) {
60864                             if (type === 'address' && addressKeysToKeep.indexOf(key) !== -1) continue;
60865                             if (type === 'building') {
60866                                 if (buildingKeysToKeep.indexOf(key) !== -1 ||
60867                                     key.match(/^building:.{1,}/) ||
60868                                     key.match(/^roof:.{1,}/)) continue;
60869                             }
60870                             // keep address tags for buildings too
60871                             if (key.match(/^addr:.{1,}/)) continue;
60872
60873                             delete tags[key];
60874                         }
60875                         graph = actionChangeTags(entityID, tags)(graph);
60876                     }
60877                     return graph;
60878                 }, operation.annotation());
60879
60880                 context.validator().validate();
60881
60882                 // refresh the select mode to enable the delete operation
60883                 context.enter(modeSelect(context, selectedIDs));
60884             };
60885
60886
60887             operation.available = function () {
60888                 return downgradeType;
60889             };
60890
60891
60892             operation.disabled = function () {
60893                 if (selectedIDs.some(hasWikidataTag)) {
60894                     return 'has_wikidata_tag';
60895                 }
60896                 return false;
60897
60898                 function hasWikidataTag(id) {
60899                     var entity = context.entity(id);
60900                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
60901                 }
60902             };
60903
60904
60905             operation.tooltip = function () {
60906                 var disable = operation.disabled();
60907                 return disable ?
60908                     t('operations.downgrade.' + disable + '.' + multi) :
60909                     t('operations.downgrade.description.' + downgradeType);
60910             };
60911
60912
60913             operation.annotation = function () {
60914                 var suffix;
60915                 if (downgradeType === 'building_address') {
60916                     suffix = 'multiple';
60917                 } else {
60918                     suffix = downgradeType + '.' + multi;
60919                 }
60920                 return t('operations.downgrade.annotation.' + suffix, { n: affectedFeatureCount});
60921             };
60922
60923
60924             operation.id = 'downgrade';
60925             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
60926             operation.title = t('operations.downgrade.title');
60927             operation.behavior = behaviorOperation(context).which(operation);
60928
60929
60930             return operation;
60931         }
60932
60933         function operationExtract(selectedIDs, context) {
60934             var entityID = selectedIDs.length && selectedIDs[0];
60935             var action = actionExtract(entityID, context.projection);
60936
60937             var geometry = entityID && context.geometry(entityID);
60938             var extent = geometry === 'area' && context.entity(entityID).extent(context.graph());
60939
60940
60941             var operation = function () {
60942                 context.perform(action);  // do the extract
60943                 context.validator().validate();
60944
60945                 var extractedNodeID = action.getExtractedNodeID();
60946
60947                 var mouse = context.map().mouseCoordinates();
60948                 if (mouse.some(isNaN)) {
60949                     enterMoveMode();
60950
60951                 } else {
60952                     // move detached node to the mouse location (transitioned)
60953                     context.perform(actionMoveNode(extractedNodeID, mouse));
60954
60955                     // after transition completes, put at final mouse location and enter move mode.
60956                     window.setTimeout(function() {
60957                         mouse = context.map().mouseCoordinates();
60958                         context.replace(actionMoveNode(extractedNodeID, mouse));
60959                         enterMoveMode();
60960                     }, 150);
60961                 }
60962
60963                 function enterMoveMode() {
60964                     var baseGraph = context.graph();
60965                     context.enter(modeMove(context, [extractedNodeID], baseGraph));
60966                 }
60967             };
60968
60969
60970             operation.available = function () {
60971                 if (selectedIDs.length !== 1) return false;
60972
60973                 var graph = context.graph();
60974                 var entity = graph.hasEntity(entityID);
60975                 if (!entity) return false;
60976
60977                 if (!entity.hasInterestingTags()) return false;
60978
60979                 if (geometry === 'area') {
60980                     var preset = context.presets().match(entity, graph);
60981                     return preset.geometry.indexOf('point') !== -1;
60982                 }
60983
60984                 return entity.type === 'node' && graph.parentWays(entity).length > 0;
60985             };
60986
60987
60988             operation.disabled = function () {
60989                 var reason = action.disabled(context.graph());
60990                 if (reason) {
60991                     return reason;
60992                 } else if (geometry === 'vertex' && selectedIDs.some(context.hasHiddenConnections)) {
60993                     return 'connected_to_hidden';
60994                 } else if (extent && extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
60995                     return 'too_large';
60996                 }
60997
60998                 return false;
60999             };
61000
61001
61002             operation.tooltip = function () {
61003                 var disableReason = operation.disabled();
61004                 if (disableReason) {
61005                     return t('operations.extract.' + disableReason + '.' + geometry + '.single',
61006                         { relation: context.presets().item('type/restriction').name() });
61007                 } else {
61008                     return t('operations.extract.description.' + geometry + '.single');
61009                 }
61010             };
61011
61012
61013             operation.annotation = function () {
61014                 return t('operations.extract.annotation.single');
61015             };
61016
61017
61018             operation.id = 'extract';
61019             operation.keys = [t('operations.extract.key')];
61020             operation.title = t('operations.extract.title');
61021             operation.behavior = behaviorOperation(context).which(operation);
61022
61023
61024             return operation;
61025         }
61026
61027         function operationMerge(selectedIDs, context) {
61028
61029             function updatePresetTags(newGraph, ids) {
61030                 var id = ids[0];
61031                 var newEntity = newGraph.hasEntity(id);
61032
61033                 if (!newEntity) return;
61034                 var newPreset = context.presets().match(newEntity, newGraph);
61035                 context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
61036             }
61037
61038
61039             var join = actionJoin(selectedIDs);
61040             var merge = actionMerge(selectedIDs);
61041             var mergePolygon = actionMergePolygon(selectedIDs);
61042             var mergeNodes = actionMergeNodes(selectedIDs);
61043
61044
61045             var operation = function() {
61046                 var doUpdateTags;
61047                 var action;
61048
61049                 if (!join.disabled(context.graph())) {
61050                     doUpdateTags = false;
61051                     action = join;
61052                 } else if (!merge.disabled(context.graph())) {
61053                     doUpdateTags = true;
61054                     action = merge;
61055                 } else if (!mergePolygon.disabled(context.graph())) {
61056                     doUpdateTags = false;
61057                     action = mergePolygon;
61058                 } else {
61059                     doUpdateTags = true;
61060                     action = mergeNodes;
61061                 }
61062
61063                 context.perform(action, operation.annotation());
61064
61065                 var ids = selectedIDs.filter(function(id) {
61066                     var entity = context.hasEntity(id);
61067                     return entity && entity.type !== 'node';
61068                 });
61069
61070                 // if we merged tags, rematch preset to update tags if necessary (#3851)
61071                 if (doUpdateTags) {
61072                     updatePresetTags(context.graph(), ids);
61073                 }
61074
61075                 context.validator().validate();
61076                 context.enter(modeSelect(context, ids));
61077             };
61078
61079
61080             operation.available = function() {
61081                 return selectedIDs.length >= 2;
61082             };
61083
61084
61085             operation.disabled = function() {
61086                 return join.disabled(context.graph()) &&
61087                     merge.disabled(context.graph()) &&
61088                     mergePolygon.disabled(context.graph()) &&
61089                     mergeNodes.disabled(context.graph());
61090             };
61091
61092
61093             operation.tooltip = function() {
61094                 var j = join.disabled(context.graph());          // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
61095                 var m = merge.disabled(context.graph());         // 'not_eligible'
61096                 var p = mergePolygon.disabled(context.graph());  // 'not_eligible', 'incomplete_relation'
61097                 var n = mergeNodes.disabled(context.graph());    // 'not_eligible', 'relation', 'restriction'
61098
61099                 // disabled for one of various reasons
61100                 if (j && m && p && n) {
61101                     if (j === 'restriction' || n === 'restriction') {
61102                         return t('operations.merge.restriction',
61103                             { relation: context.presets().item('type/restriction').name() });
61104
61105                     } else if (p === 'incomplete_relation') {
61106                         return t('operations.merge.incomplete_relation');
61107
61108                     } else if (n === 'relation') {
61109                         return t('operations.merge.relation');
61110
61111                     } else {
61112                         return t('operations.merge.' + j);
61113                     }
61114
61115                 } else {
61116                     return t('operations.merge.description');
61117                 }
61118             };
61119
61120
61121             operation.annotation = function() {
61122                 return t('operations.merge.annotation', { n: selectedIDs.length });
61123             };
61124
61125
61126             operation.id = 'merge';
61127             operation.keys = [t('operations.merge.key')];
61128             operation.title = t('operations.merge.title');
61129             operation.behavior = behaviorOperation(context).which(operation);
61130
61131             return operation;
61132         }
61133
61134         function operationReverse(selectedIDs, context) {
61135             var entityID = selectedIDs[0];
61136
61137             var operation = function() {
61138                 context.perform(actionReverse(entityID), operation.annotation());
61139                 context.validator().validate();
61140             };
61141
61142
61143             operation.available = function() {
61144                 return selectedIDs.length === 1 && context.geometry(entityID) === 'line';
61145             };
61146
61147
61148             operation.disabled = function() {
61149                 return false;
61150             };
61151
61152
61153             operation.tooltip = function() {
61154                 return t('operations.reverse.description');
61155             };
61156
61157
61158             operation.annotation = function() {
61159                 return t('operations.reverse.annotation');
61160             };
61161
61162
61163             operation.id = 'reverse';
61164             operation.keys = [t('operations.reverse.key')];
61165             operation.title = t('operations.reverse.title');
61166             operation.behavior = behaviorOperation(context).which(operation);
61167
61168             return operation;
61169         }
61170
61171         function operationSplit(selectedIDs, context) {
61172             var vertices = selectedIDs
61173                 .filter(function(id) { return context.geometry(id) === 'vertex'; });
61174             var entityID = vertices[0];
61175             var action = actionSplit(entityID);
61176             var ways = [];
61177
61178             if (vertices.length === 1) {
61179                 if (entityID && selectedIDs.length > 1) {
61180                     var ids = selectedIDs.filter(function(id) { return id !== entityID; });
61181                     action.limitWays(ids);
61182                 }
61183                 ways = action.ways(context.graph());
61184             }
61185
61186
61187             var operation = function() {
61188                 var difference = context.perform(action, operation.annotation());
61189                 context.enter(modeSelect(context, difference.extantIDs()));
61190             };
61191
61192
61193             operation.available = function() {
61194                 return vertices.length === 1;
61195             };
61196
61197
61198             operation.disabled = function() {
61199                 var reason = action.disabled(context.graph());
61200                 if (reason) {
61201                     return reason;
61202                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61203                     return 'connected_to_hidden';
61204                 }
61205
61206                 return false;
61207             };
61208
61209
61210             operation.tooltip = function() {
61211                 var disable = operation.disabled();
61212                 if (disable) {
61213                     return t('operations.split.' + disable);
61214                 } else if (ways.length === 1) {
61215                     return t('operations.split.description.' + context.geometry(ways[0].id));
61216                 } else {
61217                     return t('operations.split.description.multiple');
61218                 }
61219             };
61220
61221
61222             operation.annotation = function() {
61223                 return ways.length === 1 ?
61224                     t('operations.split.annotation.' + context.geometry(ways[0].id)) :
61225                     t('operations.split.annotation.multiple', { n: ways.length });
61226             };
61227
61228
61229             operation.id = 'split';
61230             operation.keys = [t('operations.split.key')];
61231             operation.title = t('operations.split.title');
61232             operation.behavior = behaviorOperation(context).which(operation);
61233
61234             return operation;
61235         }
61236
61237         function operationStraighten(selectedIDs, context) {
61238             var wayIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'w'; });
61239             var nodeIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'n'; });
61240
61241             var nodes = utilGetAllNodes(selectedIDs, context.graph());
61242             var coords = nodes.map(function(n) { return n.loc; });
61243             var action = chooseAction();
61244             var geometry;
61245
61246
61247             function chooseAction() {
61248                 // straighten selected nodes
61249                 if (wayIDs.length === 0 && nodeIDs.length > 2) {
61250                     geometry = 'points';
61251                     return actionStraightenNodes(nodeIDs, context.projection);
61252
61253                 // straighten selected ways (possibly between range of 2 selected nodes)
61254                 } else if (wayIDs.length > 0 && (nodeIDs.length === 0 || nodeIDs.length === 2)) {
61255                     var startNodeIDs = [];
61256                     var endNodeIDs = [];
61257
61258                     for (var i = 0; i < selectedIDs.length; i++) {
61259                         var entity = context.entity(selectedIDs[i]);
61260                         if (entity.type === 'node') {
61261                             continue;
61262                         } else if (entity.type !== 'way' || entity.isClosed()) {
61263                             return false;  // exit early, can't straighten these
61264                         }
61265
61266                         startNodeIDs.push(entity.first());
61267                         endNodeIDs.push(entity.last());
61268                     }
61269
61270                     // Remove duplicate end/startNodeIDs (duplicate nodes cannot be at the line end)
61271                     startNodeIDs = startNodeIDs.filter(function(n) {
61272                         return startNodeIDs.indexOf(n) === startNodeIDs.lastIndexOf(n);
61273                     });
61274                     endNodeIDs = endNodeIDs.filter(function(n) {
61275                         return endNodeIDs.indexOf(n) === endNodeIDs.lastIndexOf(n);
61276                     });
61277
61278                     // Ensure all ways are connected (i.e. only 2 unique endpoints/startpoints)
61279                     if (utilArrayDifference(startNodeIDs, endNodeIDs).length +
61280                         utilArrayDifference(endNodeIDs, startNodeIDs).length !== 2) return false;
61281
61282                     // Ensure path contains at least 3 unique nodes
61283                     var wayNodeIDs = utilGetAllNodes(wayIDs, context.graph())
61284                         .map(function(node) { return node.id; });
61285                     if (wayNodeIDs.length <= 2) return false;
61286
61287                     // If range of 2 selected nodes is supplied, ensure nodes lie on the selected path
61288                     if (nodeIDs.length === 2 && (
61289                         wayNodeIDs.indexOf(nodeIDs[0]) === -1 || wayNodeIDs.indexOf(nodeIDs[1]) === -1
61290                     )) return false;
61291
61292                     geometry = 'line';
61293                     return actionStraightenWay(selectedIDs, context.projection);
61294                 }
61295
61296                 return false;
61297             }
61298
61299
61300             function operation() {
61301                 if (!action) return;
61302
61303                 context.perform(action, operation.annotation());
61304
61305                 window.setTimeout(function() {
61306                     context.validator().validate();
61307                 }, 300);  // after any transition
61308             }
61309
61310
61311             operation.available = function() {
61312                 return Boolean(action);
61313             };
61314
61315
61316             operation.disabled = function() {
61317                 var reason = action.disabled(context.graph());
61318                 if (reason) {
61319                     return reason;
61320                 } else if (someMissing()) {
61321                     return 'not_downloaded';
61322                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61323                     return 'connected_to_hidden';
61324                 }
61325
61326                 return false;
61327
61328
61329                 function someMissing() {
61330                     if (context.inIntro()) return false;
61331                     var osm = context.connection();
61332                     if (osm) {
61333                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61334                         if (missing.length) {
61335                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61336                             return true;
61337                         }
61338                     }
61339                     return false;
61340                 }
61341             };
61342
61343
61344             operation.tooltip = function() {
61345                 var disable = operation.disabled();
61346                 return disable ?
61347                     t('operations.straighten.' + disable) :
61348                     t('operations.straighten.description.' + geometry);
61349             };
61350
61351
61352             operation.annotation = function() {
61353                 return t('operations.straighten.annotation.' + geometry);
61354             };
61355
61356
61357             operation.id = 'straighten';
61358             operation.keys = [t('operations.straighten.key')];
61359             operation.title = t('operations.straighten.title');
61360             operation.behavior = behaviorOperation(context).which(operation);
61361
61362             return operation;
61363         }
61364
61365
61366
61367         var Operations = /*#__PURE__*/Object.freeze({
61368                 operationCircularize: operationCircularize,
61369                 operationContinue: operationContinue,
61370                 operationDelete: operationDelete,
61371                 operationDisconnect: operationDisconnect,
61372                 operationDowngrade: operationDowngrade,
61373                 operationExtract: operationExtract,
61374                 operationMerge: operationMerge,
61375                 operationMove: operationMove,
61376                 operationOrthogonalize: operationOrthogonalize,
61377                 operationReflectShort: operationReflectShort,
61378                 operationReflectLong: operationReflectLong,
61379                 operationReverse: operationReverse,
61380                 operationRotate: operationRotate,
61381                 operationSplit: operationSplit,
61382                 operationStraighten: operationStraighten
61383         });
61384
61385         function uiEditMenu(context, operations) {
61386             var menu;
61387             var center = [0, 0];
61388             var offset = [0, 0];
61389             var tooltip;
61390
61391             var p = 8;               // top padding
61392             var m = 4;               // top margin
61393             var h = 15;              // height of icon
61394             var vpBottomMargin = 45; // viewport bottom margin
61395             var vpSideMargin = 35;   // viewport side margin
61396             var buttonWidth = 44;
61397             var buttonHeight = (2 * p + h);
61398             var menuWidth = buttonWidth;
61399             var menuHeight = (2 * m) + operations.length * buttonHeight;
61400             var menuSideMargin = 10;
61401             var tooltipWidth = 200;
61402             var tooltipHeight = 200;  // a reasonable guess, real height depends on tooltip contents
61403
61404
61405             var editMenu = function (selection) {
61406                 if (!operations.length) return;
61407
61408                 selection.node().parentNode.focus();
61409
61410                 var isRTL = textDirection === 'rtl';
61411                 var viewport = context.surfaceRect();
61412
61413                 if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
61414                     // menu is going left-to-right and near right viewport edge, go left instead
61415                     isRTL = true;
61416                 } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
61417                     // menu is going right-to-left and near left viewport edge, go right instead
61418                     isRTL = false;
61419                 }
61420
61421                 offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
61422
61423                 if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
61424                     // menu is near bottom viewport edge, shift upwards
61425                     offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
61426                 }
61427
61428                 var origin = geoVecAdd(center, offset);
61429
61430                 menu = selection
61431                     .append('g')
61432                     .attr('class', 'edit-menu')
61433                     .attr('transform', 'translate(' + origin + ')')
61434                     .attr('opacity', 0);
61435
61436                 menu
61437                     .transition()
61438                     .attr('opacity', 1);
61439
61440                 menu
61441                     .append('rect')
61442                     .attr('class', 'edit-menu-background')
61443                     .attr('x', 4)
61444                     .attr('rx', 4)
61445                     .attr('ry', 4)
61446                     .attr('width', menuWidth)
61447                     .attr('height', menuHeight)
61448                     .attr('stroke-linecap', 'round');
61449
61450
61451                 var buttons = menu.selectAll('.edit-menu-item')
61452                     .data(operations);
61453
61454                 // enter
61455                 var buttonsEnter = buttons.enter()
61456                     .append('g')
61457                     .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
61458                     .attr('transform', function(d, i) {
61459                         return 'translate(' + geoVecFloor([0, m + i * buttonHeight]).join(',') + ')';
61460                     });
61461
61462                 buttonsEnter
61463                     .append('rect')
61464                     .attr('x', 4)
61465                     .attr('width', buttonWidth)
61466                     .attr('height', buttonHeight)
61467                     .on('click', click)
61468                     .on('mousedown', mousedown)
61469                     .on('mouseover', mouseover)
61470                     .on('mouseout', mouseout);
61471
61472                 buttonsEnter
61473                     .append('use')
61474                     .attr('width', '20')
61475                     .attr('height', '20')
61476                     .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
61477                     .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
61478
61479                 // update
61480                 buttons = buttonsEnter
61481                     .merge(buttons)
61482                     .classed('disabled', function(d) { return d.disabled(); });
61483
61484
61485                 tooltip = d3_select('#id-container')
61486                     .append('div')
61487                     .attr('class', 'tooltip-inner edit-menu-tooltip');
61488
61489
61490                 function click(operation) {
61491                     event.stopPropagation();
61492                     if (operation.disabled()) return;
61493                     operation();
61494                     editMenu.close();
61495                 }
61496
61497                 function mousedown() {
61498                     event.stopPropagation();  // https://github.com/openstreetmap/iD/issues/1869
61499                 }
61500
61501                 function mouseover(d, i) {
61502                     var tipX, tipY;
61503
61504                     if (!isRTL) {
61505                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
61506                     } else {
61507                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
61508                     }
61509
61510                     if (tipX + tooltipWidth > viewport.right) {
61511                         // tip is going left-to-right and near right viewport edge, go left instead
61512                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
61513                     } else if (tipX < viewport.left) {
61514                         // tip is going right-to-left and near left viewport edge, go right instead
61515                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
61516                     }
61517
61518                     tipY = viewport.top + origin[1] + (i * buttonHeight);
61519                     if (tipY + tooltipHeight > viewport.bottom) {
61520                         // tip is near bottom viewport edge, shift upwards
61521                         tipY -= tipY + tooltipHeight - viewport.bottom;
61522                     }
61523
61524                     tooltip
61525                         .style('left', tipX + 'px')
61526                         .style('top', tipY + 'px')
61527                         .style('display', 'block')
61528                         .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
61529
61530                     // update disabled again, just in case tooltip and disabled state disagree
61531                     // https://github.com/openstreetmap/iD/issues/6296#issuecomment-489259027
61532                     d3_select(this.parentNode)
61533                         .classed('disabled', d.disabled());
61534
61535                 }
61536
61537                 function mouseout() {
61538                     tooltip.style('display', 'none');
61539                 }
61540             };
61541
61542
61543             editMenu.close = function () {
61544                 if (menu) {
61545                     menu
61546                         .style('pointer-events', 'none')
61547                         .transition()
61548                         .attr('opacity', 0)
61549                         .remove();
61550                 }
61551
61552                 if (tooltip) {
61553                     tooltip.remove();
61554                 }
61555             };
61556
61557
61558             editMenu.center = function(val) {
61559                 if (!arguments.length) return center;
61560                 center = val;
61561                 return editMenu;
61562             };
61563
61564
61565             return editMenu;
61566         }
61567
61568         function uiSelectionList(context, selectedIDs) {
61569
61570             function selectEntity(entity) {
61571                 context.enter(modeSelect(context, [entity.id]));
61572             }
61573
61574
61575             function deselectEntity(entity) {
61576                 event.stopPropagation();
61577                 var index = selectedIDs.indexOf(entity.id);
61578                 if (index > -1) {
61579                     selectedIDs.splice(index, 1);
61580                 }
61581                 context.enter(modeSelect(context, selectedIDs));
61582             }
61583
61584
61585             function selectionList(selection) {
61586                 selection.classed('selection-list-pane', true);
61587
61588                 var header = selection
61589                     .append('div')
61590                     .attr('class', 'header fillL cf');
61591
61592                 header
61593                     .append('h3')
61594                     .text(t('inspector.multiselect'));
61595
61596                 var listWrap = selection
61597                     .append('div')
61598                     .attr('class', 'inspector-body');
61599
61600                 var list = listWrap
61601                     .append('div')
61602                     .attr('class', 'feature-list cf');
61603
61604
61605                 context.history()
61606                     .on('change.selectionList', function(difference) {
61607                         if (difference) drawList();
61608                     });
61609
61610                 drawList();
61611
61612
61613                 function drawList() {
61614                     var entities = selectedIDs
61615                         .map(function(id) { return context.hasEntity(id); })
61616                         .filter(function(entity) { return entity; });
61617
61618                     var items = list.selectAll('.feature-list-item')
61619                         .data(entities, osmEntity.key);
61620
61621                     items.exit()
61622                         .remove();
61623
61624                     // Enter
61625                     var enter = items.enter()
61626                         .append('div')
61627                         .attr('class', 'feature-list-item')
61628                         .on('click', selectEntity);
61629
61630                     enter
61631                         .each(function(d) {
61632                             d3_select(this).on('mouseover', function() {
61633                                 utilHighlightEntities([d.id], true, context);
61634                             });
61635                             d3_select(this).on('mouseout', function() {
61636                                 utilHighlightEntities([d.id], false, context);
61637                             });
61638                         });
61639
61640                     var label = enter
61641                         .append('button')
61642                         .attr('class', 'label');
61643
61644                     enter
61645                         .append('button')
61646                         .attr('class', 'close')
61647                         .on('click', deselectEntity)
61648                         .call(svgIcon('#iD-icon-close'));
61649
61650                     label
61651                         .append('span')
61652                         .attr('class', 'entity-geom-icon')
61653                         .call(svgIcon('', 'pre-text'));
61654
61655                     label
61656                         .append('span')
61657                         .attr('class', 'entity-type');
61658
61659                     label
61660                         .append('span')
61661                         .attr('class', 'entity-name');
61662
61663                     // Update
61664                     items = items.merge(enter);
61665
61666                     items.selectAll('.entity-geom-icon use')
61667                         .attr('href', function() {
61668                             var entity = this.parentNode.parentNode.__data__;
61669                             return '#iD-icon-' + context.geometry(entity.id);
61670                         });
61671
61672                     items.selectAll('.entity-type')
61673                         .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
61674
61675                     items.selectAll('.entity-name')
61676                         .text(function(entity) { return utilDisplayName(entity); });
61677                 }
61678             }
61679
61680             return selectionList;
61681         }
61682
61683         function uiRadialMenu(context, operations) {
61684             var menu;
61685             var center = [0, 0];
61686             var tooltip;
61687
61688
61689             var radialMenu = function(selection) {
61690                 if (!operations.length) return;
61691
61692                 selection.node().parentNode.focus();
61693
61694                 function click(operation) {
61695                     event.stopPropagation();
61696                     if (operation.disabled()) return;
61697                     operation();
61698                     radialMenu.close();
61699                 }
61700
61701                 menu = selection
61702                     .append('g')
61703                     .attr('class', 'radial-menu')
61704                     .attr('transform', 'translate(' + center + ')')
61705                     .attr('opacity', 0);
61706
61707                 menu
61708                     .transition()
61709                     .attr('opacity', 1);
61710
61711                 var r = 50;
61712                 var a = Math.PI / 4;
61713                 var a0 = -Math.PI / 4;
61714                 var a1 = a0 + (operations.length - 1) * a;
61715
61716                 menu
61717                     .append('path')
61718                     .attr('class', 'radial-menu-background')
61719                     .attr('d', 'M' + r * Math.sin(a0) + ',' +
61720                                      r * Math.cos(a0) +
61721                               ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
61722                                      (r * Math.sin(a1) + 1e-3) + ',' +
61723                                      (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
61724                     .attr('stroke-width', 50)
61725                     .attr('stroke-linecap', 'round');
61726
61727                 var button = menu.selectAll()
61728                     .data(operations)
61729                     .enter()
61730                     .append('g')
61731                     .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
61732                     .classed('disabled', function(d) { return d.disabled(); })
61733                     .attr('transform', function(d, i) {
61734                         return 'translate(' + geoVecFloor([
61735                                 r * Math.sin(a0 + i * a),
61736                                 r * Math.cos(a0 + i * a)]).join(',') + ')';
61737                     });
61738
61739                 button
61740                     .append('circle')
61741                     .attr('r', 15)
61742                     .on('click', click)
61743                     .on('mousedown', mousedown)
61744                     .on('mouseover', mouseover)
61745                     .on('mouseout', mouseout);
61746
61747                 button
61748                     .append('use')
61749                     .attr('transform', 'translate(-10,-10)')
61750                     .attr('width', '20')
61751                     .attr('height', '20')
61752                     .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
61753
61754                 tooltip = d3_select(document.body)
61755                     .append('div')
61756                     .attr('class', 'tooltip-inner radial-menu-tooltip');
61757
61758                 function mousedown() {
61759                     event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
61760                 }
61761
61762                 function mouseover(d, i) {
61763                     var rect = context.surfaceRect();
61764                     var angle = a0 + i * a;
61765                     var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
61766                     var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
61767                     var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
61768                     var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
61769
61770                     tooltip
61771                         .style('top', null)
61772                         .style('left', null)
61773                         .style('bottom', null)
61774                         .style('right', null)
61775                         .style('display', 'block')
61776                         .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
61777
61778                     if (i === 0) {
61779                         tooltip
61780                             .style('right', right)
61781                             .style('top', top);
61782                     } else if (i >= 4) {
61783                         tooltip
61784                             .style('left', left)
61785                             .style('bottom', bottom);
61786                     } else {
61787                         tooltip
61788                             .style('left', left)
61789                             .style('top', top);
61790                     }
61791                 }
61792
61793                 function mouseout() {
61794                     tooltip.style('display', 'none');
61795                 }
61796             };
61797
61798
61799             radialMenu.close = function() {
61800                 if (menu) {
61801                     menu
61802                         .style('pointer-events', 'none')
61803                         .transition()
61804                         .attr('opacity', 0)
61805                         .remove();
61806                 }
61807
61808                 if (tooltip) {
61809                     tooltip.remove();
61810                 }
61811             };
61812
61813
61814             radialMenu.center = function(_) {
61815                 if (!arguments.length) return center;
61816                 center = _;
61817                 return radialMenu;
61818             };
61819
61820
61821             return radialMenu;
61822         }
61823
61824         var _relatedParent;
61825
61826
61827         function modeSelect(context, selectedIDs) {
61828             var mode = {
61829                 id: 'select',
61830                 button: 'browse'
61831             };
61832
61833             var keybinding = utilKeybinding('select');
61834             var behaviors = [
61835                 behaviorCopy(context),
61836                 behaviorPaste(context),
61837                 behaviorBreathe(),
61838                 behaviorHover(context),
61839                 behaviorSelect(context),
61840                 behaviorLasso(context),
61841                 modeDragNode(context).restoreSelectedIDs(selectedIDs).behavior,
61842                 modeDragNote(context).behavior
61843             ];
61844             var editMenu;
61845             var _timeout = null;
61846             var _newFeature = false;
61847             var _suppressMenu = true;
61848             var _follow = false;
61849
61850
61851             var wrap = context.container()
61852                 .select('.inspector-wrap');
61853
61854
61855             function singular() {
61856                 if (selectedIDs && selectedIDs.length === 1) {
61857                     return context.hasEntity(selectedIDs[0]);
61858                 }
61859             }
61860
61861
61862             function checkSelectedIDs() {
61863                 var ids = [];
61864                 if (Array.isArray(selectedIDs)) {
61865                     ids = selectedIDs.filter(function(id) {
61866                         return context.hasEntity(id);
61867                     });
61868                 }
61869
61870                 if (ids.length) {
61871                     selectedIDs = ids;
61872                 } else {
61873                     context.enter(modeBrowse(context));
61874                 }
61875                 return !!ids.length;
61876             }
61877
61878
61879             // find the common parent ways for nextVertex, previousVertex
61880             function commonParents() {
61881                 var graph = context.graph();
61882                 var commonParents = [];
61883
61884                 for (var i = 0; i < selectedIDs.length; i++) {
61885                     var entity = context.hasEntity(selectedIDs[i]);
61886                     if (!entity || entity.geometry(graph) !== 'vertex') {
61887                         return [];  // selection includes some not vertexes
61888                     }
61889
61890                     var currParents = graph.parentWays(entity).map(function(w) { return w.id; });
61891                     if (!commonParents.length) {
61892                         commonParents = currParents;
61893                         continue;
61894                     }
61895
61896                     commonParents = utilArrayIntersection(commonParents, currParents);
61897                     if (!commonParents.length) {
61898                         return [];
61899                     }
61900                 }
61901
61902                 return commonParents;
61903             }
61904
61905
61906             function singularParent() {
61907                 var parents = commonParents();
61908                 if (!parents || parents.length === 0) {
61909                     _relatedParent = null;
61910                     return null;
61911                 }
61912
61913                 // relatedParent is used when we visit a vertex with multiple
61914                 // parents, and we want to remember which parent line we started on.
61915
61916                 if (parents.length === 1) {
61917                     _relatedParent = parents[0];  // remember this parent for later
61918                     return _relatedParent;
61919                 }
61920
61921                 if (parents.indexOf(_relatedParent) !== -1) {
61922                     return _relatedParent;   // prefer the previously seen parent
61923                 }
61924
61925                 return parents[0];
61926             }
61927
61928
61929             function closeMenu() {
61930                 if (editMenu) {
61931                     context.surface().call(editMenu.close);
61932                 }
61933             }
61934
61935
61936             function positionMenu() {
61937                 if (!editMenu) return;
61938
61939                 var entity = singular();
61940                 if (entity && context.geometry(entity.id) === 'relation') {
61941                     _suppressMenu = true;
61942                 } else {
61943                     var point = context.mouse();
61944                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
61945
61946                     if (point && geoPointInPolygon(point, viewport)) {
61947                         editMenu.center(point);
61948                     } else {
61949                         _suppressMenu = true;
61950                     }
61951                 }
61952             }
61953
61954
61955             function showMenu() {
61956                 closeMenu();
61957                 if (editMenu) {
61958                     context.surface().call(editMenu);
61959                 }
61960             }
61961
61962
61963             function toggleMenu() {
61964                 // deprecation warning - Radial Menu to be removed in iD v3
61965                 if (d3_select('.edit-menu, .radial-menu').empty()) {
61966                     positionMenu();
61967                     showMenu();
61968                 } else {
61969                     closeMenu();
61970                 }
61971             }
61972
61973
61974             mode.selectedIDs = function() {
61975                 return selectedIDs;
61976             };
61977
61978
61979             mode.zoomToSelected = function() {
61980                 var entity = singular();
61981                 if (entity) {
61982                     context.map().zoomToEase(entity);
61983                 }
61984             };
61985
61986
61987             mode.reselect = function() {
61988                 if (!checkSelectedIDs()) return;
61989
61990                 var surfaceNode = context.surface().node();
61991                 if (surfaceNode.focus) {   // FF doesn't support it
61992                     surfaceNode.focus();
61993                 }
61994
61995                 positionMenu();
61996                 if (!_suppressMenu) {
61997                     showMenu();
61998                 }
61999             };
62000
62001
62002             mode.newFeature = function(val) {
62003                 if (!arguments.length) return _newFeature;
62004                 _newFeature = val;
62005                 return mode;
62006             };
62007
62008
62009             mode.suppressMenu = function(val) {
62010                 if (!arguments.length) return _suppressMenu;
62011                 _suppressMenu = val;
62012                 return mode;
62013             };
62014
62015
62016             mode.follow = function(val) {
62017                 if (!arguments.length) return _follow;
62018                 _follow = val;
62019                 return mode;
62020             };
62021
62022
62023             mode.enter = function() {
62024                 if (!checkSelectedIDs()) return;
62025
62026                 context.features().forceVisible(selectedIDs);
62027
62028                 var operations = Object.values(Operations)
62029                     .map(function(o) { return o(selectedIDs, context); })
62030                     .filter(function(o) { return o.available() && o.id !== 'delete' && o.id !== 'downgrade'; });
62031
62032                 var downgradeOperation = operationDowngrade(selectedIDs, context);
62033                 // don't allow delete if downgrade is available
62034                 var lastOperation = !context.inIntro() && downgradeOperation.available() ? downgradeOperation : operationDelete(selectedIDs, context);
62035
62036                 // deprecation warning - Radial Menu to be removed in iD v3
62037                 var isRadialMenu = context.storage('edit-menu-style') === 'radial';
62038                 if (isRadialMenu) {
62039                     operations = operations.slice(0,7);
62040                     operations.unshift(lastOperation);
62041                 } else {
62042                     operations.push(lastOperation);
62043                 }
62044
62045                 operations.forEach(function(operation) {
62046                     if (operation.behavior) {
62047                         behaviors.push(operation.behavior);
62048                     }
62049                 });
62050
62051                 behaviors.forEach(context.install);
62052
62053                 keybinding
62054                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
62055                     .on(['[', 'pgup'], previousVertex)
62056                     .on([']', 'pgdown'], nextVertex)
62057                     .on(['{', uiCmd('⌘['), 'home'], firstVertex)
62058                     .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
62059                     .on(['\\', 'pause'], nextParent)
62060                     .on('⎋', esc, true)
62061                     .on('space', toggleMenu);
62062
62063                 d3_select(document)
62064                     .call(keybinding);
62065
62066
62067                 // deprecation warning - Radial Menu to be removed in iD v3
62068                 editMenu = isRadialMenu
62069                     ? uiRadialMenu(context, operations)
62070                     : uiEditMenu(context, operations);
62071
62072                 context.ui().sidebar
62073                     .select(singular() ? singular().id : null, _newFeature);
62074
62075                 context.history()
62076                     .on('undone.select', update)
62077                     .on('redone.select', update);
62078
62079                 context.map()
62080                     .on('move.select', closeMenu)
62081                     .on('drawn.select', selectElements);
62082
62083                 context.surface()
62084                     .on('dblclick.select', dblclick);
62085
62086
62087                 selectElements();
62088
62089                 if (selectedIDs.length > 1) {
62090                     var entities = uiSelectionList(context, selectedIDs);
62091                     context.ui().sidebar.show(entities);
62092                 }
62093
62094                 if (_follow) {
62095                     var extent = geoExtent();
62096                     var graph = context.graph();
62097                     selectedIDs.forEach(function(id) {
62098                         var entity = context.entity(id);
62099                         extent._extend(entity.extent(graph));
62100                     });
62101
62102                     var loc = extent.center();
62103                     context.map().centerEase(loc);
62104                 } else if (singular() && singular().type === 'way') {
62105                     context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
62106                 }
62107
62108                 _timeout = window.setTimeout(function() {
62109                     positionMenu();
62110                     if (!_suppressMenu) {
62111                         showMenu();
62112                     }
62113                 }, 270);  /* after any centerEase completes */
62114
62115
62116                 function update() {
62117                     closeMenu();
62118                     checkSelectedIDs();
62119                 }
62120
62121
62122                 function dblclick() {
62123                     var target = d3_select(event.target);
62124
62125                     var datum = target.datum();
62126                     var entity = datum && datum.properties && datum.properties.entity;
62127                     if (!entity) return;
62128
62129                     if (entity instanceof osmWay && target.classed('target')) {
62130                         var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
62131                         var prev = entity.nodes[choice.index - 1];
62132                         var next = entity.nodes[choice.index];
62133
62134                         context.perform(
62135                             actionAddMidpoint({ loc: choice.loc, edge: [prev, next] }, osmNode()),
62136                             t('operations.add.annotation.vertex')
62137                         );
62138
62139                         event.preventDefault();
62140                         event.stopPropagation();
62141
62142                     } else if (entity.type === 'midpoint') {
62143                         context.perform(
62144                             actionAddMidpoint({ loc: entity.loc, edge: entity.edge }, osmNode()),
62145                             t('operations.add.annotation.vertex'));
62146
62147                         event.preventDefault();
62148                         event.stopPropagation();
62149                     }
62150                 }
62151
62152
62153                 function selectElements(drawn) {
62154                     if (!checkSelectedIDs()) return;
62155
62156                     var surface = context.surface();
62157                     var entity = singular();
62158
62159                     if (entity && context.geometry(entity.id) === 'relation') {
62160                         _suppressMenu = true;
62161                         return;
62162                     }
62163
62164                     surface.selectAll('.related')
62165                         .classed('related', false);
62166
62167                     singularParent();
62168                     if (_relatedParent) {
62169                         surface.selectAll(utilEntitySelector([_relatedParent]))
62170                             .classed('related', true);
62171                     }
62172
62173                     var selection = context.surface()
62174                         .selectAll(utilEntityOrMemberSelector(selectedIDs, context.graph()));
62175
62176                     if (selection.empty()) {
62177                         // Return to browse mode if selected DOM elements have
62178                         // disappeared because the user moved them out of view..
62179                         var source = event && event.type === 'zoom' && event.sourceEvent;
62180                         if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
62181                             context.enter(modeBrowse(context));
62182                         }
62183                     } else {
62184                         selection
62185                             .classed('selected', true);
62186                     }
62187                 }
62188
62189
62190                 function esc() {
62191                     if (d3_select('.combobox').size()) return;
62192                     context.enter(modeBrowse(context));
62193                 }
62194
62195
62196                 function firstVertex() {
62197                     event.preventDefault();
62198                     var entity = singular();
62199                     var parent = singularParent();
62200                     var way;
62201
62202                     if (entity && entity.type === 'way') {
62203                         way = entity;
62204                     } else if (parent) {
62205                         way = context.entity(parent);
62206                     }
62207
62208                     if (way) {
62209                         context.enter(
62210                             modeSelect(context, [way.first()]).follow(true)
62211                         );
62212                     }
62213                 }
62214
62215
62216                 function lastVertex() {
62217                     event.preventDefault();
62218                     var entity = singular();
62219                     var parent = singularParent();
62220                     var way;
62221
62222                     if (entity && entity.type === 'way') {
62223                         way = entity;
62224                     } else if (parent) {
62225                         way = context.entity(parent);
62226                     }
62227
62228                     if (way) {
62229                         context.enter(
62230                             modeSelect(context, [way.last()]).follow(true)
62231                         );
62232                     }
62233                 }
62234
62235
62236                 function previousVertex() {
62237                     event.preventDefault();
62238                     var parent = singularParent();
62239                     if (!parent) return;
62240
62241                     var way = context.entity(parent);
62242                     var length = way.nodes.length;
62243                     var curr = way.nodes.indexOf(selectedIDs[0]);
62244                     var index = -1;
62245
62246                     if (curr > 0) {
62247                         index = curr - 1;
62248                     } else if (way.isClosed()) {
62249                         index = length - 2;
62250                     }
62251
62252                     if (index !== -1) {
62253                         context.enter(
62254                             modeSelect(context, [way.nodes[index]]).follow(true)
62255                         );
62256                     }
62257                 }
62258
62259
62260                 function nextVertex() {
62261                     event.preventDefault();
62262                     var parent = singularParent();
62263                     if (!parent) return;
62264
62265                     var way = context.entity(parent);
62266                     var length = way.nodes.length;
62267                     var curr = way.nodes.indexOf(selectedIDs[0]);
62268                     var index = -1;
62269
62270                     if (curr < length - 1) {
62271                         index = curr + 1;
62272                     } else if (way.isClosed()) {
62273                         index = 0;
62274                     }
62275
62276                     if (index !== -1) {
62277                         context.enter(
62278                             modeSelect(context, [way.nodes[index]]).follow(true)
62279                         );
62280                     }
62281                 }
62282
62283
62284                 function nextParent() {
62285                     event.preventDefault();
62286                     var parents = commonParents();
62287                     if (!parents || parents.length < 2) return;
62288
62289                     var index = parents.indexOf(_relatedParent);
62290                     if (index < 0 || index > parents.length - 2) {
62291                         _relatedParent = parents[0];
62292                     } else {
62293                         _relatedParent = parents[index + 1];
62294                     }
62295
62296                     var surface = context.surface();
62297                     surface.selectAll('.related')
62298                         .classed('related', false);
62299
62300                     if (_relatedParent) {
62301                         surface.selectAll(utilEntitySelector([_relatedParent]))
62302                             .classed('related', true);
62303                     }
62304                 }
62305             };
62306
62307
62308             mode.exit = function() {
62309                 if (_timeout) window.clearTimeout(_timeout);
62310
62311                 behaviors.forEach(context.uninstall);
62312
62313                 d3_select(document)
62314                     .call(keybinding.unbind);
62315
62316                 closeMenu();
62317                 editMenu = undefined;
62318
62319                 context.history()
62320                     .on('undone.select', null)
62321                     .on('redone.select', null);
62322
62323                 var surface = context.surface();
62324
62325                 surface
62326                     .on('dblclick.select', null);
62327
62328                 surface
62329                     .selectAll('.selected')
62330                     .classed('selected', false);
62331
62332                 surface
62333                     .selectAll('.highlighted')
62334                     .classed('highlighted', false);
62335
62336                 surface
62337                     .selectAll('.related')
62338                     .classed('related', false);
62339
62340                 context.map().on('drawn.select', null);
62341                 context.ui().sidebar.hide();
62342                 context.features().forceVisible([]);
62343
62344                 var entity = singular();
62345                 if (_newFeature && entity && entity.type === 'relation' &&
62346                     // no tags
62347                     Object.keys(entity.tags).length === 0 &&
62348                     // no parent relations
62349                     context.graph().parentRelations(entity).length === 0 &&
62350                     // no members or one member with no role
62351                     (entity.members.length === 0 || (entity.members.length === 1 && !entity.members[0].role))
62352                 ) {
62353                     // the user added this relation but didn't edit it at all, so just delete it
62354                     var deleteAction = actionDeleteRelation(entity.id, true /* don't delete untagged members */);
62355                     context.perform(deleteAction, t('operations.delete.annotation.relation'));
62356                 }
62357             };
62358
62359
62360             return mode;
62361         }
62362
62363         function uiLasso(context) {
62364             var group, polygon;
62365
62366             lasso.coordinates = [];
62367
62368             function lasso(selection) {
62369                 context.container()
62370                     .classed('lasso', true);
62371
62372                 group = selection
62373                     .append('g')
62374                     .attr('class', 'lasso hide');
62375
62376                 polygon = group
62377                     .append('path')
62378                     .attr('class', 'lasso-path');
62379
62380                 group
62381                     .call(uiToggle(true));
62382             }
62383
62384
62385             function draw() {
62386                 if (polygon) {
62387                     polygon.data([lasso.coordinates])
62388                         .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
62389                 }
62390             }
62391
62392
62393             lasso.extent = function () {
62394                 return lasso.coordinates.reduce(function(extent, point) {
62395                     return extent.extend(geoExtent(point));
62396                 }, geoExtent());
62397             };
62398
62399
62400             lasso.p = function(_) {
62401                 if (!arguments.length) return lasso;
62402                 lasso.coordinates.push(_);
62403                 draw();
62404                 return lasso;
62405             };
62406
62407
62408             lasso.close = function() {
62409                 if (group) {
62410                     group.call(uiToggle(false, function() {
62411                         d3_select(this).remove();
62412                     }));
62413                 }
62414                 context.container().classed('lasso', false);
62415             };
62416
62417
62418             return lasso;
62419         }
62420
62421         function behaviorLasso(context) {
62422
62423             var behavior = function(selection) {
62424                 var lasso;
62425
62426
62427                 function mousedown() {
62428                     var button = 0;  // left
62429                     if (event.button === button && event.shiftKey === true) {
62430                         lasso = null;
62431
62432                         d3_select(window)
62433                             .on('mousemove.lasso', mousemove)
62434                             .on('mouseup.lasso', mouseup);
62435
62436                         event.stopPropagation();
62437                     }
62438                 }
62439
62440
62441                 function mousemove() {
62442                     if (!lasso) {
62443                         lasso = uiLasso(context);
62444                         context.surface().call(lasso);
62445                     }
62446
62447                     lasso.p(context.mouse());
62448                 }
62449
62450
62451                 function normalize(a, b) {
62452                     return [
62453                         [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
62454                         [Math.max(a[0], b[0]), Math.max(a[1], b[1])]
62455                     ];
62456                 }
62457
62458
62459                 function lassoed() {
62460                     if (!lasso) return [];
62461
62462                     var graph = context.graph();
62463                     var bounds = lasso.extent().map(context.projection.invert);
62464                     var extent = geoExtent(normalize(bounds[0], bounds[1]));
62465
62466                     var intersects = context.intersects(extent).filter(function(entity) {
62467                         return entity.type === 'node' &&
62468                             geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
62469                             !context.features().isHidden(entity, graph, entity.geometry(graph));
62470                     });
62471
62472                     return intersects.map(function(entity) { return entity.id; });
62473                 }
62474
62475
62476                 function mouseup() {
62477                     d3_select(window)
62478                         .on('mousemove.lasso', null)
62479                         .on('mouseup.lasso', null);
62480
62481                     if (!lasso) return;
62482
62483                     var ids = lassoed();
62484                     lasso.close();
62485
62486                     if (ids.length) {
62487                         context.enter(modeSelect(context, ids));
62488                     }
62489                 }
62490
62491                 selection
62492                     .on('mousedown.lasso', mousedown);
62493             };
62494
62495
62496             behavior.off = function(selection) {
62497                 selection.on('mousedown.lasso', null);
62498             };
62499
62500
62501             return behavior;
62502         }
62503
62504         function modeBrowse(context) {
62505             var mode = {
62506                 button: 'browse',
62507                 id: 'browse',
62508                 title: t('modes.browse.title'),
62509                 description: t('modes.browse.description')
62510             }, sidebar;
62511
62512             var behaviors = [
62513                 behaviorPaste(context),
62514                 behaviorHover(context).on('hover', context.ui().sidebar.hover),
62515                 behaviorSelect(context),
62516                 behaviorLasso(context),
62517                 modeDragNode(context).behavior,
62518                 modeDragNote(context).behavior
62519             ];
62520
62521
62522             mode.enter = function() {
62523                 behaviors.forEach(context.install);
62524
62525                 // Get focus on the body.
62526                 if (document.activeElement && document.activeElement.blur) {
62527                     document.activeElement.blur();
62528                 }
62529
62530                 if (sidebar) {
62531                     context.ui().sidebar.show(sidebar);
62532                 } else {
62533                     context.ui().sidebar.select(null);
62534                 }
62535             };
62536
62537
62538             mode.exit = function() {
62539                 context.ui().sidebar.hover.cancel();
62540                 behaviors.forEach(context.uninstall);
62541
62542                 if (sidebar) {
62543                     context.ui().sidebar.hide();
62544                 }
62545             };
62546
62547
62548             mode.sidebar = function(_) {
62549                 if (!arguments.length) return sidebar;
62550                 sidebar = _;
62551                 return mode;
62552             };
62553
62554
62555             return mode;
62556         }
62557
62558         function behaviorAddWay(context) {
62559             var dispatch$1 = dispatch('start', 'startFromWay', 'startFromNode');
62560             var draw = behaviorDraw(context);
62561
62562             function behavior(surface) {
62563                 draw.on('click', function() { dispatch$1.apply('start', this, arguments); })
62564                     .on('clickWay', function() { dispatch$1.apply('startFromWay', this, arguments); })
62565                     .on('clickNode', function() { dispatch$1.apply('startFromNode', this, arguments); })
62566                     .on('cancel', behavior.cancel)
62567                     .on('finish', behavior.cancel);
62568
62569                 context.map()
62570                     .dblclickEnable(false);
62571
62572                 surface.call(draw);
62573             }
62574
62575
62576             behavior.off = function(surface) {
62577                 surface.call(draw.off);
62578             };
62579
62580
62581             behavior.cancel = function() {
62582                 window.setTimeout(function() {
62583                     context.map().dblclickEnable(true);
62584                 }, 1000);
62585
62586                 context.enter(modeBrowse(context));
62587             };
62588
62589
62590             behavior.tail = function(text) {
62591                 draw.tail(text);
62592                 return behavior;
62593             };
62594
62595
62596             return utilRebind(behavior, dispatch$1, 'on');
62597         }
62598
62599         function behaviorHash(context) {
62600             var s0 = null; // cached window.location.hash
62601             var lat = 90 - 1e-8; // allowable latitude range
62602
62603
62604             var parser = function(map, s) {
62605                 var q = utilStringQs(s);
62606                 var args = (q.map || '').split('/').map(Number);
62607
62608                 if (args.length < 3 || args.some(isNaN)) {
62609                     return true; // replace bogus hash
62610
62611                 } else if (s !== formatter(map).slice(1)) {   // hash has changed
62612                     var mode = context.mode();
62613                     var dist = geoSphericalDistance(map.center(), [args[2], args[1]]);
62614                     var maxdist = 500;
62615
62616                     // Don't allow the hash location to change too much while drawing
62617                     // This can happen if the user accidently hit the back button.  #3996
62618                     if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) {
62619                         context.enter(modeBrowse(context));
62620                     }
62621
62622                     map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
62623                 }
62624             };
62625
62626
62627             var formatter = function(map) {
62628                 var center = map.center();
62629                 var zoom = map.zoom();
62630                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
62631                 var q = utilObjectOmit(utilStringQs(window.location.hash.substring(1)),
62632                     ['comment', 'source', 'hashtags', 'walkthrough']
62633                 );
62634                 var newParams = {};
62635
62636                 delete q.id;
62637                 var selected = context.selectedIDs().filter(function(id) {
62638                     return !context.entity(id).isNew();
62639                 });
62640                 if (selected.length) {
62641                     newParams.id = selected.join(',');
62642                 }
62643
62644                 newParams.map = zoom.toFixed(2) +
62645                     '/' + center[1].toFixed(precision) +
62646                     '/' + center[0].toFixed(precision);
62647
62648                 return '#' + utilQsString(Object.assign(q, newParams), true);
62649             };
62650
62651
62652             function update() {
62653                 if (context.inIntro()) return;
62654                 var s1 = formatter(context.map());
62655                 if (s0 !== s1) {
62656                     window.location.replace(s0 = s1);  // don't recenter the map!
62657                 }
62658             }
62659
62660
62661             var throttledUpdate = throttle(update, 500);
62662
62663
62664             function hashchange() {
62665                 if (window.location.hash === s0) return;  // ignore spurious hashchange events
62666                 if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
62667                     update(); // replace bogus hash
62668                 }
62669             }
62670
62671
62672             function behavior() {
62673                 context.map()
62674                     .on('move.hash', throttledUpdate);
62675
62676                 context
62677                     .on('enter.hash', throttledUpdate);
62678
62679                 d3_select(window)
62680                     .on('hashchange.hash', hashchange);
62681
62682                 if (window.location.hash) {
62683                     var q = utilStringQs(window.location.hash.substring(1));
62684
62685                     if (q.id) {
62686                         context.zoomToEntity(q.id.split(',')[0], !q.map);
62687                     }
62688
62689                     // Store these here instead of updating local storage since local
62690                     // storage could be flushed if the user discards pending changes
62691                     if (q.comment)  behavior.comment = q.comment;
62692                     if (q.source)   behavior.source = q.source;
62693                     if (q.hashtags) behavior.hashtags = q.hashtags;
62694
62695                     if (q.walkthrough === 'true') {
62696                         behavior.startWalkthrough = true;
62697                     }
62698
62699                     hashchange();
62700
62701                     if (q.map) {
62702                         behavior.hadHash = true;
62703                     }
62704                 }
62705             }
62706
62707
62708             behavior.off = function() {
62709                 throttledUpdate.cancel();
62710
62711                 context.map()
62712                     .on('move.hash', null);
62713
62714                 context
62715                     .on('enter.hash', null);
62716
62717                 d3_select(window)
62718                     .on('hashchange.hash', null);
62719
62720                 window.location.hash = '';
62721             };
62722
62723
62724             return behavior;
62725         }
62726
62727         /*
62728             iD.coreDifference represents the difference between two graphs.
62729             It knows how to calculate the set of entities that were
62730             created, modified, or deleted, and also contains the logic
62731             for recursively extending a difference to the complete set
62732             of entities that will require a redraw, taking into account
62733             child and parent relationships.
62734          */
62735         function coreDifference(base, head) {
62736             var _changes = {};
62737             var _didChange = {};  // 'addition', 'deletion', 'geometry', 'properties'
62738             var _diff = {};
62739
62740             function checkEntityID(id) {
62741                 var h = head.entities[id];
62742                 var b = base.entities[id];
62743
62744                 if (h === b) return;
62745                 if (_changes[id]) return;
62746
62747                 if (!h && b) {
62748                     _changes[id] = { base: b, head: h };
62749                     _didChange.deletion = true;
62750                     return;
62751                 }
62752                 if (h && !b) {
62753                     _changes[id] = { base: b, head: h };
62754                     _didChange.addition = true;
62755                     return;
62756                 }
62757
62758                 if (h && b) {
62759                     if (h.members && b.members && !fastDeepEqual(h.members, b.members)) {
62760                         _changes[id] = { base: b, head: h };
62761                         _didChange.geometry = true;
62762                         _didChange.properties = true;
62763                         return;
62764                     }
62765                     if (h.loc && b.loc && !geoVecEqual(h.loc, b.loc)) {
62766                         _changes[id] = { base: b, head: h };
62767                         _didChange.geometry = true;
62768                     }
62769                     if (h.nodes && b.nodes && !fastDeepEqual(h.nodes, b.nodes)) {
62770                         _changes[id] = { base: b, head: h };
62771                         _didChange.geometry = true;
62772                     }
62773                     if (h.tags && b.tags && !fastDeepEqual(h.tags, b.tags)) {
62774                         _changes[id] = { base: b, head: h };
62775                         _didChange.properties = true;
62776                     }
62777                 }
62778             }
62779
62780             Object.keys(head.entities).forEach(checkEntityID);
62781             Object.keys(base.entities).forEach(checkEntityID);
62782
62783
62784             _diff.length = function length() {
62785                 return Object.keys(_changes).length;
62786             };
62787
62788
62789             _diff.changes = function changes() {
62790                 return _changes;
62791             };
62792
62793             _diff.didChange = _didChange;
62794
62795
62796             // pass true to include affected relation members
62797             _diff.extantIDs = function extantIDs(includeRelMembers) {
62798                 var result = new Set();
62799                 Object.keys(_changes).forEach(function(id) {
62800                     if (_changes[id].head) {
62801                         result.add(id);
62802                     }
62803
62804                     var h = _changes[id].head;
62805                     var b = _changes[id].base;
62806                     var entity = h || b;
62807
62808                     if (includeRelMembers && entity.type === 'relation') {
62809                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
62810                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
62811                         utilArrayUnion(mh, mb).forEach(function(memberID) {
62812                             if (head.hasEntity(memberID)) {
62813                                 result.add(memberID);
62814                             }
62815                         });
62816                     }
62817                 });
62818
62819                 return Array.from(result);
62820             };
62821
62822
62823             _diff.modified = function modified() {
62824                 var result = [];
62825                 Object.values(_changes).forEach(function(change) {
62826                     if (change.base && change.head) {
62827                         result.push(change.head);
62828                     }
62829                 });
62830                 return result;
62831             };
62832
62833
62834             _diff.created = function created() {
62835                 var result = [];
62836                 Object.values(_changes).forEach(function(change) {
62837                     if (!change.base && change.head) {
62838                         result.push(change.head);
62839                     }
62840                 });
62841                 return result;
62842             };
62843
62844
62845             _diff.deleted = function deleted() {
62846                 var result = [];
62847                 Object.values(_changes).forEach(function(change) {
62848                     if (change.base && !change.head) {
62849                         result.push(change.base);
62850                     }
62851                 });
62852                 return result;
62853             };
62854
62855
62856             _diff.summary = function summary() {
62857                 var relevant = {};
62858
62859                 var keys = Object.keys(_changes);
62860                 for (var i = 0; i < keys.length; i++) {
62861                     var change = _changes[keys[i]];
62862
62863                     if (change.head && change.head.geometry(head) !== 'vertex') {
62864                         addEntity(change.head, head, change.base ? 'modified' : 'created');
62865
62866                     } else if (change.base && change.base.geometry(base) !== 'vertex') {
62867                         addEntity(change.base, base, 'deleted');
62868
62869                     } else if (change.base && change.head) { // modified vertex
62870                         var moved    = !fastDeepEqual(change.base.loc,  change.head.loc);
62871                         var retagged = !fastDeepEqual(change.base.tags, change.head.tags);
62872
62873                         if (moved) {
62874                             addParents(change.head);
62875                         }
62876
62877                         if (retagged || (moved && change.head.hasInterestingTags())) {
62878                             addEntity(change.head, head, 'modified');
62879                         }
62880
62881                     } else if (change.head && change.head.hasInterestingTags()) { // created vertex
62882                         addEntity(change.head, head, 'created');
62883
62884                     } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
62885                         addEntity(change.base, base, 'deleted');
62886                     }
62887                 }
62888
62889                 return Object.values(relevant);
62890
62891
62892                 function addEntity(entity, graph, changeType) {
62893                     relevant[entity.id] = {
62894                         entity: entity,
62895                         graph: graph,
62896                         changeType: changeType
62897                     };
62898                 }
62899
62900                 function addParents(entity) {
62901                     var parents = head.parentWays(entity);
62902                     for (var j = parents.length - 1; j >= 0; j--) {
62903                         var parent = parents[j];
62904                         if (!(parent.id in relevant)) {
62905                             addEntity(parent, head, 'modified');
62906                         }
62907                     }
62908                 }
62909             };
62910
62911
62912             // returns complete set of entities that require a redraw
62913             //  (optionally within given `extent`)
62914             _diff.complete = function complete(extent) {
62915                 var result = {};
62916                 var id, change;
62917
62918                 for (id in _changes) {
62919                     change = _changes[id];
62920
62921                     var h = change.head;
62922                     var b = change.base;
62923                     var entity = h || b;
62924                     var i;
62925
62926                     if (extent &&
62927                         (!h || !h.intersects(extent, head)) &&
62928                         (!b || !b.intersects(extent, base)))
62929                         continue;
62930
62931                     result[id] = h;
62932
62933                     if (entity.type === 'way') {
62934                         var nh = h ? h.nodes : [];
62935                         var nb = b ? b.nodes : [];
62936                         var diff;
62937
62938                         diff = utilArrayDifference(nh, nb);
62939                         for (i = 0; i < diff.length; i++) {
62940                             result[diff[i]] = head.hasEntity(diff[i]);
62941                         }
62942
62943                         diff = utilArrayDifference(nb, nh);
62944                         for (i = 0; i < diff.length; i++) {
62945                             result[diff[i]] = head.hasEntity(diff[i]);
62946                         }
62947                     }
62948
62949                     if (entity.type === 'relation' && entity.isMultipolygon()) {
62950                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
62951                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
62952                         var ids = utilArrayUnion(mh, mb);
62953                         for (i = 0; i < ids.length; i++) {
62954                             var member = head.hasEntity(ids[i]);
62955                             if (!member) continue;   // not downloaded
62956                             if (extent && !member.intersects(extent, head)) continue;   // not visible
62957                             result[ids[i]] = member;
62958                         }
62959                     }
62960
62961                     addParents(head.parentWays(entity), result);
62962                     addParents(head.parentRelations(entity), result);
62963                 }
62964
62965                 return result;
62966
62967
62968                 function addParents(parents, result) {
62969                     for (var i = 0; i < parents.length; i++) {
62970                         var parent = parents[i];
62971                         if (parent.id in result) continue;
62972
62973                         result[parent.id] = parent;
62974                         addParents(head.parentRelations(parent), result);
62975                     }
62976                 }
62977             };
62978
62979
62980             return _diff;
62981         }
62982
62983         function coreTree(head) {
62984             var rtree = rbush_1();
62985             var bboxes = {};
62986             var tree = {};
62987
62988
62989             function entityBBox(entity) {
62990                 var bbox = entity.extent(head).bbox();
62991                 bbox.id = entity.id;
62992                 bboxes[entity.id] = bbox;
62993                 return bbox;
62994             }
62995
62996
62997             function updateParents(entity, insertions, memo) {
62998                 head.parentWays(entity).forEach(function(way) {
62999                     if (bboxes[way.id]) {
63000                         rtree.remove(bboxes[way.id]);
63001                         insertions[way.id] = way;
63002                     }
63003                     updateParents(way, insertions, memo);
63004                 });
63005
63006                 head.parentRelations(entity).forEach(function(relation) {
63007                     if (memo[entity.id]) return;
63008                     memo[entity.id] = true;
63009                     if (bboxes[relation.id]) {
63010                         rtree.remove(bboxes[relation.id]);
63011                         insertions[relation.id] = relation;
63012                     }
63013                     updateParents(relation, insertions, memo);
63014                 });
63015             }
63016
63017
63018             tree.rebase = function(entities, force) {
63019                 var insertions = {};
63020
63021                 for (var i = 0; i < entities.length; i++) {
63022                     var entity = entities[i];
63023                     if (!entity.visible) continue;
63024
63025                     if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
63026                         if (!force) {
63027                             continue;
63028                         } else if (bboxes[entity.id]) {
63029                             rtree.remove(bboxes[entity.id]);
63030                         }
63031                     }
63032
63033                     insertions[entity.id] = entity;
63034                     updateParents(entity, insertions, {});
63035                 }
63036
63037                 rtree.load(Object.values(insertions).map(entityBBox));
63038
63039                 return tree;
63040             };
63041
63042
63043             tree.intersects = function(extent, graph) {
63044                 if (graph !== head) {
63045                     var diff = coreDifference(head, graph);
63046                     var changed = diff.didChange;
63047
63048                     if (changed.addition || changed.deletion || changed.geometry) {
63049                         var insertions = {};
63050                         head = graph;
63051
63052                         if (changed.deletion) {
63053                             diff.deleted().forEach(function(entity) {
63054                                 rtree.remove(bboxes[entity.id]);
63055                                 delete bboxes[entity.id];
63056                             });
63057                         }
63058
63059                         if (changed.geometry) {
63060                             diff.modified().forEach(function(entity) {
63061                                 rtree.remove(bboxes[entity.id]);
63062                                 insertions[entity.id] = entity;
63063                                 updateParents(entity, insertions, {});
63064                             });
63065                         }
63066
63067                         if (changed.addition) {
63068                             diff.created().forEach(function(entity) {
63069                                 insertions[entity.id] = entity;
63070                             });
63071                         }
63072
63073                         rtree.load(Object.values(insertions).map(entityBBox));
63074                     }
63075                 }
63076
63077                 return rtree.search(extent.bbox())
63078                     .map(function(bbox) { return graph.entity(bbox.id); });
63079             };
63080
63081
63082             return tree;
63083         }
63084
63085         function uiModal(selection, blocking) {
63086             var keybinding = utilKeybinding('modal');
63087             var previous = selection.select('div.modal');
63088             var animate = previous.empty();
63089
63090             previous.transition()
63091                 .duration(200)
63092                 .style('opacity', 0)
63093                 .remove();
63094
63095             var shaded = selection
63096                 .append('div')
63097                 .attr('class', 'shaded')
63098                 .style('opacity', 0);
63099
63100             shaded.close = function() {
63101                 shaded
63102                     .transition()
63103                     .duration(200)
63104                     .style('opacity',0)
63105                     .remove();
63106
63107                 modal
63108                     .transition()
63109                     .duration(200)
63110                     .style('top','0px');
63111
63112                 d3_select(document)
63113                     .call(keybinding.unbind);
63114             };
63115
63116
63117             var modal = shaded
63118                 .append('div')
63119                 .attr('class', 'modal fillL');
63120
63121             if (!blocking) {
63122                 shaded.on('click.remove-modal', function() {
63123                     if (event.target === this) {
63124                         shaded.close();
63125                     }
63126                 });
63127
63128                 modal.append('button')
63129                     .attr('class', 'close')
63130                     .on('click', shaded.close)
63131                     .call(svgIcon('#iD-icon-close'));
63132
63133                 keybinding
63134                     .on('⌫', shaded.close)
63135                     .on('⎋', shaded.close);
63136
63137                 d3_select(document)
63138                     .call(keybinding);
63139             }
63140
63141             modal
63142                 .append('div')
63143                 .attr('class', 'content');
63144
63145             if (animate) {
63146                 shaded.transition().style('opacity', 1);
63147             } else {
63148                 shaded.style('opacity', 1);
63149             }
63150
63151
63152             return shaded;
63153         }
63154
63155         function uiLoading(context) {
63156             var _modalSelection = d3_select(null);
63157             var _message = '';
63158             var _blocking = false;
63159
63160
63161             var loading = function(selection) {
63162                 _modalSelection = uiModal(selection, _blocking);
63163
63164                 var loadertext = _modalSelection.select('.content')
63165                     .classed('loading-modal', true)
63166                     .append('div')
63167                     .attr('class', 'modal-section fillL');
63168
63169                 loadertext
63170                     .append('img')
63171                     .attr('class', 'loader')
63172                     .attr('src', context.imagePath('loader-white.gif'));
63173
63174                 loadertext
63175                     .append('h3')
63176                     .text(_message);
63177
63178                 _modalSelection.select('button.close')
63179                     .attr('class', 'hide');
63180
63181                 return loading;
63182             };
63183
63184
63185             loading.message = function(_) {
63186                 if (!arguments.length) return _message;
63187                 _message = _;
63188                 return loading;
63189             };
63190
63191
63192             loading.blocking = function(_) {
63193                 if (!arguments.length) return _blocking;
63194                 _blocking = _;
63195                 return loading;
63196             };
63197
63198
63199             loading.close = function() {
63200                 _modalSelection.remove();
63201             };
63202
63203
63204             return loading;
63205         }
63206
63207         function coreHistory(context) {
63208             var dispatch$1 = dispatch('change', 'merge', 'restore', 'undone', 'redone');
63209             var lock = utilSessionMutex('lock');
63210             var duration = 150;
63211             var _imageryUsed = [];
63212             var _photoOverlaysUsed = [];
63213             var _checkpoints = {};
63214             var _pausedGraph;
63215             var _stack;
63216             var _index;
63217             var _tree;
63218
63219
63220             // internal _act, accepts list of actions and eased time
63221             function _act(actions, t) {
63222                 actions = Array.prototype.slice.call(actions);
63223
63224                 var annotation;
63225                 if (typeof actions[actions.length - 1] !== 'function') {
63226                     annotation = actions.pop();
63227                 }
63228
63229                 var graph = _stack[_index].graph;
63230                 for (var i = 0; i < actions.length; i++) {
63231                     graph = actions[i](graph, t);
63232                 }
63233
63234                 return {
63235                     graph: graph,
63236                     annotation: annotation,
63237                     imageryUsed: _imageryUsed,
63238                     photoOverlaysUsed: _photoOverlaysUsed,
63239                     transform: context.projection.transform(),
63240                     selectedIDs: context.selectedIDs()
63241                 };
63242             }
63243
63244
63245             // internal _perform with eased time
63246             function _perform(args, t) {
63247                 var previous = _stack[_index].graph;
63248                 _stack = _stack.slice(0, _index + 1);
63249                 var actionResult = _act(args, t);
63250                 _stack.push(actionResult);
63251                 _index++;
63252                 return change(previous);
63253             }
63254
63255
63256             // internal _replace with eased time
63257             function _replace(args, t) {
63258                 var previous = _stack[_index].graph;
63259                 // assert(_index == _stack.length - 1)
63260                 var actionResult = _act(args, t);
63261                 _stack[_index] = actionResult;
63262                 return change(previous);
63263             }
63264
63265
63266             // internal _overwrite with eased time
63267             function _overwrite(args, t) {
63268                 var previous = _stack[_index].graph;
63269                 if (_index > 0) {
63270                     _index--;
63271                     _stack.pop();
63272                 }
63273                 _stack = _stack.slice(0, _index + 1);
63274                 var actionResult = _act(args, t);
63275                 _stack.push(actionResult);
63276                 _index++;
63277                 return change(previous);
63278             }
63279
63280
63281             // determine difference and dispatch a change event
63282             function change(previous) {
63283                 var difference = coreDifference(previous, history.graph());
63284                 if (!_pausedGraph) {
63285                     dispatch$1.call('change', this, difference);
63286                 }
63287                 return difference;
63288             }
63289
63290
63291             // iD uses namespaced keys so multiple installations do not conflict
63292             function getKey(n) {
63293                 return 'iD_' + window.location.origin + '_' + n;
63294             }
63295
63296
63297             var history = {
63298
63299                 graph: function() {
63300                     return _stack[_index].graph;
63301                 },
63302
63303
63304                 tree: function() {
63305                     return _tree;
63306                 },
63307
63308
63309                 base: function() {
63310                     return _stack[0].graph;
63311                 },
63312
63313
63314                 merge: function(entities, extent) {
63315                     var stack = _stack.map(function(state) { return state.graph; });
63316                     _stack[0].graph.rebase(entities, stack, false);
63317                     _tree.rebase(entities, false);
63318
63319                     dispatch$1.call('merge', this, entities);
63320                 },
63321
63322
63323                 perform: function() {
63324                     // complete any transition already in progress
63325                     d3_select(document).interrupt('history.perform');
63326
63327                     var transitionable = false;
63328                     var action0 = arguments[0];
63329
63330                     if (arguments.length === 1 ||
63331                         (arguments.length === 2 && (typeof arguments[1] !== 'function'))) {
63332                         transitionable = !!action0.transitionable;
63333                     }
63334
63335                     if (transitionable) {
63336                         var origArguments = arguments;
63337                         d3_select(document)
63338                             .transition('history.perform')
63339                             .duration(duration)
63340                             .ease(linear$1)
63341                             .tween('history.tween', function() {
63342                                 return function(t) {
63343                                     if (t < 1) _overwrite([action0], t);
63344                                 };
63345                             })
63346                             .on('start', function() {
63347                                 _perform([action0], 0);
63348                             })
63349                             .on('end interrupt', function() {
63350                                 _overwrite(origArguments, 1);
63351                             });
63352
63353                     } else {
63354                         return _perform(arguments);
63355                     }
63356                 },
63357
63358
63359                 replace: function() {
63360                     d3_select(document).interrupt('history.perform');
63361                     return _replace(arguments, 1);
63362                 },
63363
63364
63365                 // Same as calling pop and then perform
63366                 overwrite: function() {
63367                     d3_select(document).interrupt('history.perform');
63368                     return _overwrite(arguments, 1);
63369                 },
63370
63371
63372                 pop: function(n) {
63373                     d3_select(document).interrupt('history.perform');
63374
63375                     var previous = _stack[_index].graph;
63376                     if (isNaN(+n) || +n < 0) {
63377                         n = 1;
63378                     }
63379                     while (n-- > 0 && _index > 0) {
63380                         _index--;
63381                         _stack.pop();
63382                     }
63383                     return change(previous);
63384                 },
63385
63386
63387                 // Back to the previous annotated state or _index = 0.
63388                 undo: function() {
63389                     d3_select(document).interrupt('history.perform');
63390
63391                     var previousStack = _stack[_index];
63392                     var previous = previousStack.graph;
63393                     while (_index > 0) {
63394                         _index--;
63395                         if (_stack[_index].annotation) break;
63396                     }
63397
63398                     dispatch$1.call('undone', this, _stack[_index], previousStack);
63399                     return change(previous);
63400                 },
63401
63402
63403                 // Forward to the next annotated state.
63404                 redo: function() {
63405                     d3_select(document).interrupt('history.perform');
63406
63407                     var previousStack = _stack[_index];
63408                     var previous = previousStack.graph;
63409                     var tryIndex = _index;
63410                     while (tryIndex < _stack.length - 1) {
63411                         tryIndex++;
63412                         if (_stack[tryIndex].annotation) {
63413                             _index = tryIndex;
63414                             dispatch$1.call('redone', this, _stack[_index], previousStack);
63415                             break;
63416                         }
63417                     }
63418
63419                     return change(previous);
63420                 },
63421
63422
63423                 pauseChangeDispatch: function() {
63424                     if (!_pausedGraph) {
63425                         _pausedGraph = _stack[_index].graph;
63426                     }
63427                 },
63428
63429
63430                 resumeChangeDispatch: function() {
63431                     if (_pausedGraph) {
63432                         var previous = _pausedGraph;
63433                         _pausedGraph = null;
63434                         return change(previous);
63435                     }
63436                 },
63437
63438
63439                 undoAnnotation: function() {
63440                     var i = _index;
63441                     while (i >= 0) {
63442                         if (_stack[i].annotation) return _stack[i].annotation;
63443                         i--;
63444                     }
63445                 },
63446
63447
63448                 redoAnnotation: function() {
63449                     var i = _index + 1;
63450                     while (i <= _stack.length - 1) {
63451                         if (_stack[i].annotation) return _stack[i].annotation;
63452                         i++;
63453                     }
63454                 },
63455
63456
63457                 intersects: function(extent) {
63458                     return _tree.intersects(extent, _stack[_index].graph);
63459                 },
63460
63461
63462                 difference: function() {
63463                     var base = _stack[0].graph;
63464                     var head = _stack[_index].graph;
63465                     return coreDifference(base, head);
63466                 },
63467
63468
63469                 changes: function(action) {
63470                     var base = _stack[0].graph;
63471                     var head = _stack[_index].graph;
63472
63473                     if (action) {
63474                         head = action(head);
63475                     }
63476
63477                     var difference = coreDifference(base, head);
63478
63479                     return {
63480                         modified: difference.modified(),
63481                         created: difference.created(),
63482                         deleted: difference.deleted()
63483                     };
63484                 },
63485
63486
63487                 hasChanges: function() {
63488                     return this.difference().length() > 0;
63489                 },
63490
63491
63492                 imageryUsed: function(sources) {
63493                     if (sources) {
63494                         _imageryUsed = sources;
63495                         return history;
63496                     } else {
63497                         var s = new Set();
63498                         _stack.slice(1, _index + 1).forEach(function(state) {
63499                             state.imageryUsed.forEach(function(source) {
63500                                 if (source !== 'Custom') {
63501                                     s.add(source);
63502                                 }
63503                             });
63504                         });
63505                         return Array.from(s);
63506                     }
63507                 },
63508
63509
63510                 photoOverlaysUsed: function(sources) {
63511                     if (sources) {
63512                         _photoOverlaysUsed = sources;
63513                         return history;
63514                     } else {
63515                         var s = new Set();
63516                         _stack.slice(1, _index + 1).forEach(function(state) {
63517                             if (state.photoOverlaysUsed && Array.isArray(state.photoOverlaysUsed)) {
63518                                 state.photoOverlaysUsed.forEach(function(photoOverlay) {
63519                                     s.add(photoOverlay);
63520                                 });
63521                             }
63522                         });
63523                         return Array.from(s);
63524                     }
63525                 },
63526
63527
63528                 // save the current history state
63529                 checkpoint: function(key) {
63530                     _checkpoints[key] = {
63531                         stack: _stack,
63532                         index: _index
63533                     };
63534                     return history;
63535                 },
63536
63537
63538                 // restore history state to a given checkpoint or reset completely
63539                 reset: function(key) {
63540                     if (key !== undefined && _checkpoints.hasOwnProperty(key)) {
63541                         _stack = _checkpoints[key].stack;
63542                         _index = _checkpoints[key].index;
63543                     } else {
63544                         _stack = [{graph: coreGraph()}];
63545                         _index = 0;
63546                         _tree = coreTree(_stack[0].graph);
63547                         _checkpoints = {};
63548                     }
63549                     dispatch$1.call('change');
63550                     return history;
63551                 },
63552
63553
63554                 // `toIntroGraph()` is used to export the intro graph used by the walkthrough.
63555                 //
63556                 // To use it:
63557                 //  1. Start the walkthrough.
63558                 //  2. Get to a "free editing" tutorial step
63559                 //  3. Make your edits to the walkthrough map
63560                 //  4. In your browser dev console run:
63561                 //        `id.history().toIntroGraph()`
63562                 //  5. This outputs stringified JSON to the browser console
63563                 //  6. Copy it to `data/intro_graph.json` and prettify it in your code editor
63564                 toIntroGraph: function() {
63565                     var nextID = { n: 0, r: 0, w: 0 };
63566                     var permIDs = {};
63567                     var graph = this.graph();
63568                     var baseEntities = {};
63569
63570                     // clone base entities..
63571                     Object.values(graph.base().entities).forEach(function(entity) {
63572                         var copy = copyIntroEntity(entity);
63573                         baseEntities[copy.id] = copy;
63574                     });
63575
63576                     // replace base entities with head entities..
63577                     Object.keys(graph.entities).forEach(function(id) {
63578                         var entity = graph.entities[id];
63579                         if (entity) {
63580                             var copy = copyIntroEntity(entity);
63581                             baseEntities[copy.id] = copy;
63582                         } else {
63583                             delete baseEntities[id];
63584                         }
63585                     });
63586
63587                     // swap temporary for permanent ids..
63588                     Object.values(baseEntities).forEach(function(entity) {
63589                         if (Array.isArray(entity.nodes)) {
63590                             entity.nodes = entity.nodes.map(function(node) {
63591                                 return permIDs[node] || node;
63592                             });
63593                         }
63594                         if (Array.isArray(entity.members)) {
63595                             entity.members = entity.members.map(function(member) {
63596                                 member.id = permIDs[member.id] || member.id;
63597                                 return member;
63598                             });
63599                         }
63600                     });
63601
63602                     return JSON.stringify({ dataIntroGraph: baseEntities });
63603
63604
63605                     function copyIntroEntity(source) {
63606                         var copy = utilObjectOmit(source, ['type', 'user', 'v', 'version', 'visible']);
63607
63608                         // Note: the copy is no longer an osmEntity, so it might not have `tags`
63609                         if (copy.tags && !Object.keys(copy.tags)) {
63610                             delete copy.tags;
63611                         }
63612
63613                         if (Array.isArray(copy.loc)) {
63614                             copy.loc[0] = +copy.loc[0].toFixed(6);
63615                             copy.loc[1] = +copy.loc[1].toFixed(6);
63616                         }
63617
63618                         var match = source.id.match(/([nrw])-\d*/);  // temporary id
63619                         if (match !== null) {
63620                             var nrw = match[1];
63621                             var permID;
63622                             do { permID = nrw + (++nextID[nrw]); }
63623                             while (baseEntities.hasOwnProperty(permID));
63624
63625                             copy.id = permIDs[source.id] = permID;
63626                         }
63627                         return copy;
63628                     }
63629                 },
63630
63631
63632                 toJSON: function() {
63633                     if (!this.hasChanges()) return;
63634
63635                     var allEntities = {};
63636                     var baseEntities = {};
63637                     var base = _stack[0];
63638
63639                     var s = _stack.map(function(i) {
63640                         var modified = [];
63641                         var deleted = [];
63642
63643                         Object.keys(i.graph.entities).forEach(function(id) {
63644                             var entity = i.graph.entities[id];
63645                             if (entity) {
63646                                 var key = osmEntity.key(entity);
63647                                 allEntities[key] = entity;
63648                                 modified.push(key);
63649                             } else {
63650                                 deleted.push(id);
63651                             }
63652
63653                             // make sure that the originals of changed or deleted entities get merged
63654                             // into the base of the _stack after restoring the data from JSON.
63655                             if (id in base.graph.entities) {
63656                                 baseEntities[id] = base.graph.entities[id];
63657                             }
63658                             if (entity && entity.nodes) {
63659                                 // get originals of pre-existing child nodes
63660                                 entity.nodes.forEach(function(nodeID) {
63661                                     if (nodeID in base.graph.entities) {
63662                                         baseEntities[nodeID] = base.graph.entities[nodeID];
63663                                     }
63664                                 });
63665                             }
63666                             // get originals of parent entities too
63667                             var baseParents = base.graph._parentWays[id];
63668                             if (baseParents) {
63669                                 baseParents.forEach(function(parentID) {
63670                                     if (parentID in base.graph.entities) {
63671                                         baseEntities[parentID] = base.graph.entities[parentID];
63672                                     }
63673                                 });
63674                             }
63675                         });
63676
63677                         var x = {};
63678
63679                         if (modified.length) x.modified = modified;
63680                         if (deleted.length) x.deleted = deleted;
63681                         if (i.imageryUsed) x.imageryUsed = i.imageryUsed;
63682                         if (i.photoOverlaysUsed) x.photoOverlaysUsed = i.photoOverlaysUsed;
63683                         if (i.annotation) x.annotation = i.annotation;
63684                         if (i.transform) x.transform = i.transform;
63685                         if (i.selectedIDs) x.selectedIDs = i.selectedIDs;
63686
63687                         return x;
63688                     });
63689
63690                     return JSON.stringify({
63691                         version: 3,
63692                         entities: Object.values(allEntities),
63693                         baseEntities: Object.values(baseEntities),
63694                         stack: s,
63695                         nextIDs: osmEntity.id.next,
63696                         index: _index
63697                     });
63698                 },
63699
63700
63701                 fromJSON: function(json, loadChildNodes) {
63702                     var h = JSON.parse(json);
63703                     var loadComplete = true;
63704
63705                     osmEntity.id.next = h.nextIDs;
63706                     _index = h.index;
63707
63708                     if (h.version === 2 || h.version === 3) {
63709                         var allEntities = {};
63710
63711                         h.entities.forEach(function(entity) {
63712                             allEntities[osmEntity.key(entity)] = osmEntity(entity);
63713                         });
63714
63715                         if (h.version === 3) {
63716                             // This merges originals for changed entities into the base of
63717                             // the _stack even if the current _stack doesn't have them (for
63718                             // example when iD has been restarted in a different region)
63719                             var baseEntities = h.baseEntities.map(function(d) { return osmEntity(d); });
63720                             var stack = _stack.map(function(state) { return state.graph; });
63721                             _stack[0].graph.rebase(baseEntities, stack, true);
63722                             _tree.rebase(baseEntities, true);
63723
63724                             // When we restore a modified way, we also need to fetch any missing
63725                             // childnodes that would normally have been downloaded with it.. #2142
63726                             if (loadChildNodes) {
63727                                 var osm = context.connection();
63728                                 var baseWays = baseEntities
63729                                     .filter(function(e) { return e.type === 'way'; });
63730                                 var nodeIDs = baseWays
63731                                     .reduce(function(acc, way) { return utilArrayUnion(acc, way.nodes); }, []);
63732                                 var missing = nodeIDs
63733                                     .filter(function(n) { return !_stack[0].graph.hasEntity(n); });
63734
63735                                 if (missing.length && osm) {
63736                                     loadComplete = false;
63737                                     context.redrawEnable(false);
63738
63739                                     var loading = uiLoading(context).blocking(true);
63740                                     context.container().call(loading);
63741
63742                                     var childNodesLoaded = function(err, result) {
63743                                         if (!err) {
63744                                             var visibleGroups = utilArrayGroupBy(result.data, 'visible');
63745                                             var visibles = visibleGroups.true || [];      // alive nodes
63746                                             var invisibles = visibleGroups.false || [];   // deleted nodes
63747
63748                                             if (visibles.length) {
63749                                                 var visibleIDs = visibles.map(function(entity) { return entity.id; });
63750                                                 var stack = _stack.map(function(state) { return state.graph; });
63751                                                 missing = utilArrayDifference(missing, visibleIDs);
63752                                                 _stack[0].graph.rebase(visibles, stack, true);
63753                                                 _tree.rebase(visibles, true);
63754                                             }
63755
63756                                             // fetch older versions of nodes that were deleted..
63757                                             invisibles.forEach(function(entity) {
63758                                                 osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded);
63759                                             });
63760                                         }
63761
63762                                         if (err || !missing.length) {
63763                                             loading.close();
63764                                             context.redrawEnable(true);
63765                                             dispatch$1.call('change');
63766                                             dispatch$1.call('restore', this);
63767                                         }
63768                                     };
63769
63770                                     osm.loadMultiple(missing, childNodesLoaded);
63771                                 }
63772                             }
63773                         }
63774
63775                         _stack = h.stack.map(function(d) {
63776                             var entities = {}, entity;
63777
63778                             if (d.modified) {
63779                                 d.modified.forEach(function(key) {
63780                                     entity = allEntities[key];
63781                                     entities[entity.id] = entity;
63782                                 });
63783                             }
63784
63785                             if (d.deleted) {
63786                                 d.deleted.forEach(function(id) {
63787                                     entities[id] = undefined;
63788                                 });
63789                             }
63790
63791                             return {
63792                                 graph: coreGraph(_stack[0].graph).load(entities),
63793                                 annotation: d.annotation,
63794                                 imageryUsed: d.imageryUsed,
63795                                 photoOverlaysUsed: d.photoOverlaysUsed,
63796                                 transform: d.transform,
63797                                 selectedIDs: d.selectedIDs
63798                             };
63799                         });
63800
63801                     } else { // original version
63802                         _stack = h.stack.map(function(d) {
63803                             var entities = {};
63804
63805                             for (var i in d.entities) {
63806                                 var entity = d.entities[i];
63807                                 entities[i] = entity === 'undefined' ? undefined : osmEntity(entity);
63808                             }
63809
63810                             d.graph = coreGraph(_stack[0].graph).load(entities);
63811                             return d;
63812                         });
63813                     }
63814
63815                     var transform = _stack[_index].transform;
63816                     if (transform) {
63817                         context.map().transformEase(transform, 0);   // 0 = immediate, no easing
63818                     }
63819
63820                     if (loadComplete) {
63821                         dispatch$1.call('change');
63822                         dispatch$1.call('restore', this);
63823                     }
63824
63825                     return history;
63826                 },
63827
63828
63829                 save: function() {
63830                     if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null);
63831                     return history;
63832                 },
63833
63834
63835                 clearSaved: function() {
63836                     context.debouncedSave.cancel();
63837                     if (lock.locked()) {
63838                         context.storage(getKey('saved_history'), null);
63839
63840                         // clear the changeset metadata associated with the saved history
63841                         context.storage('comment', null);
63842                         context.storage('hashtags', null);
63843                         context.storage('source', null);
63844                     }
63845                     return history;
63846                 },
63847
63848
63849                 lock: function() {
63850                     return lock.lock();
63851                 },
63852
63853
63854                 unlock: function() {
63855                     lock.unlock();
63856                 },
63857
63858
63859                 // is iD not open in another window and it detects that
63860                 // there's a history stored in localStorage that's recoverable?
63861                 restorableChanges: function() {
63862                     return lock.locked() && !!context.storage(getKey('saved_history'));
63863                 },
63864
63865
63866                 // load history from a version stored in localStorage
63867                 restore: function() {
63868                     if (!lock.locked()) return;
63869
63870                     var json = context.storage(getKey('saved_history'));
63871                     if (json) history.fromJSON(json, true);
63872                 },
63873
63874
63875                 _getKey: getKey
63876
63877             };
63878
63879
63880             history.reset();
63881
63882             return utilRebind(history, dispatch$1, 'on');
63883         }
63884
63885         /**
63886          * Look for roads that can be connected to other roads with a short extension
63887          */
63888         function validationAlmostJunction(context) {
63889             var type = 'almost_junction';
63890
63891
63892             function isHighway(entity) {
63893                 return entity.type === 'way' &&
63894                     osmRoutableHighwayTagValues[entity.tags.highway];
63895             }
63896
63897             function isTaggedAsNotContinuing(node) {
63898                 return node.tags.noexit === 'yes' ||
63899                     node.tags.amenity === 'parking_entrance' ||
63900                     (node.tags.entrance && node.tags.entrance !== 'no');
63901             }
63902
63903
63904             var validation = function checkAlmostJunction(entity, graph) {
63905                 if (!isHighway(entity)) return [];
63906                 if (entity.isDegenerate()) return [];
63907
63908                 var tree = context.history().tree();
63909                 var issues = [];
63910
63911                 var extendableNodeInfos = findConnectableEndNodesByExtension(entity);
63912                 extendableNodeInfos.forEach(function(extendableNodeInfo) {
63913                     var node = extendableNodeInfo.node;
63914                     var edgeHighway = graph.entity(extendableNodeInfo.wid);
63915
63916                     var fixes = [new validationIssueFix({
63917                         icon: 'iD-icon-abutment',
63918                         title: t('issues.fix.connect_features.title'),
63919                         onClick: function(context) {
63920                             var endNodeId = this.issue.entityIds[1];
63921                             var endNode = context.entity(endNodeId);
63922                             var targetEdge = this.issue.data.edge;
63923                             var crossLoc = this.issue.data.cross_loc;
63924                             var edgeNodes = [context.entity(targetEdge[0]), context.entity(targetEdge[1])];
63925                             var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
63926
63927                             var annotation = t('issues.fix.connect_almost_junction.annotation');
63928                             // already a point nearby, just connect to that
63929                             if (closestNodeInfo.distance < 0.75) {
63930                                 context.perform(
63931                                     actionMergeNodes([closestNodeInfo.node.id, endNode.id], closestNodeInfo.node.loc),
63932                                     annotation
63933                                 );
63934                             // else add the end node to the edge way
63935                             } else {
63936                                 context.perform(
63937                                     actionAddMidpoint({loc: crossLoc, edge: targetEdge}, endNode),
63938                                     annotation
63939                                 );
63940                             }
63941                         }
63942                     })];
63943
63944                     if (Object.keys(node.tags).length === 0) {
63945                         // node has no tags, suggest noexit fix
63946                         fixes.push(new validationIssueFix({
63947                             icon: 'maki-barrier',
63948                             title: t('issues.fix.tag_as_disconnected.title'),
63949                             onClick: function(context) {
63950                                 var nodeID = this.issue.entityIds[1];
63951                                 context.perform(
63952                                     actionChangeTags(nodeID, { noexit: 'yes' }),
63953                                     t('issues.fix.tag_as_disconnected.annotation')
63954                                 );
63955                             }
63956                         }));
63957                     }
63958
63959                     issues.push(new validationIssue({
63960                         type: type,
63961                         severity: 'warning',
63962                         message: function(context) {
63963                             var entity1 = context.hasEntity(this.entityIds[0]);
63964                             if (this.entityIds[0] === this.entityIds[2]) {
63965                                 return entity1 ? t('issues.almost_junction.self.message', {
63966                                     feature: utilDisplayLabel(entity1, context)
63967                                 }) : '';
63968                             } else {
63969                                 var entity2 = context.hasEntity(this.entityIds[2]);
63970                                 return (entity1 && entity2) ? t('issues.almost_junction.message', {
63971                                     feature: utilDisplayLabel(entity1, context),
63972                                     feature2: utilDisplayLabel(entity2, context)
63973                                 }) : '';
63974                             }
63975                         },
63976                         reference: showReference,
63977                         entityIds: [entity.id, node.id, edgeHighway.id],
63978                         loc: extendableNodeInfo.node.loc,
63979                         hash: JSON.stringify(extendableNodeInfo.node.loc),
63980                         data: {
63981                             edge: extendableNodeInfo.edge,
63982                             cross_loc: extendableNodeInfo.cross_loc
63983                         },
63984                         fixes: fixes
63985                     }));
63986                 });
63987
63988                 return issues;
63989
63990
63991                 function showReference(selection) {
63992                     selection.selectAll('.issue-reference')
63993                         .data([0])
63994                         .enter()
63995                         .append('div')
63996                         .attr('class', 'issue-reference')
63997                         .text(t('issues.almost_junction.highway-highway.reference'));
63998                 }
63999
64000
64001                 function isExtendableCandidate(node, way) {
64002                     // can not accurately test vertices on tiles not downloaded from osm - #5938
64003                     var osm = services$1.osm;
64004                     if (osm && !osm.isDataLoaded(node.loc)) {
64005                         return false;
64006                     }
64007                     if (isTaggedAsNotContinuing(node) || graph.parentWays(node).length !== 1) {
64008                         return false;
64009                     }
64010
64011                     var occurences = 0;
64012                     for (var index in way.nodes) {
64013                         if (way.nodes[index] === node.id) {
64014                             occurences += 1;
64015                             if (occurences > 1) {
64016                                 return false;
64017                             }
64018                         }
64019                     }
64020                     return true;
64021                 }
64022
64023
64024                 function findConnectableEndNodesByExtension(way) {
64025                     var results = [];
64026                     if (way.isClosed()) return results;
64027
64028                     var testNodes;
64029                     var indices = [0, way.nodes.length - 1];
64030                     indices.forEach(function(nodeIndex) {
64031                         var nodeID = way.nodes[nodeIndex];
64032                         var node = graph.entity(nodeID);
64033
64034                         if (!isExtendableCandidate(node, way)) return;
64035
64036                         var connectionInfo = canConnectByExtend(way, nodeIndex);
64037                         if (!connectionInfo) return;
64038
64039                         testNodes = graph.childNodes(way).slice();   // shallow copy
64040                         testNodes[nodeIndex] = testNodes[nodeIndex].move(connectionInfo.cross_loc);
64041
64042                         // don't flag issue if connecting the ways would cause self-intersection
64043                         if (geoHasSelfIntersections(testNodes, nodeID)) return;
64044
64045                         results.push(connectionInfo);
64046                     });
64047
64048                     return results;
64049                 }
64050
64051                 function hasTag(tags, key) {
64052                     return tags[key] !== undefined && tags[key] !== 'no';
64053                 }
64054
64055                 function canConnectWays(way, way2) {
64056
64057                     // allow self-connections
64058                     if (way.id === way2.id) return true;
64059
64060                     // if one is bridge or tunnel, both must be bridge or tunnel
64061                     if ((hasTag(way.tags, 'bridge') || hasTag(way2.tags, 'bridge')) &&
64062                         !(hasTag(way.tags, 'bridge') && hasTag(way2.tags, 'bridge'))) return false;
64063                     if ((hasTag(way.tags, 'tunnel') || hasTag(way2.tags, 'tunnel')) &&
64064                         !(hasTag(way.tags, 'tunnel') && hasTag(way2.tags, 'tunnel'))) return false;
64065
64066                     // must have equivalent layers and levels
64067                     var layer1 = way.tags.layer || '0',
64068                         layer2 = way2.tags.layer || '0';
64069                     if (layer1 !== layer2) return false;
64070
64071                     var level1 = way.tags.level || '0',
64072                         level2 = way2.tags.level || '0';
64073                     if (level1 !== level2) return false;
64074
64075                     return true;
64076                 }
64077
64078
64079                 function canConnectByExtend(way, endNodeIdx) {
64080                     var EXTEND_TH_METERS = 5;
64081                     var tipNid = way.nodes[endNodeIdx];  // the 'tip' node for extension point
64082                     var midNid = endNodeIdx === 0 ? way.nodes[1] : way.nodes[way.nodes.length - 2];  // the other node of the edge
64083                     var tipNode = graph.entity(tipNid);
64084                     var midNode = graph.entity(midNid);
64085                     var lon = tipNode.loc[0];
64086                     var lat = tipNode.loc[1];
64087                     var lon_range = geoMetersToLon(EXTEND_TH_METERS, lat) / 2;
64088                     var lat_range = geoMetersToLat(EXTEND_TH_METERS) / 2;
64089                     var queryExtent = geoExtent([
64090                         [lon - lon_range, lat - lat_range],
64091                         [lon + lon_range, lat + lat_range]
64092                     ]);
64093
64094                     // first, extend the edge of [midNode -> tipNode] by EXTEND_TH_METERS and find the "extended tip" location
64095                     var edgeLen = geoSphericalDistance(midNode.loc, tipNode.loc);
64096                     var t = EXTEND_TH_METERS / edgeLen + 1.0;
64097                     var extTipLoc = geoVecInterp(midNode.loc, tipNode.loc, t);
64098
64099                     // then, check if the extension part [tipNode.loc -> extTipLoc] intersects any other ways
64100                     var intersected = tree.intersects(queryExtent, graph);
64101                     for (var i = 0; i < intersected.length; i++) {
64102                         var way2 = intersected[i];
64103
64104                         if (!isHighway(way2)) continue;
64105
64106                         if (!canConnectWays(way, way2)) continue;
64107
64108                         for (var j = 0; j < way2.nodes.length - 1; j++) {
64109                             var nAid = way2.nodes[j],
64110                                 nBid = way2.nodes[j + 1];
64111
64112                             if (nAid === tipNid || nBid === tipNid) continue;
64113
64114                             var nA = graph.entity(nAid),
64115                                 nB = graph.entity(nBid);
64116                             var crossLoc = geoLineIntersection([tipNode.loc, extTipLoc], [nA.loc, nB.loc]);
64117                             if (crossLoc) {
64118                                 return {
64119                                     node: tipNode,
64120                                     wid: way2.id,
64121                                     edge: [nA.id, nB.id],
64122                                     cross_loc: crossLoc
64123                                 };
64124                             }
64125                         }
64126                     }
64127                     return null;
64128                 }
64129             };
64130
64131             validation.type = type;
64132
64133             return validation;
64134         }
64135
64136         function validationCloseNodes(context) {
64137             var type = 'close_nodes';
64138
64139             var pointThresholdMeters = 0.2;
64140
64141             var defaultWayThresholdMeters = 0.2;
64142             // expect some features to be mapped with higher levels of detail
64143             var indoorThresholdMeters = 0.01;
64144             var buildingThresholdMeters = 0.05;
64145             var pathThresholdMeters = 0.1;
64146
64147             var validation = function(entity, graph) {
64148                 if (entity.type === 'node') {
64149                     return getIssuesForNode(entity);
64150                 } else if (entity.type === 'way') {
64151                     return getIssuesForWay(entity);
64152                 }
64153                 return [];
64154
64155                 function featureTypeForWay(way) {
64156
64157                     if (way.tags.boundary && way.tags.boundary !== 'no') return 'boundary';
64158                     if (way.tags.indoor && way.tags.indoor !== 'no') return 'indoor';
64159                     if ((way.tags.building && way.tags.building !== 'no') ||
64160                         (way.tags['building:part'] && way.tags['building:part'] !== 'no')) return 'building';
64161                     if (osmPathHighwayTagValues[way.tags.highway]) return 'path';
64162
64163                     var parentRelations = graph.parentRelations(way);
64164                     for (var i in parentRelations) {
64165                         var relation = parentRelations[i];
64166
64167                         if (relation.tags.type === 'boundary') return 'boundary';
64168
64169                         if (relation.isMultipolygon()) {
64170                             if (relation.tags.indoor && relation.tags.indoor !== 'no') return 'indoor';
64171                             if ((relation.tags.building && relation.tags.building !== 'no') ||
64172                                 (relation.tags['building:part'] && relation.tags['building:part'] !== 'no')) return 'building';
64173                         }
64174                     }
64175
64176                     return 'other';
64177                 }
64178
64179                 function shouldCheckWay(way) {
64180
64181                     // don't flag issues where merging would create degenerate ways
64182                     if (way.nodes.length <= 2 ||
64183                         (way.isClosed() && way.nodes.length <= 4)) return false;
64184
64185                     var featureType = featureTypeForWay(way);
64186                     if (featureType === 'boundary') return false;
64187
64188                     var bbox = way.extent(graph).bbox();
64189                     var hypotenuseMeters = geoSphericalDistance([bbox.minX, bbox.minY], [bbox.maxX, bbox.maxY]);
64190                     // don't flag close nodes in very small ways
64191                     if (hypotenuseMeters < 1.5) return false;
64192
64193                     return true;
64194                 }
64195
64196                 function getIssuesForWay(way) {
64197                     if (!shouldCheckWay(way)) return [];
64198
64199                     var issues = [],
64200                         nodes = graph.childNodes(way);
64201                     for (var i = 0; i < nodes.length - 1; i++) {
64202                         var node1 = nodes[i];
64203                         var node2 = nodes[i+1];
64204
64205                         var issue = getWayIssueIfAny(node1, node2, way);
64206                         if (issue) issues.push(issue);
64207                     }
64208                     return issues;
64209                 }
64210
64211                 function getIssuesForVertex(node, parentWays) {
64212                     var issues = [];
64213
64214                     function checkForCloseness(node1, node2, way) {
64215                         var issue = getWayIssueIfAny(node1, node2, way);
64216                         if (issue) issues.push(issue);
64217                     }
64218
64219                     for (var i = 0; i < parentWays.length; i++) {
64220                         var parentWay = parentWays[i];
64221
64222                         if (!shouldCheckWay(parentWay)) continue;
64223
64224                         var lastIndex = parentWay.nodes.length - 1;
64225                         for (var j = 0; j < parentWay.nodes.length; j++) {
64226                             if (j !== 0) {
64227                                 if (parentWay.nodes[j-1] === node.id) {
64228                                     checkForCloseness(node, graph.entity(parentWay.nodes[j]), parentWay);
64229                                 }
64230                             }
64231                             if (j !== lastIndex) {
64232                                 if (parentWay.nodes[j+1] === node.id) {
64233                                     checkForCloseness(graph.entity(parentWay.nodes[j]), node, parentWay);
64234                                 }
64235                             }
64236                         }
64237                     }
64238                     return issues;
64239                 }
64240
64241                 function getIssuesForDetachedPoint(node) {
64242
64243                     var issues = [];
64244
64245                     var lon = node.loc[0];
64246                     var lat = node.loc[1];
64247                     var lon_range = geoMetersToLon(pointThresholdMeters, lat) / 2;
64248                     var lat_range = geoMetersToLat(pointThresholdMeters) / 2;
64249                     var queryExtent = geoExtent([
64250                         [lon - lon_range, lat - lat_range],
64251                         [lon + lon_range, lat + lat_range]
64252                     ]);
64253
64254                     var intersected = context.history().tree().intersects(queryExtent, graph);
64255                     for (var j = 0; j < intersected.length; j++) {
64256                         var nearby = intersected[j];
64257
64258                         if (nearby.id === node.id) continue;
64259                         if (nearby.type !== 'node' || nearby.geometry(graph) !== 'point') continue;
64260
64261                         if (nearby.loc === node.loc ||
64262                             geoSphericalDistance(node.loc, nearby.loc) < pointThresholdMeters) {
64263
64264                             // allow very close points if the z-axis varies
64265                             var zAxisKeys = { layer: true, level: true };
64266                             var zAxisDifferentiates = false;
64267                             for (var key in zAxisKeys) {
64268                                 var nodeValue = node.tags[key] || '0';
64269                                 var nearbyValue = nearby.tags[key] || '0';
64270                                 if (nodeValue !== nearbyValue) {
64271                                     zAxisDifferentiates = true;
64272                                     break;
64273                                 }
64274                             }
64275                             if (zAxisDifferentiates) continue;
64276
64277                             issues.push(new validationIssue({
64278                                 type: type,
64279                                 severity: 'warning',
64280                                 message: function(context) {
64281                                     var entity = context.hasEntity(this.entityIds[0]),
64282                                         entity2 = context.hasEntity(this.entityIds[1]);
64283                                     return (entity && entity2) ? t('issues.close_nodes.detached.message', {
64284                                         feature: utilDisplayLabel(entity, context),
64285                                         feature2: utilDisplayLabel(entity2, context)
64286                                     }) : '';
64287                                 },
64288                                 reference: showReference,
64289                                 entityIds: [node.id, nearby.id],
64290                                 fixes: [
64291                                     new validationIssueFix({
64292                                         icon: 'iD-operation-disconnect',
64293                                         title: t('issues.fix.move_points_apart.title')
64294                                     }),
64295                                     new validationIssueFix({
64296                                         icon: 'iD-icon-layers',
64297                                         title: t('issues.fix.use_different_layers_or_levels.title')
64298                                     })
64299                                 ]
64300                             }));
64301                         }
64302                     }
64303
64304                     return issues;
64305
64306                     function showReference(selection) {
64307                         var referenceText = t('issues.close_nodes.detached.reference');
64308                         selection.selectAll('.issue-reference')
64309                             .data([0])
64310                             .enter()
64311                             .append('div')
64312                             .attr('class', 'issue-reference')
64313                             .text(referenceText);
64314                     }
64315                 }
64316
64317                 function getIssuesForNode(node) {
64318                     var parentWays = graph.parentWays(node);
64319                     if (parentWays.length) {
64320                         return getIssuesForVertex(node, parentWays);
64321                     } else {
64322                         return getIssuesForDetachedPoint(node);
64323                     }
64324                 }
64325
64326                 function getWayIssueIfAny(node1, node2, way) {
64327                     if (node1.id === node2.id ||
64328                         (node1.hasInterestingTags() && node2.hasInterestingTags())) {
64329                         return null;
64330                     }
64331
64332                     if (node1.loc !== node2.loc) {
64333
64334                         var featureType = featureTypeForWay(way);
64335                         var threshold = defaultWayThresholdMeters;
64336                         if (featureType === 'indoor') threshold = indoorThresholdMeters;
64337                         else if (featureType === 'building') threshold = buildingThresholdMeters;
64338                         else if (featureType === 'path') threshold = pathThresholdMeters;
64339
64340                         var distance = geoSphericalDistance(node1.loc, node2.loc);
64341                         if (distance > threshold) return null;
64342                     }
64343
64344                     return new validationIssue({
64345                         type: type,
64346                         severity: 'warning',
64347                         message: function(context) {
64348                             var entity = context.hasEntity(this.entityIds[0]);
64349                             return entity ? t('issues.close_nodes.message', { way: utilDisplayLabel(entity, context) }) : '';
64350                         },
64351                         reference: showReference,
64352                         entityIds: [way.id, node1.id, node2.id],
64353                         loc: node1.loc,
64354                         fixes: [
64355                             new validationIssueFix({
64356                                 icon: 'iD-icon-plus',
64357                                 title: t('issues.fix.merge_points.title'),
64358                                 onClick: function(context) {
64359                                     var entityIds = this.issue.entityIds;
64360                                     var action = actionMergeNodes([entityIds[1], entityIds[2]]);
64361                                     context.perform(action, t('issues.fix.merge_close_vertices.annotation'));
64362                                 }
64363                             }),
64364                             new validationIssueFix({
64365                                 icon: 'iD-operation-disconnect',
64366                                 title: t('issues.fix.move_points_apart.title')
64367                             })
64368                         ]
64369                     });
64370
64371                     function showReference(selection) {
64372                         var referenceText = t('issues.close_nodes.reference');
64373                         selection.selectAll('.issue-reference')
64374                             .data([0])
64375                             .enter()
64376                             .append('div')
64377                             .attr('class', 'issue-reference')
64378                             .text(referenceText);
64379                     }
64380                 }
64381
64382             };
64383
64384
64385             validation.type = type;
64386
64387             return validation;
64388         }
64389
64390         function validationCrossingWays(context) {
64391             var type = 'crossing_ways';
64392
64393             /*
64394             Avoid duplicate work by cacheing issues. The same issues live under two paths.
64395             {
64396                 w-123: {
64397                     w-456: [{issue1}, {issue2}…]
64398                 },
64399                 w-456: {
64400                     w-123: [{issue1}, {issue2}…]
64401                 }
64402             }
64403             */
64404             var _issueCache = {};
64405
64406             // returns the way or its parent relation, whichever has a useful feature type
64407             function getFeatureWithFeatureTypeTagsForWay(way, graph) {
64408                 if (getFeatureTypeForTags(way.tags) === null) {
64409                     // if the way doesn't match a feature type, check its parent relations
64410                     var parentRels = graph.parentRelations(way);
64411                     for (var i = 0; i < parentRels.length; i++) {
64412                         var rel = parentRels[i];
64413                         if (getFeatureTypeForTags(rel.tags) !== null) {
64414                             return rel;
64415                         }
64416                     }
64417                 }
64418                 return way;
64419             }
64420
64421
64422             function hasTag(tags, key) {
64423                 return tags[key] !== undefined && tags[key] !== 'no';
64424             }
64425
64426             function tagsImplyIndoors(tags) {
64427                 return hasTag(tags, 'level') || tags.highway === 'corridor';
64428             }
64429
64430             function allowsStructures(featureType) {
64431                 return allowsBridge(featureType) || allowsTunnel(featureType);
64432             }
64433             function allowsBridge(featureType) {
64434                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
64435             }
64436             function allowsTunnel(featureType) {
64437                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
64438             }
64439             function canCover(featureType) {
64440                 return featureType === 'building';
64441             }
64442
64443
64444             function getFeatureTypeForCrossingCheck(way, graph) {
64445                 var tags = getFeatureWithFeatureTypeTagsForWay(way, graph).tags;
64446                 return getFeatureTypeForTags(tags);
64447             }
64448
64449             // blacklist
64450             var ignoredBuildings = {
64451                 demolished: true, dismantled: true, proposed: true, razed: true
64452             };
64453
64454
64455             function getFeatureTypeForTags(tags) {
64456                 if (hasTag(tags, 'building') && !ignoredBuildings[tags.building]) return 'building';
64457
64458                 // don't check non-building areas
64459                 if (hasTag(tags, 'area')) return null;
64460
64461                 if (hasTag(tags, 'highway') && osmRoutableHighwayTagValues[tags.highway]) return 'highway';
64462                 if (hasTag(tags, 'railway') && osmRailwayTrackTagValues[tags.railway]) return 'railway';
64463                 if (hasTag(tags, 'waterway') && osmFlowingWaterwayTagValues[tags.waterway]) return 'waterway';
64464
64465                 return null;
64466             }
64467
64468
64469             function isLegitCrossing(way1, featureType1, way2, featureType2) {
64470                 var tags1 = way1.tags;
64471                 var tags2 = way2.tags;
64472
64473                 // assume 0 by default
64474                 var level1 = tags1.level || '0';
64475                 var level2 = tags2.level || '0';
64476
64477                 if (tagsImplyIndoors(tags1) && tagsImplyIndoors(tags2) && level1 !== level2) {
64478                     // assume features don't interact if they're indoor on different levels
64479                     return true;
64480                 }
64481
64482                 // assume 0 by default; don't use way.layer() since we account for structures here
64483                 var layer1 = tags1.layer || '0';
64484                 var layer2 = tags2.layer || '0';
64485
64486                 if (allowsBridge(featureType1) && allowsBridge(featureType2)) {
64487                     if (hasTag(tags1, 'bridge') && !hasTag(tags2, 'bridge')) return true;
64488                     if (!hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge')) return true;
64489                     // crossing bridges must use different layers
64490                     if (hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge') && layer1 !== layer2) return true;
64491                 } else if (allowsBridge(featureType1) && hasTag(tags1, 'bridge')) return true;
64492                 else if (allowsBridge(featureType2) && hasTag(tags2, 'bridge')) return true;
64493
64494                 if (allowsTunnel(featureType1) && allowsTunnel(featureType2)) {
64495                     if (hasTag(tags1, 'tunnel') && !hasTag(tags2, 'tunnel')) return true;
64496                     if (!hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel')) return true;
64497                     // crossing tunnels must use different layers
64498                     if (hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel') && layer1 !== layer2) return true;
64499                 } else if (allowsTunnel(featureType1) && hasTag(tags1, 'tunnel')) return true;
64500                 else if (allowsTunnel(featureType2) && hasTag(tags2, 'tunnel')) return true;
64501
64502                 if (canCover(featureType1) && canCover(featureType2)) {
64503                     if (hasTag(tags1, 'covered') && !hasTag(tags2, 'covered')) return true;
64504                     if (!hasTag(tags1, 'covered') && hasTag(tags2, 'covered')) return true;
64505                     // crossing covered features that can themselves cover must use different layers
64506                     if (hasTag(tags1, 'covered') && hasTag(tags2, 'covered') && layer1 !== layer2) return true;
64507                 } else if (canCover(featureType1) && hasTag(tags2, 'covered')) return true;
64508                 else if (canCover(featureType2) && hasTag(tags1, 'covered')) return true;
64509
64510                 // don't flag crossing waterways and pier/highways
64511                 if (featureType1 === 'waterway' && featureType2 === 'highway' && tags2.man_made === 'pier') return true;
64512                 if (featureType2 === 'waterway' && featureType1 === 'highway' && tags1.man_made === 'pier') return true;
64513
64514                 if (!allowsStructures(featureType1) && !allowsStructures(featureType2)) {
64515                     // if no structures are applicable, the layers must be different
64516                     if (layer1 !== layer2) return true;
64517                 }
64518                 return false;
64519             }
64520
64521
64522             // highway values for which we shouldn't recommend connecting to waterways
64523             var highwaysDisallowingFords = {
64524                 motorway: true, motorway_link: true, trunk: true, trunk_link: true,
64525                 primary: true, primary_link: true, secondary: true, secondary_link: true
64526             };
64527             var nonCrossingHighways = { track: true };
64528
64529             function tagsForConnectionNodeIfAllowed(entity1, entity2) {
64530                 var featureType1 = getFeatureTypeForTags(entity1.tags);
64531                 var featureType2 = getFeatureTypeForTags(entity2.tags);
64532                 if (featureType1 === featureType2) {
64533                     if (featureType1 === 'highway') {
64534                         var entity1IsPath = osmPathHighwayTagValues[entity1.tags.highway];
64535                         var entity2IsPath = osmPathHighwayTagValues[entity2.tags.highway];
64536                         if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) {
64537                             // one feature is a path but not both
64538
64539                             var roadFeature = entity1IsPath ? entity2 : entity1;
64540                             if (nonCrossingHighways[roadFeature.tags.highway]) {
64541                                 // don't mark path connections with certain roads as crossings
64542                                 return {};
64543                             }
64544                             var pathFeature = entity1IsPath ? entity1 : entity2;
64545                             if (['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) {
64546                                 // if the path is a crossing, match the crossing type
64547                                 return { highway: 'crossing', crossing: pathFeature.tags.crossing };
64548                             }
64549                             // don't add a `crossing` subtag to ambiguous crossings
64550                             return { highway: 'crossing' };
64551                         }
64552                         return {};
64553                     }
64554                     if (featureType1 === 'waterway') return {};
64555                     if (featureType1 === 'railway') return {};
64556
64557                 } else {
64558                     var featureTypes = [featureType1, featureType2];
64559                     if (featureTypes.indexOf('highway') !== -1) {
64560                         if (featureTypes.indexOf('railway') !== -1) {
64561                             if (osmPathHighwayTagValues[entity1.tags.highway] ||
64562                                 osmPathHighwayTagValues[entity2.tags.highway]) {
64563                                 // path-rail connections use this tag
64564                                 return { railway: 'crossing' };
64565                             } else {
64566                                 // road-rail connections use this tag
64567                                 return { railway: 'level_crossing' };
64568                             }
64569                         }
64570
64571                         if (featureTypes.indexOf('waterway') !== -1) {
64572                             // do not allow fords on structures
64573                             if (hasTag(entity1.tags, 'tunnel') && hasTag(entity2.tags, 'tunnel')) return null;
64574                             if (hasTag(entity1.tags, 'bridge') && hasTag(entity2.tags, 'bridge')) return null;
64575
64576                             if (highwaysDisallowingFords[entity1.tags.highway] ||
64577                                 highwaysDisallowingFords[entity2.tags.highway]) {
64578                                 // do not allow fords on major highways
64579                                 return null;
64580                             }
64581                             return { ford: 'yes' };
64582                         }
64583                     }
64584                 }
64585                 return null;
64586             }
64587
64588
64589             function findCrossingsByWay(way1, graph, tree) {
64590                 var edgeCrossInfos = [];
64591                 if (way1.type !== 'way') return edgeCrossInfos;
64592
64593                 var way1FeatureType = getFeatureTypeForCrossingCheck(way1, graph);
64594                 if (way1FeatureType === null) return edgeCrossInfos;
64595
64596                 var checkedSingleCrossingWays = {};
64597
64598                 // declare vars ahead of time to reduce garbage collection
64599                 var i, j, nodeIndex;
64600                 var extent;
64601                 var n1, n2, nA, nB;
64602                 var segment1, segment2;
64603                 var oneOnly;
64604                 var intersected, way2, way2FeatureType, way2Nodes;
64605                 var way1Nodes = graph.childNodes(way1);
64606                 var comparedWays = {};
64607                 for (i = 0; i < way1Nodes.length - 1; i++) {
64608                     n1 = way1Nodes[i];
64609                     n2 = way1Nodes[i + 1];
64610                     extent = geoExtent([
64611                         [
64612                             Math.min(n1.loc[0], n2.loc[0]),
64613                             Math.min(n1.loc[1], n2.loc[1])
64614                         ],
64615                         [
64616                             Math.max(n1.loc[0], n2.loc[0]),
64617                             Math.max(n1.loc[1], n2.loc[1])
64618                         ]
64619                     ]);
64620
64621                     intersected = tree.intersects(extent, graph);
64622                     for (j = 0; j < intersected.length; j++) {
64623                         way2 = intersected[j];
64624
64625                         if (way2.type !== 'way') continue;
64626
64627                         // don't check for self-intersection in this validation
64628                         if (way2.id === way1.id) continue;
64629
64630                         // skip if this way was already checked and only one issue is needed
64631                         if (checkedSingleCrossingWays[way2.id]) continue;
64632
64633                         // don't re-check previously checked features
64634                         if (_issueCache[way1.id] && _issueCache[way1.id][way2.id]) continue;
64635
64636                         // mark this way as checked even if there are no crossings
64637                         comparedWays[way2.id] = true;
64638
64639                         // only check crossing highway, waterway, building, and railway
64640                         way2FeatureType = getFeatureTypeForCrossingCheck(way2, graph);
64641                         if (way2FeatureType === null ||
64642                             isLegitCrossing(way1, way1FeatureType, way2, way2FeatureType)) {
64643                             continue;
64644                         }
64645
64646                         // create only one issue for building crossings
64647                         oneOnly = way1FeatureType === 'building' || way2FeatureType === 'building';
64648                         segment1 = [n1.loc, n2.loc];
64649
64650                         way2Nodes = graph.childNodes(way2);
64651                         for (nodeIndex = 0; nodeIndex < way2Nodes.length - 1; nodeIndex++) {
64652                             nA = way2Nodes[nodeIndex];
64653                             nB = way2Nodes[nodeIndex + 1];
64654                             if (nA.id === n1.id || nA.id === n2.id ||
64655                                 nB.id === n1.id || nB.id === n2.id) {
64656                                 // n1 or n2 is a connection node; skip
64657                                 continue;
64658                             }
64659                             segment2 = [nA.loc, nB.loc];
64660                             var point = geoLineIntersection(segment1, segment2);
64661                             if (point) {
64662                                 edgeCrossInfos.push({
64663                                     ways: [way1, way2],
64664                                     featureTypes: [way1FeatureType, way2FeatureType],
64665                                     edges: [[n1.id, n2.id], [nA.id, nB.id]],
64666                                     crossPoint: point
64667                                 });
64668                                 if (oneOnly) {
64669                                     checkedSingleCrossingWays[way2.id] = true;
64670                                     break;
64671                                 }
64672                             }
64673                         }
64674                     }
64675                 }
64676                 for (var way2ID in comparedWays) {
64677                     if (!_issueCache[way1.id]) _issueCache[way1.id] = {};
64678                     if (!_issueCache[way1.id][way2ID]) _issueCache[way1.id][way2ID] = [];
64679                     if (!_issueCache[way2ID]) _issueCache[way2ID] = {};
64680                     if (!_issueCache[way2ID][way1.id]) _issueCache[way2ID][way1.id] = [];
64681                 }
64682                 return edgeCrossInfos;
64683             }
64684
64685
64686             function waysToCheck(entity, graph) {
64687                 if (!getFeatureTypeForTags(entity.tags)) {
64688                     return [];
64689                 }
64690                 if (entity.type === 'way') {
64691                     return [entity];
64692                 } else if (entity.type === 'relation' &&
64693                     entity.isMultipolygon() &&
64694                     // only check multipolygons if they are buildings
64695                     hasTag(entity.tags, 'building')) {
64696                     return entity.members.reduce(function(array, member) {
64697                         if (member.type === 'way' &&
64698                             //(member.role === 'outer' || member.role === 'inner') &&
64699                             graph.hasEntity(member.id)) {
64700                             var entity = graph.entity(member.id);
64701                             array.push(entity);
64702                         }
64703                         return array;
64704                     }, []);
64705                 }
64706                 return [];
64707             }
64708
64709
64710             var validation = function checkCrossingWays(entity, graph) {
64711
64712                 var tree = context.history().tree();
64713
64714                 var ways = waysToCheck(entity, graph);
64715
64716                 var issues = [];
64717                 // declare these here to reduce garbage collection
64718                 var wayIndex, crossingIndex, key, crossings, crossing, issue;
64719                 for (wayIndex in ways) {
64720                     var way = ways[wayIndex];
64721                     crossings = findCrossingsByWay(way, graph, tree);
64722                     for (crossingIndex in crossings) {
64723                         crossing = crossings[crossingIndex];
64724                         var way2 = crossing.ways[1];
64725                         issue = createIssue(crossing, graph);
64726                         // cache the issues for each way
64727                         _issueCache[way.id][way2.id].push(issue);
64728                         _issueCache[way2.id][way.id].push(issue);
64729                     }
64730                     for (key in _issueCache[way.id]) {
64731                         issues = issues.concat(_issueCache[way.id][key]);
64732                     }
64733                 }
64734                 return issues;
64735             };
64736
64737
64738             function createIssue(crossing, graph) {
64739
64740                 // use the entities with the tags that define the feature type
64741                 var entities = crossing.ways.sort(function(entity1, entity2) {
64742                     var type1 = getFeatureTypeForCrossingCheck(entity1, graph);
64743                     var type2 = getFeatureTypeForCrossingCheck(entity2, graph);
64744                     if (type1 === type2) {
64745                         return utilDisplayLabel(entity1, context) > utilDisplayLabel(entity2, context);
64746                     } else if (type1 === 'waterway') {
64747                         return true;
64748                     } else if (type2 === 'waterway') {
64749                         return false;
64750                     }
64751                     return type1 < type2;
64752                 });
64753                 entities = entities.map(function(way) {
64754                     return getFeatureWithFeatureTypeTagsForWay(way, graph);
64755                 });
64756
64757                 var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
64758
64759                 var featureType1 = crossing.featureTypes[0];
64760                 var featureType2 = crossing.featureTypes[1];
64761
64762                 var isCrossingIndoors = tagsImplyIndoors(entities[0].tags) && tagsImplyIndoors(entities[1].tags);
64763                 var isCrossingTunnels = allowsTunnel(featureType1) && hasTag(entities[0].tags, 'tunnel') &&
64764                                         allowsTunnel(featureType2) && hasTag(entities[1].tags, 'tunnel');
64765                 var isCrossingBridges = allowsBridge(featureType1) && hasTag(entities[0].tags, 'bridge') &&
64766                                         allowsBridge(featureType2) && hasTag(entities[1].tags, 'bridge');
64767
64768                 var crossingTypeID;
64769
64770                 if (isCrossingIndoors) {
64771                     crossingTypeID = 'indoor-indoor';
64772                 } else if (isCrossingTunnels) {
64773                     crossingTypeID = 'tunnel-tunnel';
64774                 } else if (isCrossingBridges) {
64775                     crossingTypeID = 'bridge-bridge';
64776                 } else {
64777                     crossingTypeID = crossing.featureTypes.sort().join('-');
64778                 }
64779                 if (connectionTags && (isCrossingIndoors || isCrossingTunnels || isCrossingBridges)) {
64780                     crossingTypeID += '_connectable';
64781                 }
64782
64783                 var fixes = [];
64784                 if (connectionTags) {
64785                     fixes.push(makeConnectWaysFix(connectionTags));
64786                 }
64787
64788                 var useFixIcon = 'iD-icon-layers';
64789                 var useFixID;
64790                 if (isCrossingIndoors) {
64791                     useFixID = 'use_different_levels';
64792                 } else if (isCrossingTunnels || isCrossingBridges) {
64793                     useFixID = 'use_different_layers';
64794                 // don't recommend bridges for waterways even though they're okay
64795                 } else if ((allowsBridge(featureType1) && featureType1 !== 'waterway') ||
64796                         (allowsBridge(featureType2) && featureType2 !== 'waterway')) {
64797                     useFixID = 'use_bridge_or_tunnel';
64798                     useFixIcon = 'maki-bridge';
64799                 } else if (allowsTunnel(featureType1) || allowsTunnel(featureType2)) {
64800                     useFixID = 'use_tunnel';
64801                 } else {
64802                     useFixID = 'use_different_layers';
64803                 }
64804                 if (useFixID === 'use_different_layers') {
64805                     fixes.push(makeChangeLayerFix('higher'));
64806                     fixes.push(makeChangeLayerFix('lower'));
64807                 } else {
64808                     fixes.push(new validationIssueFix({
64809                         icon: useFixIcon,
64810                         title: t('issues.fix.' + useFixID + '.title')
64811                     }));
64812                 }
64813                 fixes.push(new validationIssueFix({
64814                     icon: 'iD-operation-move',
64815                     title: t('issues.fix.reposition_features.title')
64816                 }));
64817
64818                 return new validationIssue({
64819                     type: type,
64820                     severity: 'warning',
64821                     message: function(context) {
64822                         var entity1 = context.hasEntity(this.entityIds[0]),
64823                             entity2 = context.hasEntity(this.entityIds[1]);
64824                         return (entity1 && entity2) ? t('issues.crossing_ways.message', {
64825                             feature: utilDisplayLabel(entity1, context),
64826                             feature2: utilDisplayLabel(entity2, context)
64827                         }) : '';
64828                     },
64829                     reference: showReference,
64830                     entityIds: entities.map(function(entity) {
64831                         return entity.id;
64832                     }),
64833                     data: {
64834                         edges: crossing.edges,
64835                         connectionTags: connectionTags
64836                     },
64837                     // differentiate based on the loc since two ways can cross multiple times
64838                     hash: JSON.stringify(crossing.crossPoint) +
64839                         // if the edges change then so does the fix
64840                         JSON.stringify(crossing.edges) +
64841                         // ensure the correct connection tags are added in the fix
64842                         JSON.stringify(connectionTags),
64843                     loc: crossing.crossPoint,
64844                     fixes: fixes
64845                 });
64846
64847                 function showReference(selection) {
64848                     selection.selectAll('.issue-reference')
64849                         .data([0])
64850                         .enter()
64851                         .append('div')
64852                         .attr('class', 'issue-reference')
64853                         .text(t('issues.crossing_ways.' + crossingTypeID + '.reference'));
64854                 }
64855             }
64856
64857             function makeConnectWaysFix(connectionTags) {
64858
64859                 var fixTitleID = 'connect_features';
64860                 if (connectionTags.ford) {
64861                     fixTitleID = 'connect_using_ford';
64862                 }
64863
64864                 return new validationIssueFix({
64865                     icon: 'iD-icon-crossing',
64866                     title: t('issues.fix.' + fixTitleID + '.title'),
64867                     onClick: function(context) {
64868                         var loc = this.issue.loc;
64869                         var connectionTags = this.issue.data.connectionTags;
64870                         var edges = this.issue.data.edges;
64871
64872                         context.perform(
64873                             function actionConnectCrossingWays(graph) {
64874                                 // create the new node for the points
64875                                 var node = osmNode({ loc: loc, tags: connectionTags });
64876                                 graph = graph.replace(node);
64877
64878                                 var nodesToMerge = [node.id];
64879                                 var mergeThresholdInMeters = 0.75;
64880
64881                                 edges.forEach(function(edge) {
64882                                     var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
64883                                     var closestNodeInfo = geoSphericalClosestNode(edgeNodes, loc);
64884                                     // if there is already a point nearby, use that
64885                                     if (closestNodeInfo.distance < mergeThresholdInMeters) {
64886                                         nodesToMerge.push(closestNodeInfo.node.id);
64887                                     // else add the new node to the way
64888                                     } else {
64889                                         graph = actionAddMidpoint({loc: loc, edge: edge}, node)(graph);
64890                                     }
64891                                 });
64892
64893                                 if (nodesToMerge.length > 1) {
64894                                     // if we're using nearby nodes, merge them with the new node
64895                                     graph = actionMergeNodes(nodesToMerge, loc)(graph);
64896                                 }
64897
64898                                 return graph;
64899                             },
64900                             t('issues.fix.connect_crossing_features.annotation')
64901                         );
64902                     }
64903                 });
64904             }
64905
64906             function makeChangeLayerFix(higherOrLower) {
64907                 return new validationIssueFix({
64908                     icon: 'iD-icon-' + (higherOrLower === 'higher' ? 'up' : 'down'),
64909                     title: t('issues.fix.tag_this_as_' + higherOrLower + '.title'),
64910                     onClick: function(context) {
64911
64912                         var mode = context.mode();
64913                         if (!mode || mode.id !== 'select') return;
64914
64915                         var selectedIDs = mode.selectedIDs();
64916                         if (selectedIDs.length !== 1) return;
64917
64918                         var selectedID = selectedIDs[0];
64919                         if (!this.issue.entityIds.some(function(entityId) {
64920                             return entityId === selectedID;
64921                         })) return;
64922
64923                         var entity = context.hasEntity(selectedID);
64924                         if (!entity) return;
64925
64926                         var tags = Object.assign({}, entity.tags);   // shallow copy
64927                         var layer = tags.layer && Number(tags.layer);
64928                         if (layer && !isNaN(layer)) {
64929                             if (higherOrLower === 'higher') {
64930                                 layer += 1;
64931                             } else {
64932                                 layer -= 1;
64933                             }
64934                         } else {
64935                             if (higherOrLower === 'higher') {
64936                                 layer = 1;
64937                             } else {
64938                                 layer = -1;
64939                             }
64940                         }
64941                         tags.layer = layer;
64942                         context.perform(
64943                             actionChangeTags(entity.id, tags),
64944                             t('operations.change_tags.annotation')
64945                         );
64946                     }
64947                 });
64948             }
64949
64950             validation.reset = function() {
64951                 _issueCache = {};
64952             };
64953
64954             validation.type = type;
64955
64956             return validation;
64957         }
64958
64959         function validationDisconnectedWay() {
64960             var type = 'disconnected_way';
64961
64962             function isTaggedAsHighway(entity) {
64963                 return osmRoutableHighwayTagValues[entity.tags.highway];
64964             }
64965
64966             var validation = function checkDisconnectedWay(entity, graph) {
64967
64968                 var routingIslandWays = routingIslandForEntity(entity);
64969                 if (!routingIslandWays) return [];
64970
64971                 var fixes = [];
64972
64973                 var isSingle = routingIslandWays.size === 1;
64974
64975                 if (isSingle) {
64976
64977                     if (entity.type === 'way' && !entity.isClosed()) {
64978                         var firstID = entity.first();
64979                         var lastID = entity.last();
64980
64981                         var first = graph.entity(firstID);
64982                         if (first.tags.noexit !== 'yes') {
64983                             fixes.push(new validationIssueFix({
64984                                 icon: 'iD-operation-continue-left',
64985                                 title: t('issues.fix.continue_from_start.title'),
64986                                 entityIds: [firstID],
64987                                 onClick: function(context) {
64988                                     var wayId = this.issue.entityIds[0];
64989                                     var way = context.entity(wayId);
64990                                     var vertexId = this.entityIds[0];
64991                                     var vertex = context.entity(vertexId);
64992                                     continueDrawing(way, vertex, context);
64993                                 }
64994                             }));
64995                         }
64996                         var last = graph.entity(lastID);
64997                         if (last.tags.noexit !== 'yes') {
64998                             fixes.push(new validationIssueFix({
64999                                 icon: 'iD-operation-continue',
65000                                 title: t('issues.fix.continue_from_end.title'),
65001                                 entityIds: [lastID],
65002                                 onClick: function(context) {
65003                                     var wayId = this.issue.entityIds[0];
65004                                     var way = context.entity(wayId);
65005                                     var vertexId = this.entityIds[0];
65006                                     var vertex = context.entity(vertexId);
65007                                     continueDrawing(way, vertex, context);
65008                                 }
65009                             }));
65010                         }
65011
65012                     } else {
65013                         fixes.push(new validationIssueFix({
65014                             title: t('issues.fix.connect_feature.title')
65015                         }));
65016                     }
65017
65018                     fixes.push(new validationIssueFix({
65019                         icon: 'iD-operation-delete',
65020                         title: t('issues.fix.delete_feature.title'),
65021                         entityIds: [entity.id],
65022                         onClick: function(context) {
65023                             var id = this.issue.entityIds[0];
65024                             var operation = operationDelete([id], context);
65025                             if (!operation.disabled()) {
65026                                 operation();
65027                             }
65028                         }
65029                     }));
65030                 } else {
65031                     fixes.push(new validationIssueFix({
65032                         title: t('issues.fix.connect_features.title')
65033                     }));
65034                 }
65035
65036                 return [new validationIssue({
65037                     type: type,
65038                     severity: 'warning',
65039                     message: function(context) {
65040                         if (this.entityIds.length === 1) {
65041                             var entity = context.hasEntity(this.entityIds[0]);
65042                             return entity ? t('issues.disconnected_way.highway.message', { highway: utilDisplayLabel(entity, context) }) : '';
65043                         }
65044                         return t('issues.disconnected_way.routable.message.multiple', { count: this.entityIds.length.toString() });
65045                     },
65046                     reference: showReference,
65047                     entityIds: Array.from(routingIslandWays).map(function(way) { return way.id; }),
65048                     fixes: fixes
65049                 })];
65050
65051
65052                 function showReference(selection) {
65053                     selection.selectAll('.issue-reference')
65054                         .data([0])
65055                         .enter()
65056                         .append('div')
65057                         .attr('class', 'issue-reference')
65058                         .text(t('issues.disconnected_way.routable.reference'));
65059                 }
65060
65061                 function routingIslandForEntity(entity) {
65062
65063                     if (entity.type !== 'way') return null;
65064
65065                     if (!isRoutableWay(entity, true)) return null;
65066
65067                     var waysToCheck = [entity];
65068                     var routingIsland = new Set([entity]);
65069
65070                     while (waysToCheck.length) {
65071                         var wayToCheck = waysToCheck.pop();
65072                         var childNodes = graph.childNodes(wayToCheck);
65073                         for (var i in childNodes) {
65074                             var vertex = childNodes[i];
65075                             var result = isConnectedVertex(vertex, routingIsland);
65076                             if (result === true) {
65077                                 return null;
65078                             } else if (result === false) {
65079                                 continue;
65080                             }
65081                             result.forEach(function(connectedWay) {
65082                                 if (!routingIsland.has(connectedWay)) {
65083                                     routingIsland.add(connectedWay);
65084                                     waysToCheck.push(connectedWay);
65085                                 }
65086                             });
65087                         }
65088                     }
65089
65090                     return routingIsland;
65091                 }
65092
65093                 function isConnectedVertex(vertex, routingIslandWays) {
65094                     // assume ways overlapping unloaded tiles are connected to the wider road network  - #5938
65095                     var osm = services$1.osm;
65096                     if (osm && !osm.isDataLoaded(vertex.loc)) return true;
65097
65098                     // entrances are considered connected
65099                     if (vertex.tags.entrance &&
65100                         vertex.tags.entrance !== 'no') return true;
65101                     if (vertex.tags.amenity === 'parking_entrance') return true;
65102
65103                     var parentsWays = graph.parentWays(vertex);
65104
65105                     // standalone vertex
65106                     if (parentsWays.length === 1) return false;
65107
65108                     var connectedWays = new Set();
65109
65110                     for (var i in parentsWays) {
65111                         var parentWay = parentsWays[i];
65112
65113                         // ignore any way we've already accounted for
65114                         if (routingIslandWays.has(parentWay)) continue;
65115
65116                         if (isRoutableWay(parentWay, false)) connectedWays.add(parentWay);
65117                     }
65118
65119                     if (connectedWays.size) return connectedWays;
65120
65121                     return false;
65122                 }
65123
65124                 function isRoutableWay(way, ignoreInnerWays) {
65125                     if (isTaggedAsHighway(way) || way.tags.route === 'ferry') return true;
65126
65127                     return graph.parentRelations(way).some(function(parentRelation) {
65128                         if (parentRelation.tags.type === 'route' &&
65129                             parentRelation.tags.route === 'ferry') return true;
65130
65131                         if (parentRelation.isMultipolygon() &&
65132                             isTaggedAsHighway(parentRelation) &&
65133                             (!ignoreInnerWays || parentRelation.memberById(way.id).role !== 'inner')) return true;
65134                     });
65135                 }
65136
65137             };
65138
65139             function continueDrawing(way, vertex, context) {
65140                 // make sure the vertex is actually visible and editable
65141                 var map = context.map();
65142                 if (!map.editable() || !map.trimmedExtent().contains(vertex.loc)) {
65143                     map.zoomToEase(vertex);
65144                 }
65145
65146                 context.enter(
65147                     modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
65148                 );
65149             }
65150
65151
65152             validation.type = type;
65153
65154             return validation;
65155         }
65156
65157         function validationFixmeTag(context) {
65158             var type = 'fixme_tag';
65159
65160
65161             var validation = function checkFixmeTag(entity) {
65162
65163                 if (!entity.tags.fixme) return [];
65164
65165                 // don't flag fixmes on features added by the user
65166                 if (entity.version === undefined) return [];
65167
65168                 if (entity.v !== undefined) {
65169                     var baseEntity = context.history().base().hasEntity(entity.id);
65170                     // don't flag fixmes added by the user on existing features
65171                     if (!baseEntity || !baseEntity.tags.fixme) return [];
65172                 }
65173
65174                 return [new validationIssue({
65175                     type: type,
65176                     severity: 'warning',
65177                     message: function(context) {
65178                         var entity = context.hasEntity(this.entityIds[0]);
65179                         return entity ? t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }) : '';
65180                     },
65181                     reference: showReference,
65182                     entityIds: [entity.id]
65183                 })];
65184
65185                 function showReference(selection) {
65186                     selection.selectAll('.issue-reference')
65187                         .data([0])
65188                         .enter()
65189                         .append('div')
65190                         .attr('class', 'issue-reference')
65191                         .text(t('issues.fixme_tag.reference'));
65192                 }
65193             };
65194
65195             validation.type = type;
65196
65197             return validation;
65198         }
65199
65200         var brands = {"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":"en:ABN AMRO",name:"ABN AMRO",official_name:"ABN AMRO Bank N.V."}},"amenity/bank|ABSA":{countryCodes:["za"],tags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","brand:wikipedia":"en:ABSA Group Limited",name:"ABSA"}},"amenity/bank|AIB":{countryCodes:["gb","ie"],tags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB",official_name:"Allied Irish Banks"}},"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|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|Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড":{countryCodes:["bd"],tags:{amenity:"bank",brand:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","name:en":"Agrani Bank Limited"}},"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":"en: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":"en:Argenta (bank)",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":"en: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":{tags:{amenity:"bank",brand:"BAC","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de América Central",name:"BAC",official_name:"Banco de America Central"}},"amenity/bank|BAC Credomatic":{tags:{amenity:"bank",brand:"BAC Credomatic",name:"BAC Credomatic"}},"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|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"}},"amenity/bank|BCR~(Banca Comercială Română)":{countryCodes:["ro"],matchNames:["banca comercială română"],tags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q806149","brand:wikipedia":"en: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|BDO":{countryCodes:["ph"],tags:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO",official_name:"Banco de Oro","official_name:en":"Gold Bank","official_name:es":"Banco de Oro"}},"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":"en:Banque Internationale Arabe de Tunisie",name:"BIAT"}},"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"}},"amenity/bank|BMCE Bank":{countryCodes:["ma"],matchNames:["bmce"],tags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"}},"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:["BMO","BMO Bank of Montreal","BMO Harris Bank","Bank of Montreal","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:["BMO","BMO Bank of Montreal","BMO Banque de Montréal","Bank of Montreal","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|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":"en: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|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|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":{matchNames:["bpi family savings bank"],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 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 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 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:en":"Sabadell Bank","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:en":"Sabadell Bank","name:es":"Banco Sabadell"}},"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",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 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 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 Nationale~(Canada)":{countryCodes:["ca"],matchNames:["banque nationale du canada","national bank of canada"],tags:{amenity:"bank",brand:"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"Banque Nationale"}},"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",name:"Banque de France"}},"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 Desjardins":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"}},"amenity/bank|Caisse d'Épargne":{tags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"en:Groupe Caisse d'Épargne",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|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":{tags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"en: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"],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"],tags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"}},"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|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"],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|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",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ú~(Brazil)"],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ú~(Chile)"],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|Janata Bank Limited জনতা ব্যাংক লিমিটেড":{tags:{amenity:"bank",brand:"জনতা ব্যাংক লিমিটেড","brand:bn":"জনতা ব্যাংক লিমিটেড","brand:en":"Janata Bank Limited","brand:wikidata":"Q3347028","brand:wikipedia":"en:Janata Bank",name:"জনতা ব্যাংক লিমিটেড","name:bn":"জনতা ব্যাংক লিমিটেড","name:en":"Janata Bank Limited"}},"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|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|LCL":{countryCodes:["fr"],tags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"en: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":{nomatch:["amenity/fuel|Liberty"],tags:{amenity:"bank",brand:"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)"],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)"],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","brand:wikipedia":"es:MiBanco",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|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|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"],tags:{amenity:"bank",brand:"National Bank","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank",official_name:"National Bank of 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":{countryCodes:["us"],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"}},"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|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|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|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",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 Río",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|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|Sonali Bank":{countryCodes:["bd"],matchNames:["sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"Sonali Bank"}},"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|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|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":{tags:{amenity:"bank",brand:"Taytay sa Kauswagan",name:"Taytay sa Kauswagan"}},"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"}},"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":{tags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q18636687","brand:wikipedia":"en:United Industrial Bank",name:"UIB"}},"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"],tags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q64825157",name:"United Bank"}},"amenity/bank|United Bank~(WestVirginia)":{countryCodes:["us"],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|VietinBank":{tags:{amenity:"bank",brand:"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|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":{tags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"}},"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":{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",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:"Πειραιώς",name:"Πειραιώς"}},"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"}},"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","ua"],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:["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","ua"],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:["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:["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|ПриватБанк":{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","ua"],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"],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:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval","name:ru":"Райффайзен Банк Аваль"}},"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|Хаан банк":{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"],tags:{amenity:"bank",brand:"অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"অগ্রণী ব্যাংক লিমিটেড","name:en":"Agrani Bank"}},"amenity/bank|গ্রামীণ ব্যাংক":{countryCodes:["bd"],tags:{amenity:"bank",brand:"গ্রামীণ ব্যাংক","brand:wikidata":"Q188567","brand:wikipedia":"en:Grameen Bank",name:"গ্রামীণ ব্যাংক","name:en":"Grameen Bank"}},"amenity/bank|জনতা ব্যাংক লিমিটেড":{tags:{amenity:"bank",brand:"জনতা ব্যাংক লিমিটেড",name:"জনতা ব্যাংক লিমিটেড"}},"amenity/bank|বাংলাদেশ কৃষি ব্যাংক":{countryCodes:["bd"],tags:{amenity:"bank",brand:"বাংলাদেশ কৃষি ব্যাংক","brand:wikidata":"Q16345932","brand:wikipedia":"en:Bangladesh Krishi Bank",name:"বাংলাদেশ কৃষি ব্যাংক","name:en":"Bangladesh Krishi Bank"}},"amenity/bank|সোনালী ব্যাংক লিমিটেড":{countryCodes:["bd"],tags:{amenity:"bank",brand:"সোনালী ব্যাংক লিমিটেড",name:"সোনালী ব্যাংক লিমিটেড"}},"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":"Sumitomo Mitsui Banking Corporation","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"}},"amenity/bank|三菱東京UFJ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三菱東京UFJ銀行","brand:en":"MUFG Bank","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"}},"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:"上海浦东发展银行",name:"上海浦东发展银行"}},"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:"中信银行"}},"amenity/bank|中国光大银行":{tags:{amenity:"bank",brand:"中国光大银行",name:"中国光大银行"}},"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:"兴业银行",name:"兴业银行"}},"amenity/bank|农业银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"}},"amenity/bank|北京银行":{tags:{amenity:"bank",brand:"北京银行",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|千葉銀行":{tags:{amenity:"bank",brand:"千葉銀行",name:"千葉銀行"}},"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:["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|安泰商業銀行":{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:wikidata":"Q6297774","brand:wikipedia":"en:Joyo Bank",name:"常陽銀行"}},"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":"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:["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|華南商業銀行":{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:["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:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank"}},"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/bicycle_rental|nextbike":{countryCodes:["at","de"],tags:{amenity:"bicycle_rental",brand:"nextbike","brand:wikidata":"Q2351279","brand:wikipedia":"de:Nextbike",name:"nextbike"}},"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/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 Espresso Bar":{countryCodes:["ca","kz","ro","ua","us"],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 Coffe Shop":{countryCodes:["jp"],tags:{alt_name:"ベックス・コーヒーショップ",amenity:"cafe",brand:"Beck's Coffe Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:Beck's Coffe Shop",cuisine:"coffee_shop",name:"Beck's Coffe 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|Bonafide":{countryCodes:["ar","cl"],tags:{amenity:"cafe",brand:"Bonafide","brand:wikidata":"Q62122746",cuisine:"coffee_shop",name:"Bonafide",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|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":{countryCodes:["ca","nz","us"],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",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|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:website":"http://www.franscafe.com.br","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",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|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|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|Mikel":{countryCodes:["gr"],tags:{amenity:"cafe",brand:"Mikel",cuisine:"coffee_shop",name:"Mikel",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|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|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|Берёзка":{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"],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|Смак":{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|Транзит":{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|Шоколадница":{countryCodes:["ru"],matchNames:["шоколад"],tags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Chocolate",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":"スターバックス",takeaway:"yes"}},"amenity/cafe|スターバックスコーヒー":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"スターバックスコーヒー","brand:ja":"スターバックスコーヒー",cuisine:"coffee_shop",name:"スターバックスコーヒー","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:["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|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/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|Circuit électrique":{countryCodes:["ca"],tags:{amenity:"charging_station",brand:"Circuit électrique","brand:wikidata":"Q64969699",name:"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|FLO":{countryCodes:["ca"],nomatch:["shop/shoes|FLO"],tags:{amenity:"charging_station",brand:"FLO","brand:wikidata":"Q64971203",name:"FLO"}},"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 Ladestation":{countryCodes:["at","ch","de","fr","it"],tags:{amenity:"charging_station",brand:"bike-energy Ladestation",name:"bike-energy Ladestation"}},"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|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|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|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|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|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|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 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|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/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",name:"Dentix"}},"amenity/dentist|Folktandvården":{tags:{amenity:"dentist",brand:"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",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|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|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|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",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 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|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:["gb","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|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:website":"https://www.cinnabon.com/","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|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"],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|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 Pizza":{tags:{amenity:"fast_food",brand:"Domino's Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza",short_name:"Domino's",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",name:"Dunkin' Donuts",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|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|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|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|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 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|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|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|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|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|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|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",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|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|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|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|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|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|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|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",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|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 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 King":{tags:{amenity:"fast_food",brand:"Pizza King",cuisine:"pizza",name:"Pizza King",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|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|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:["gb","us"],tags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",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|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|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|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":"en:St-Hubert",cuisine:"chicken;barbecue",name:"St-Hubert Express",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|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|TCBY":{tags:{amenity:"fast_food",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",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 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:"sausage",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":{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|Valentine":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Valentine","brand:wikidata":"Q3553635","brand:wikipedia":"en:Groupe Valentine Inc.",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|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|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|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|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|Γρηγόρης":{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 Пицца":{tags:{amenity:"fast_food",brand:"Домино'c Пицца","brand:en":"Domino's Pizza","brand:ru":"Домино'c Пицца","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c Пицца","name:en":"Domino's Pizza","name:ru":"Домино'c Пицца",short_name:"Домино'c","short_name:en":"Domino's","short_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"],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:{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"],tags:{amenity:"fast_food",brand:"ドミノ・ピザ","brand:en":"Domino's Pizza","brand:ja":"ドミノ・ピザ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ・ピザ","name:en":"Domino's Pizza","name:ja":"ドミノ・ピザ",short_name:"ドミノ","short_name:en":"Domino's","short_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|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|ANP":{countryCodes:["ru","ua"],tags:{amenity:"fuel",brand:"ANP",name:"ANP"}},"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|Api":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"}},"amenity/fuel|Aral":{countryCodes:["de"],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":{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|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|Bangchak":{countryCodes:["th"],tags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"}},"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"}},"amenity/fuel|CEPSA":{countryCodes:["es","pt"],tags:{amenity:"fuel",brand:"CEPSA","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"CEPSA"}},"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:{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|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|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|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|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|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|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"],tags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"}},"amenity/fuel|Giant":{nomatch:["shop/bicycle|Giant"],tags:{amenity:"fuel",brand:"Giant",name:"Giant"}},"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|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":{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|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|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|Kroger":{matchNames:["kroger fuel"],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|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|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|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|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",name:"Olerex"}},"amenity/fuel|Opet":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"}},"amenity/fuel|Orlen":{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:["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|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|QuikTrip":{matchNames:["qt"],nomatch:["shop/convenience|QuikTrip"],tags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip"}},"amenity/fuel|RaceTrac":{nomatch:["shop/convenience|RaceTrac"],tags:{amenity:"fuel",brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac"}},"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|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":{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|Sonic":{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|Tesco":{nomatch:["shop/convenience|Tesco"],tags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",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|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":{matchNames:["united petroleum"],nomatch:["amenity/bank|United Bank"],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|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|din-X":{countryCodes:["se"],tags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"}},"amenity/fuel|uSmile":{tags:{amenity:"fuel",brand:"uSmile",name:"uSmile"}},"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|บางจาก":{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"],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|台灣中油":{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/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/ice_cream|33 пингвина":{tags:{amenity:"ice_cream",brand:"33 пингвина",name:"33 пингвина"}},"amenity/ice_cream|Amorino":{tags:{amenity:"ice_cream",brand:"Amorino",name:"Amorino"}},"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|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|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|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|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",max_age:"12",min_age:"6 weeks",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|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/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":"en: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"],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:{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":"en:Jean Coutu Group",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|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|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":"en:Shoppers Drug Mart",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":"en:Uniprix",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"],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|Φαρμακειο":{countryCodes:["cy","gr"],tags:{amenity:"pharmacy",brand:"Φαρμακειο",healthcare:"pharmacy",name:"Φαρμακειο"}},"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|Бажаємо здоров'я":{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:["ua"],tags:{amenity:"pharmacy",brand:"Фармація",healthcare:"pharmacy",name:"Фармація"}},"amenity/pharmacy|Фармленд":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармленд",healthcare:"pharmacy",name:"Фармленд"}},"amenity/pharmacy|Центральная аптека":{countryCodes:["by","kz","ru","ua","uz"],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: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:ja":"クスリのアオキ",healthcare:"pharmacy",name:"クスリのアオキ","name:ja":"クスリのアオキ"}},"amenity/pharmacy|クリエイト":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"}},"amenity/pharmacy|クリエイトSD":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイトSD","brand:ja":"クリエイトSD",healthcare:"pharmacy",name:"クリエイトSD","name:ja":"クリエイトSD"}},"amenity/pharmacy|ココカラファイン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ココカラファイン","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"}},"amenity/pharmacy|サツドラ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"サツドラ","brand:ja":"サツドラ",healthcare:"pharmacy",name:"サツドラ","name:ja":"サツドラ"}},"amenity/pharmacy|サンドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"サンドラッグ","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:ja":"ドラッグセイムス",healthcare:"pharmacy",name:"ドラッグセイムス","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_box|Canada Post":{countryCodes:["ca"],nomatch:["amenity/post_office|Canada Post"],tags:{amenity:"post_box",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"}},"amenity/post_box|Deutsche Post":{countryCodes:["de"],matchNames:["deutsche post ag"],nomatch:["amenity/post_office|Deutsche Post"],tags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"}},"amenity/post_box|FedEx":{nomatch:["amenity/post_office|FedEx"],tags:{amenity:"post_box",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"}},"amenity/post_box|UPS":{countryCodes:["ca","us"],nomatch:["amenity/post_office|The UPS Store"],tags:{amenity:"post_box",brand:"UPS","brand:wikidata":"Q155026","brand:wikipedia":"en:United Parcel Service",name:"UPS"}},"amenity/post_box|USPS":{countryCodes:["us"],nomatch:["amenity/post_office|USPS"],tags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS"}},"amenity/post_box|差出箱13号":{countryCodes:["jp"],tags:{amenity:"post_box",brand:"差出箱13号",name:"差出箱13号"}},"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":{countryCodes:["mo"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",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":{tags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"}},"amenity/post_office|OCA":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"OCA",name:"OCA"}},"amenity/post_office|Oficina de Correos":{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|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|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|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","ua"],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:["us"],matchNames:["mathnasium learning center"],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/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/public_bookcase|Offener Bücherschrank":{countryCodes:["at","ch","de"],tags:{amenity:"public_bookcase",brand:"Offener Bücherschrank",name:"Offener Bücherschrank"}},"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|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|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 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|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|Brio":{countryCodes:["us"],tags:{alt_name:"Brio Tuscan Grille",amenity:"restaurant",brand:"Brio","brand:wikidata":"Q64055835",cuisine:"italian",name:"Brio"}},"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|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|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|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|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"],tags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",name:"Chuck E. Cheese'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|Cora":{countryCodes:["ca"],nomatch:["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|Dave & Buster's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Dave & Buster's","brand:wikidata":"Q5228205","brand:wikipedia":"en:Dave & Buster's",cuisine:"american",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|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|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|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:"italian",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"}},"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|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|Hooters":{tags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"}},"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|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|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|Kudu":{countryCodes:["sa"],tags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"}},"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|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|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|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|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|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 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|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 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|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|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|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|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":"en:St-Hubert",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|Steak 'n Shake":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"}},"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|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 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|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|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|Wingstop":{countryCodes:["mx","us"],tags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"}},"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|Zizzi":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"}},"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"],tags:{amenity:"restaurant",brand:"Евразия","brand:wikidata":"Q66088028",cuisine:"international",name:"Евразия"}},"amenity/restaurant|Планета Суши":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"}},"amenity/restaurant|Тануки":{countryCodes:["kz","ru","ua"],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":"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: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|바다횟집":{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|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|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/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|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|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/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"}},"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/clinic|ZoomCare":{countryCodes:["us"],matchTags:["amenity/clinic"],tags:{amenity:"clinic",brand:"ZoomCare","brand:wikidata":"Q64120374","brand:wikipedia":"en:ZoomCare",healthcare:"clinic",name:"ZoomCare",urgent_care:"yes"}},"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/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|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:["uk"],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":{tags:{brand:"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|カーブス":{countryCodes:["jp"],tags:{brand:"カーブス","brand:ja":"カーブス",leisure:"fitness_centre",name:"カーブス","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"}},"leisure/tanning_salon|Palm Beach Tan":{countryCodes:["us"],matchTags:["shop/beauty","shop/solarium"],tags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",leisure:"tanning_salon",name:"Palm Beach Tan",shop:"beauty"}},"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/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",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|Job Centre Plus":{countryCodes:["gb"],tags:{brand:"Job Centre Plus",name:"Job Centre 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/estate_agent|Bairstow Eves":{countryCodes:["gb"],tags:{brand:"Bairstow Eves",name:"Bairstow Eves",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",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|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|Hamptons International Lettings":{countryCodes:["gb"],tags:{brand:"Hamptons International Lettings",name:"Hamptons International Lettings",office:"estate_agent"}},"office/estate_agent|Hamptons International Sales":{countryCodes:["gb"],tags:{brand:"Hamptons International Sales",name:"Hamptons International Sales",office:"estate_agent"}},"office/estate_agent|Laforêt":{countryCodes:["fr"],tags:{brand:"Laforêt",name:"Laforêt",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|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",name:"Ray White",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|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|Tecnocasa":{countryCodes:["es","it","pl"],tags:{brand:"Tecnocasa",name:"Tecnocasa",office:"estate_agent"}},"office/estate_agent|Your Move":{countryCodes:["gb"],tags:{brand:"Your Move",name:"Your Move",office:"estate_agent"}},"office/estate_agent|アパマンショップ":{countryCodes:["jp"],tags:{brand:"アパマンショップ","brand:ja":"アパマンショップ",name:"アパマンショップ","name:ja":"アパマンショップ",office:"estate_agent"}},"office/estate_agent|エイブル":{countryCodes:["jp"],tags:{brand:"エイブル","brand:ja":"エイブル",name:"エイブル","name:ja":"エイブル",office:"estate_agent"}},"office/estate_agent|ピタットハウス":{countryCodes:["jp"],tags:{brand:"ピタットハウス","brand:ja":"ピタットハウス",name:"ピタットハウス","name:ja":"ピタットハウス",office:"estate_agent"}},"office/estate_agent|信義房屋":{countryCodes:["tw"],tags:{brand:"信義房屋",name:"信義房屋",office:"estate_agent"}},"office/estate_agent|永慶房屋":{countryCodes:["tw"],tags:{brand:"永慶房屋",name:"永慶房屋",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/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|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|CUK Ubezpieczenia":{countryCodes:["pl"],tags:{brand:"CUK Ubezpieczenia",name:"CUK Ubezpieczenia",office:"insurance"}},"office/insurance|DAK":{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|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",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":{tags:{brand:"Harmonie Mutuelle",name:"Harmonie Mutuelle",office:"insurance"}},"office/insurance|Knappschaft":{countryCodes:["de"],tags:{brand:"Knappschaft","brand:wikidata":"Q1313465","brand:wikipedia":"de:Knappschaft (Krankenkasse)",name:"Knappschaft",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|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|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|Wüstenrot":{countryCodes:["at","cz","de","sk"],tags:{brand:"Wüstenrot",name:"Wüstenrot",office:"insurance"}},"office/insurance|Zurich":{tags:{brand:"Zurich",name:"Zurich",office:"insurance"}},"office/insurance|Белгосстрах":{countryCodes:["by"],tags:{brand:"Белгосстрах",name:"Белгосстрах",office:"insurance"}},"office/insurance|Ингосстрах":{countryCodes:["ru"],tags:{brand:"Ингосстрах",name:"Ингосстрах",office:"insurance"}},"office/insurance|РЕСО-Гарантия":{countryCodes:["ru"],tags:{brand:"РЕСО-Гарантия",name:"РЕСО-Гарантия",office:"insurance"}},"office/insurance|Росгосстрах":{countryCodes:["ru"],tags:{brand:"Росгосстрах","brand:wikidata":"Q4397745","brand:wikipedia":"en:Rosgosstrakh",name:"Росгосстрах",office:"insurance"}},"office/insurance|Согласие":{countryCodes:["ru"],tags:{brand:"Согласие",name:"Согласие",office:"insurance"}},"office/insurance|بیمه ایران":{countryCodes:["ir"],tags:{brand:"بیمه ایران",name:"بیمه ایران",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:["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"}},"office/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",office:"telecommunication"}},"office/telecommunication|Ooredoo":{tags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",office:"telecommunication"}},"office/telecommunication|Дом.ru":{tags:{brand:"Дом.ru",name:"Дом.ru",office:"telecommunication"}},"office/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",office:"telecommunication"}},"office/telecommunication|Магазин lifecell":{tags:{brand:"Магазин lifecell",name:"Магазин lifecell",office:"telecommunication"}},"office/telecommunication|Ростелеком":{countryCodes:["ru"],tags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",office:"telecommunication"}},"office/telecommunication|Укртелеком":{countryCodes:["ua"],tags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",office:"telecommunication"}},"office/telecommunication|مخابرات":{tags:{brand:"مخابرات",name:"مخابرات",office:"telecommunication"}},"office/telecommunication|中華電信":{countryCodes:["tw"],tags:{brand:"中華電信",name:"中華電信",office:"telecommunication"}},"office/telecommunication|台灣大哥大":{countryCodes:["tw"],tags:{brand:"台灣大哥大",name:"台灣大哥大",office:"telecommunication"}},"office/telecommunication|遠傳電信":{countryCodes:["tw"],tags:{brand:"遠傳電信",name:"遠傳電信",office:"telecommunication"}},"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","ua"],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|西松屋":{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"],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|Awiteks":{countryCodes:["pl"],tags:{brand:"Awiteks","brand:wikidata":"Q62054190",name:"Awiteks",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|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|Banette":{tags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",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|Breadtop":{countryCodes:["au"],tags:{brand:"Breadtop","brand:wikidata":"Q4959217","brand:wikipedia":"en:Breadtop",cuisine:"chinese",name:"Breadtop",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":{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|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"],tags:{brand:"Fischer",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|Greggs":{countryCodes:["gb"],tags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",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|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|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"],matchNames:["schäfer"],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|サンジェルマン":{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|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"],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|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"],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":{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|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|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 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|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:"大苑子",name:"大苑子",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|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/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:el":"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:el":"ΟΠΑΠ","name:en":"OPAP",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|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|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|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|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|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":"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|文教堂":{countryCodes:["jp"],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":"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|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/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"],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"],tags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"}},"shop/car_parts|Brezan":{countryCodes:["be","nl"],tags:{brand:"Brezan",name:"Brezan",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|Lubrificantes":{countryCodes:["ao"],tags:{brand:"Lubrificantes",name:"Lubrificantes",shop:"car_parts"}},"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"],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|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|イエローハット":{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":"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|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|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|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 Auocentre","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"],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|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|Pit Stop":{tags:{brand:"Pit Stop",name:"Pit Stop",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":"en: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"],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|Taller Mecanico":{tags:{brand:"Taller Mecanico",name:"Taller Mecanico",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|Ö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|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|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|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|Land Rover":{tags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",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|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":"en: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"],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/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|Kirkens Korshær Genbrug":{tags:{brand:"Kirkens Korshær Genbrug",name:"Kirkens Korshær Genbrug",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|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|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/chemist|101 Drogerie":{countryCodes:["sk"],tags:{brand:"101 Drogerie",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|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|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"],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|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|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:["de","us"],tags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",clothes:"men;women",name:"Abercrombie & Fitch",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|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|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|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",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",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|Bonita":{countryCodes:["at","ch","de","nl"],tags:{brand:"Bonita","brand:wikidata":"Q892598","brand:wikipedia":"de:Bonita (Unternehmen)",name:"Bonita",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|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"],tags:{brand:"Buckle","brand:wikidata":"Q4983306","brand:wikipedia":"en:Buckle (clothing retailer)",clothes:"men;women",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:["fi","no","se"],tags:{brand:"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|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","de"],tags:{brand:"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|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"],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|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":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",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|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|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|Free People":{countryCodes:["ca","us"],tags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"}},"shop/clothes|Fussl":{countryCodes:["at","de"],tags:{brand:"Fussl",name:"Fussl",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"],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",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|Humana":{tags:{brand:"Humana",name:"Humana",shop:"clothes"}},"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|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:["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|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|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",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|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"],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|MS Mode":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"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|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",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",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|Miss Etam":{countryCodes:["nl"],tags:{brand:"Miss Etam",name:"Miss Etam",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|Motherhood Maternity":{countryCodes:["ca","us"],tags:{brand:"Motherhood Maternity",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|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",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|Pepco":{countryCodes:["cz","hu","pl","ro","sk"],matchTags:["shop/variety_store"],tags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"}},"shop/clothes|Pepe Jeans":{tags:{brand:"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",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|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|Quicksilver":{tags:{brand:"Quicksilver",name:"Quicksilver",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|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|Ross":{countryCodes:["us"],tags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",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|Sandro":{tags:{brand:"Sandro",name:"Sandro",shop:"clothes"}},"shop/clothes|Scotch & Soda":{tags:{brand:"Scotch & Soda",name:"Scotch & Soda",shop:"clothes"}},"shop/clothes|Sela":{countryCodes:["kg","ru"],tags:{brand:"Sela","brand:wikidata":"Q62075111",name:"Sela",shop:"clothes"}},"shop/clothes|Select":{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|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|TJ Maxx":{countryCodes:["us"],tags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"}},"shop/clothes|TK Maxx":{tags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",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|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 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:["tr"],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|Topshop":{tags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",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|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|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",name:"Wallis",shop:"clothes"}},"shop/clothes|Warehouse":{countryCodes:["gb"],tags:{brand:"Warehouse","brand:wikidata":"Q28135370",name:"Warehouse",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|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|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|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","ua"],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:ja":"コナカ",name:"コナカ","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 World":{countryCodes:["gb"],tags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",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|シャトレーゼ":{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:"不二家",name:"不二家",shop:"confectionery"}},"shop/convenience|1st Stop":{countryCodes:["us"],matchNames:["first stop"],tags:{brand:"1st Stop","brand:wikidata":"Q65706152",name:"1st Stop",shop:"convenience"}},"shop/convenience|24 часа":{countryCodes:["by","kz","ru","ua"],tags:{brand:"24 часа",name:"24 часа",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|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:["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":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn 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|Alfamart":{countryCodes:["id"],tags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"id:Alfamart",name:"Alfamart",shop:"convenience"}},"shop/convenience|Alfamidi":{countryCodes:["id"],tags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"}},"shop/convenience|Almacén":{countryCodes:["ar","bo","cl","pe","uy"],tags:{brand:"Almacén",name:"Almacén",shop:"convenience"}},"shop/convenience|AmeriStop":{countryCodes:["us"],tags:{brand:"AmeriStop","brand:wikidata":"Q66048258",name:"AmeriStop",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":{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",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|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":{nomatch:["shop/supermarket|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"convenience"}},"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|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":{nomatch:["amenity/fuel|Irving"],tags:{brand:"Irving",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|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|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"],tags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland) ",name:"Londis",shop:"convenience"}},"shop/convenience|Londis~(UK)":{countryCodes:["gb"],tags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"convenience"}},"shop/convenience|M&S Simply Food":{nomatch:["shop/supermarket|M&S Simply Food"],tags:{brand:"M&S Simply Food",name:"M&S Simply Food",shop:"convenience"}},"shop/convenience|Mac's":{nomatch:["amenity/fuel|Mac's"],tags:{brand:"Mac's",name:"Mac's",shop:"convenience"}},"shop/convenience|Mace":{countryCodes:["gb","ie"],tags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",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":{nomatch:["amenity/fuel|Maverik"],tags:{brand:"Maverik",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":{tags:{brand:"Mercator",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|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",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","us"],tags:{brand:"One Stop",name:"One Stop",shop:"convenience"}},"shop/convenience|Orlen":{nomatch:["amenity/fuel|Orlen"],tags:{brand:"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|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"],tags:{brand:"QuickChek",name:"QuickChek",shop:"convenience"}},"shop/convenience|QuikTrip":{nomatch:["amenity/fuel|QuikTrip"],tags:{brand:"QuikTrip",name:"QuikTrip",shop:"convenience"}},"shop/convenience|Rabat":{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|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"],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":{nomatch:["amenity/fuel|Stewart's"],tags:{brand:"Stewart's",name:"Stewart's",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",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"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"convenience"}},"shop/convenience|Tesco Express":{nomatch:["amenity/fuel|Tesco"],tags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"convenience"}},"shop/convenience|Tesco Lotus Express":{countryCodes:["th"],tags:{brand:"Tesco Lotus Express",name:"Tesco Lotus Express",shop:"convenience"}},"shop/convenience|Texaco":{nomatch:["amenity/fuel|Texaco"],tags:{brand:"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",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",name:"Ultramar",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",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|Volg":{tags:{brand:"Volg",name:"Volg",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 便利店","昆仑好"],matchTags:["amenity/fuel","shop/supermarket"],tags:{brand:"uSmile 昆仑好","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"uSmile 便利店",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"uSmile 便利店",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|АТБ":{tags:{brand:"АТБ",name:"АТБ",shop:"convenience"}},"shop/convenience|Абсолют":{tags:{brand:"Абсолют",name:"Абсолют",shop:"convenience"}},"shop/convenience|Авоська":{tags:{brand:"Авоська",name:"Авоська",shop:"convenience"}},"shop/convenience|Агрокомплекс":{countryCodes:["ru"],tags:{brand:"Агрокомплекс",name:"Агрокомплекс",shop:"convenience"}},"shop/convenience|Альянс":{countryCodes:["by","kg","ru","ua"],tags:{brand:"Альянс",name:"Альянс",shop:"convenience"}},"shop/convenience|Апельсин":{countryCodes:["by","kg","kz","ru","ua"],tags:{brand:"Апельсин",name:"Апельсин",shop:"convenience"}},"shop/convenience|Ассорти":{countryCodes:["by","kg","kz","ru","ua"],tags:{brand:"Ассорти",name:"Ассорти",shop:"convenience"}},"shop/convenience|Березка":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Березка",name:"Березка",shop:"convenience"}},"shop/convenience|Береке":{countryCodes:["kg","kz"],tags:{brand:"Береке",name:"Береке",shop:"convenience"}},"shop/convenience|Берёзка":{tags:{brand:"Берёзка",name:"Берёзка",shop:"convenience"}},"shop/convenience|Бриз":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Бриз",name:"Бриз",shop:"convenience"}},"shop/convenience|Валентина":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Валентина",name:"Валентина",shop:"convenience"}},"shop/convenience|Везунчик":{countryCodes:["ru","ua"],tags:{brand:"Везунчик",name:"Везунчик",shop:"convenience"}},"shop/convenience|Верный":{tags:{brand:"Верный",name:"Верный",shop:"convenience"}},"shop/convenience|ВкусВилл":{countryCodes:["ru"],tags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",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|Гермес":{tags:{brand:"Гермес",name:"Гермес",shop:"convenience"}},"shop/convenience|Гроздь":{nomatch:["shop/supermarketk|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"}},"shop/convenience|Гурман":{tags:{brand:"Гурман",name:"Гурман",shop:"convenience"}},"shop/convenience|Диана":{tags:{brand:"Диана",name:"Диана",shop:"convenience"}},"shop/convenience|Доброном":{countryCodes:["by","ru"],tags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"}},"shop/convenience|Добрый":{countryCodes:["by","ru"],tags:{brand:"Добрый",name:"Добрый",shop:"convenience"}},"shop/convenience|Дружба":{countryCodes:["by","ru","ua"],tags:{brand:"Дружба",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"],tags:{brand:"Евроопт Минимаркет","brand:wikidata":"Q65455911",name:"Евроопт Минимаркет",shop:"convenience"}},"shop/convenience|Елена":{tags:{brand:"Елена",name:"Елена",shop:"convenience"}},"shop/convenience|Ермолино":{countryCodes:["ru","ua"],tags:{brand:"Ермолино",name:"Ермолино",shop:"convenience"}},"shop/convenience|КазМунайГаз":{nomatch:["amenity/fuel|КазМунайГаз"],tags:{brand:"КазМунайГаз",name:"КазМунайГаз",shop:"convenience"}},"shop/convenience|Каштан":{countryCodes:["by","ru","ua"],tags:{brand:"Каштан",name:"Каштан",shop:"convenience"}},"shop/convenience|Квартал":{tags:{brand:"Квартал",name:"Квартал",shop:"convenience"}},"shop/convenience|Кооператор":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Кооператор",name:"Кооператор",shop:"convenience"}},"shop/convenience|Копеечка":{countryCodes:["by","ru","ua"],tags:{brand:"Копеечка",name:"Копеечка",shop:"convenience"}},"shop/convenience|Копейка":{countryCodes:["by","ru","ua"],tags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"}},"shop/convenience|Корзинка":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Корзинка",name:"Корзинка",shop:"convenience"}},"shop/convenience|Кулинария":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Кулинария",name:"Кулинария",shop:"convenience"}},"shop/convenience|Лакомка":{tags:{brand:"Лакомка",name:"Лакомка",shop:"convenience"}},"shop/convenience|Лукойл":{nomatch:["amenity/fuel|Лукойл"],tags:{brand:"Лукойл",name:"Лукойл",shop:"convenience"}},"shop/convenience|Луч":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Луч",name:"Луч",shop:"convenience"}},"shop/convenience|Любава":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Любава",name:"Любава",shop:"convenience"}},"shop/convenience|Магазин":{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:["kz","ru","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:"Мрія",name:"Мрія",shop:"convenience"}},"shop/convenience|Ника":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Ника",name:"Ника",shop:"convenience"}},"shop/convenience|Оазис":{tags:{brand:"Оазис",name:"Оазис",shop:"convenience"}},"shop/convenience|Околица":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Околица",name:"Околица",shop:"convenience"}},"shop/convenience|Парус":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Парус",name:"Парус",shop:"convenience"}},"shop/convenience|Пеликан":{countryCodes:["by","ru"],tags:{brand:"Пеликан",name:"Пеликан",shop:"convenience"}},"shop/convenience|Радуга":{tags:{brand:"Радуга",name:"Радуга",shop:"convenience"}},"shop/convenience|Русь":{countryCodes:["kz","ru","ua"],tags:{brand:"Русь",name:"Русь",shop:"convenience"}},"shop/convenience|Сельпо":{countryCodes:["kz","ru"],tags:{brand:"Сельпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сельпо",shop:"convenience"}},"shop/convenience|Сказка":{tags:{brand:"Сказка",name:"Сказка",shop:"convenience"}},"shop/convenience|Солнышко":{countryCodes:["kz","ru","ua"],tags:{brand:"Солнышко",name:"Солнышко",shop:"convenience"}},"shop/convenience|Тройка":{countryCodes:["kz","ru","ua"],tags:{brand:"Тройка",name:"Тройка",shop:"convenience"}},"shop/convenience|У Палыча":{countryCodes:["ru"],tags:{brand:"У Палыча",name:"У Палыча",shop:"convenience"}},"shop/convenience|Удача":{tags:{brand:"Удача",name:"Удача",shop:"convenience"}},"shop/convenience|Фасоль":{countryCodes:["ru","ua"],tags:{brand:"Фасоль",name:"Фасоль",shop:"convenience"}},"shop/convenience|Фортуна":{tags:{brand:"Фортуна",name:"Фортуна",shop:"convenience"}},"shop/convenience|Хуторок":{tags:{brand:"Хуторок",name:"Хуторок",shop:"convenience"}},"shop/convenience|Эдем":{countryCodes:["by","ru","ua"],tags:{brand:"Эдем",name:"Эдем",shop:"convenience"}},"shop/convenience|Юбилейный":{countryCodes:["by","kz","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|Epicier":{countryCodes:["ma"],tags:{brand:"Epicier",name:"Epicier",shop:"copyshop"}},"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/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|KIKO Milano":{countryCodes:["be","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|Vente de Cosmétique":{countryCodes:["ci"],tags:{brand:"Vente de Cosmétique",name:"Vente de Cosmétique",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"],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|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|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"],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|Gordmans":{countryCodes:["us"],tags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"}},"shop/department_store|HEMA":{countryCodes:["be","de","nl"],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":"Q61968827",name:"Havan",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",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",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|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|Marks & Spencer":{countryCodes:["gb","gr","ie"],matchNames:["m and s"],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|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|Shopko":{countryCodes:["us"],tags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",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|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":{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:["fr","ro"],tags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"en: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":{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":{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":{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|Karwei":{countryCodes:["nl"],tags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",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":{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:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"}},"shop/doityourself|コーナン":{countryCodes:["jp"],tags:{brand:"コーナン","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"}},"shop/doityourself|ナフコ":{countryCodes:["jp"],tags:{brand:"ナフコ","brand:ja":"ナフコ",name:"ナフコ","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|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/electronics|Apple Store":{matchNames:["apple"],nomatch:["amenity/bank|Apple Bank"],tags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"}},"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|Currys":{countryCodes:["gb","ie"],tags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"}},"shop/electronics|Currys PC World":{countryCodes:["gb","ie"],tags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"}},"shop/electronics|Darty":{countryCodes:["fr"],tags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac 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":{tags:{brand:"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|La Curacao":{tags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",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|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|Power":{countryCodes:["dk","fi","no"],tags:{brand:"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|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|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",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:"Эксперт",name:"Эксперт",shop:"electronics"}},"shop/electronics|Эльдорадо":{countryCodes:["ru","ua"],tags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",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":"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|Jimmy Choo":{tags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"fashion_accessories"}},"shop/fashion_accessories|Prada":{tags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",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|Salvatore Ferragamo":{tags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"fashion_accessories"}},"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/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|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|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:["fr"],tags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",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|Tanatorio":{tags:{brand:"Tanatorio",name:"Tanatorio",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|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","pt"],matchTags:["shop/interior_decoration"],tags:{brand:"Casa",name:"Casa",shop:"furniture"}},"shop/furniture|Conforama":{countryCodes:["ch","es","fr","it"],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|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|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|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"],tags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",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|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|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",name:"Roche Bobois",shop:"furniture"}},"shop/furniture|Roller":{countryCodes:["de"],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|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":{tags:{brand:"XXXLutz",name:"XXXLutz",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|Dehner":{countryCodes:["at","de"],tags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",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|Jardiland":{countryCodes:["fr"],tags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",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 Garden Center",name:"Walmart Garden Center",shop:"garden_centre"}},"shop/garden_centre|Welkoop":{countryCodes:["nl"],tags:{brand:"Welkoop",name:"Welkoop",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"],tags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"}},"shop/gift|Cracker Barrel":{countryCodes:["us"],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:["ca","mx","us"],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|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|Виктория":{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/health_food|Holland & Barrett":{countryCodes:["gb","ie","nl"],matchTags:["shop/chemist","shop/health","shop/herbalist","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/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"],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|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:website":"http://www.oldtimepottery.com","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|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|World Market":{countryCodes:["us"],matchNames:["cost plus"],matchTags:["shop/department_store","shop/furniture","shop/interior_decoration","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/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/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"],matchTags:["shop/department_store","shop/furniture","shop/houseware"],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/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|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|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|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":{tags:{brand:"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|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",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|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:["be","fr"],tags:{brand:"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/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:["office/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"],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|MTN":{matchNames:["agence mtn"],matchTags:["office/telecommunication"],tags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"}},"shop/mobile_phone|MetroPCS":{countryCodes:["us"],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"],matchTags:["office/telecommunication"],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|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|Orange":{matchNames:["agence orange"],matchTags:["office/telecommunication"],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:["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|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|Алло":{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:["office/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"],tags:{brand:"ワイモバイル","brand:ja":"ワイモバイル",name:"ワイモバイル","name:ja":"ワイモバイル",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 Store":{countryCodes:["us"],tags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",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/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:ja":"レッドバロン",name:"レッドバロン","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/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:"kiosk"}},"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":{countryCodes:["gb"],matchTags:["shop/books","shop/convenience","shop/kiosk","shop/stationery"],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":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Белсоюзпечать",shop:"newsagent"}},"shop/newsagent|Витебскоблсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",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:["by","kz","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|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|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|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|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|Оптимист Оптика":{countryCodes:["ru"],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":"メガネスーパー","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"],tags:{brand:"Cotswold Outdoor","brand:wikidata":"Q5175488",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|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/outdoor|Рыболов":{tags:{brand:"Рыболов",name:"Рыболов",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|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/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/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/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",name:"Max Spielmann",shop:"photo"}},"shop/photo|カメラのキタムラ":{countryCodes:["jp"],tags:{brand:"カメラのキタムラ","brand:ja":"カメラのキタムラ",name:"カメラのキタムラ","name:ja":"カメラのキタムラ",shop:"photo"}},"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|U-Haul":{countryCodes:["ca","us"],matchNames:["uhaul neighborhood dealer"],tags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"rental"}},"shop/seafood|Рыба":{tags:{brand:"Рыба",name:"Рыба",shop:"seafood"}},"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"],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":{countryCodes:["gb"],tags:{brand:"Christian Louboutin",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|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|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|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"],tags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"}},"shop/shoes|Havaianas":{tags:{brand:"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|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|Manfield":{tags:{brand:"Manfield",name:"Manfield",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|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|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|Salamander":{tags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",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 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","nl"],tags:{brand:"Snipes",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",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|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|Марко":{tags:{brand:"Марко",name:"Марко",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|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|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|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|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":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",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:["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"],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/supermarket|8 à Huit":{nomatch:["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|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",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":{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|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|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|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"],tags:{brand:"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|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|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|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"],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",name:"Covirán",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ò",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|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|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":"en: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":"en:Edeka",name:"Edeka",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 City",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|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|Farmfoods":{countryCodes:["gb","sk"],tags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",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":{tags:{brand:"Four Square",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|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"],tags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"}},"shop/supermarket|Giant~(Carlisle)":{countryCodes:["us"],nomatch:["shop/bicycle|Giant"],tags:{brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant",shop:"supermarket"}},"shop/supermarket|Giant~(Landover)":{countryCodes:["us"],nomatch:["shop/bicycle|Giant"],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":"en:Géant 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|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":{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|Irma":{countryCodes:["dk"],tags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",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:["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|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"],tags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"en:La Vie Claire (company)",name:"La Vie Claire",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":"en: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|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 Simply Food":{nomatch:["shop/convenience|M&S Simply Food"],tags:{brand:"M&S Simply Food",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|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|Maxi~(Canada)":{countryCodes:["ca"],nomatch:["shop/supermarket|Maxi~(Serbia)"],tags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"en:Maxi (Canadian supermarket)",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":{tags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"}},"shop/supermarket|Mercator":{countryCodes:["ba","hz","me","rs","si"],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~(Canada)":{countryCodes:["ca"],nomatch:["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:["shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q16640217","brand:wikipedia":"en:Tiendas Metro",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|NP":{matchNames:["np-markt"],nomatch:["amenity/fuel|NP"],tags:{brand:"NP",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":{tags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"en:Netto (store)",name:"Netto",shop:"supermarket"}},"shop/supermarket|Netto Marken-Discount":{countryCodes:["de"],tags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"en:Netto Marken-Discount",name:"Netto Marken-Discount",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|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:["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":"en: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/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/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|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",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"}},"shop/supermarket|Stater Bros.":{countryCodes:["us"],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|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":"en:Super C (supermarket)",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:["shop/convenience|Tesco Express","shop/supermarket|Tesco Express"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"}},"shop/supermarket|Tesco Express":{tags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"}},"shop/supermarket|Tesco Extra":{tags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"}},"shop/supermarket|Tesco Lotus":{countryCodes:["th"],nomatch:["shop/convenience|Tesco Lotus Express"],tags:{brand:"Tesco Lotus",name:"Tesco Lotus",shop:"supermarket"}},"shop/supermarket|Tesco Metro":{countryCodes:["gb"],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"],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"],tags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",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|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|Ş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|Магнит":{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|سوبر ماركت":{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:{brand:"アコレ","brand:ja":"アコレ",name:"アコレ","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":"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":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"}},"shop/supermarket|コープ":{countryCodes:["jp"],tags:{brand:"コープ","brand:ja":"コープ",name:"コープ","name:ja":"コープ",shop:"supermarket"}},"shop/supermarket|サミット":{countryCodes:["jp"],tags:{brand:"サミット","brand:ja":"サミット",name:"サミット","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":"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:["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":"Gyōmu sūpā","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:["leslie's 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/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/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/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|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|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|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":{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|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 Deutsches Reisebüro":{tags:{brand:"DER Deutsches Reisebüro",name:"DER Deutsches Reisebüro",shop:"travel_agency"}},"shop/travel_agency|DER Reisebüro":{countryCodes:["de"],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|Kuoni":{tags:{brand:"Kuoni",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|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|Поехали с нами":{countryCodes:["ua"],tags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",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"],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|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"],matchTags:["shop/convenience","shop/department_store","shop/supermarket"],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","nl","pl"],matchTags:["shop/supermarket"],tags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",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|Daiso Japan":{countryCodes:["au","us"],tags:{brand:"Daiso","brand:wikidata":"Q866991",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"}},"shop/variety_store|Dollar General":{countryCodes:["us"],matchTags:["shop/convenience","shop/department_store","shop/supermarket"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","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"],matchTags:["shop/convenience","shop/department_store","shop/supermarket"],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"],matchTags:["shop/convenience","shop/department_store","shop/supermarket"],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"],matchTags:["shop/convenience","shop/department_store","shop/supermarket"],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"],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"],matchTags:["shop/supermarket"],tags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",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|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|Savers":{tags:{brand:"Savers",name:"Savers",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"],matchTags:["shop/supermarket"],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"],matchTags:["shop/supermarket"],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"],matchTags:["shop/supermarket"],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:["gb"],tags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",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:["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"],matchTags:["shop/department_store"],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"],matchTags:["shop/department_store"],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":{matchTags:["shop/department_store"],tags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"}},"shop/wholesale|Metro":{matchTags:["shop/department_store"],nomatch:["amenity/bank|Metrobank","shop/supermarket|Metro~(Canada)"],tags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash & Carry",name:"Metro",shop:"wholesale"}},"shop/wholesale|Sam's Club":{matchTags:["shop/department_store"],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|コストコ":{countryCodes:["jp"],matchTags:["shop/department_store"],tags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",shop:"wholesale"}},"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|Aloft":{tags:{brand:"Aloft","brand:wikidata":"Q4734166","brand:wikipedia":"en:Aloft Hotels",name:"Aloft",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|Best Western":{nomatch:["tourism/hotel|Best Western Plus"],tags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"}},"tourism/hotel|Best Western Plus":{countryCodes:["ca","us"],nomatch:["tourism/hotel|Best Western"],tags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",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|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 by Marriott":{countryCodes:["ca","us"],matchNames:["courtyard","courtyard marriott"],tags:{brand:"Courtyard by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",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","gb","us"],tags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"}},"tourism/hotel|DoubleTree by Hilton":{tags:{brand:"DoubleTree by Hilton","brand:wikidata":"Q2504643","brand:wikipedia":"en:DoubleTree",name:"DoubleTree by Hilton",short_name:"DoubleTree",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",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","us"],matchNames:["fairfield inn and suites"],tags:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",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|Grand Hyatt":{tags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",tourism:"hotel"}},"tourism/hotel|Hampton":{countryCodes:["us"],matchNames:["hampton inn and suites"],tags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",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":{countryCodes:["ca","us"],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",tourism:"hotel"}},"tourism/hotel|Hotel Continental":{tags:{brand:"Hotel Continental",name:"Hotel Continental",tourism:"hotel"}},"tourism/hotel|Hotel Imperial":{tags:{brand:"Hotel Imperial",name:"Hotel Imperial",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","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",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|Kyriad":{countryCodes:["fr"],tags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"}},"tourism/hotel|La Quinta":{countryCodes:["us"],matchNames:["la quinta inn and suites","la quinta inns and suites"],tags:{brand:"La Quinta","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",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|Mercure":{tags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",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|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|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|Ramada":{tags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",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 Hotel":{countryCodes:["us"],tags:{brand:"Renaissance Hotels","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance Hotel",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|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|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":{tags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",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|東横イン":{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|Econo Lodge":{tags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",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"}}};
65201         var brands$1 = {
65202         brands: brands
65203         };
65204
65205         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/dentist$","^amenity/fast_food$","^amenity/fuel$","^amenity/ice_cream$","^amenity/money_transfer$","^amenity/payment_(centre|terminal)$","^amenity/pharmacy$","^amenity/post_(box|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$"];
65206         var discardKeys = ["^amenity/bank\\|(bank zachodni|bz) wbk$","^amenity/bank\\|.*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/cafe\\|(kiosque(\\sà)?\\scafé|caf(e|é)\\sexpress|встреча|рандеву|чайхана|жемчужина)$","^amenity/cinema\\|октябрь$","^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/ice_cream\\|gelateria$","^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\\|(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)","^amenity/restaurant\\|(frohsinn|((gasthaus|schwarzer)\\s)?adler|gasthaus\\slöwen|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\\|(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|каравай)$","^shop/bakery\\|(bäckerei\\s)?müller","^shop/butcher\\|butcher$","^shop/clothes\\|трикотаж$","^shop/convenience\\|(milk bar|юлия)$","^shop/convenience\\|(августина|весна|визит|ветеран|домашний)$","^shop/convenience\\|(калинка|колобок|колос(ок)?|каравай|ласточка|лидер|любимый|людмила|люкс)$","^shop/convenience\\|(мечта|мираж|белорусские продукты|продукты 24|натали|надежда)$","^shop/convenience\\|(олимп|престиж|подсолнух|росинка|ромашка|родник|родны кут|рассвет)$","^shop/convenience\\|(семейный|спутник|солнечный|светлана|ивушка)$","^shop/convenience\\|(южный|эконом|шанс|чайка|центральный|хороший|фаворит|татьяна)$","^shop/fishing\\|рыболов$","^shop/florist\\|(мир цветов|орхидея)$","^shop/frame\\|rumah\\spenduduk$","^shop/hairdresser\\|(haarwerk|стиль|локон|шарм)$","^shop/hardware\\|(всё для дома|1000 мелочей|хозяюшка)$","^shop/jewelry\\|585$","^shop/money_transfer|mobil(e)?\\smoney$","^shop/optician\\|(vision plus|оптика)$","^shop/supermarket\\|(famiglia cooperativa|семейный)$","^shop/tailor\\|couture\\s?(dame|homme|mixte)?$","^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|europa|krone|panorama|plaza|royal|victoria|(zur\\s)?post|de france)$","^tourism/hotel\\|строитель$"];
65207         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)(\\sshop)?$","^(hof|dorf)laden$","^(h|m)otel$","^(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$","^baguette$","^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 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)$","^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|é)(\\s(dolomiti|venezia))?$","^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$","^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$","^lubricentro$","^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$","^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|office|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ánico)?$","^tankstelle$","^tattoo$","^taverna$","^tea stall$","^tesha$","^tienda(\\sde\\s(barrio|abarrotes))?$","^toko pakaian$","^trafik(a)?$","^trattoria$","^trinkhalle$","^télécentre$","^ufficio postale$","^urząd pocztowy$","^vegyesbolt$","^venezia$","^verduler(i|í)a$","^večerka$","^virágbolt$","^vulcanizare$","^warung$","^warzywniak$","^windmill$","^wulkanizacja$","^zahnarzt$","^zigarettenautomat$","^zöldséges$","^änderungsschneiderei$","^élelmiszer(bolt)?$","^φαρμακείο$","^авто(рынок|ремонт|сервис|электрик|запчасти(ни)?)?$","^автома(г|газин|стерская)?$","^автосервис\\+шиномонтаж$","^аптека","^аптечный (пункт|склад)$","^ателье$","^бассейн$","^бистро$","^булочная$","^буфет$","^бытовая химия$","^ветеринарная клиника$","^ветлечебница$","^вс(е|ё) для дома$","^вулканизация$","^газ$","^главпочтамт$","^гостиница$","^детский дом$","^закусочная$","^замена масла$","^золото(й)?$","^зоо(магазин|товары)$","^игрушки$","^канцтовары$","^касса$","^квіти$","^киоск$","^книги$","^кофе(йня|\\sхауз)$","^крамниця$","^купец$","^ломбард$","^магазин","^маркет$","^меб(ель|лі)$","^метан$","^минимаркет|мини-маркет$","^мороженое$","^мясная лавка$","^обувь$","^овощи(\\sи\\s|-)фрукты$","^октан$","^памятники$","^парикмахер(ская)?$","^пекарня$","^пельменная$","^печать$","^пиццерия$","^по(чт|шт|щ)а$","^подарки$","^почтовое отделение$","^пресса$","^продукт(ы|и)?$","^продуктовый( магазин)?$","^промтовары$","^пропан$","^ремонт\\sобуви$","^ресторан$","^ритуал(ьные услуги)?$","^салон красоты$","^сантехника$","^семена$","^социальный участковый$","^спорт(зал|комплекс|товары)$","^столовая$","^стоматолог","^стройматериалы$","^сувениры$","^супермаркет$","^табак(ерка)?$","^ткани$","^товары для дома$","^универ(маг|сам)$","^уют$","^фрукты и овощи$","^химчистка$","^хинкальная$","^хоз(товары)$","^хүнсний дэлгүүр$","^цвет(овик|очный|ы)(\\sмагазин)?$","^церковная( лавка)?$","^чайхана$","^ша(ве|у)рма$","^шашлычная$","^шиномонтаж$","^דלק$","^اداره پست$","^باشگاه بدنسازی$","^بانک$","^بقال(ة)?$","^حلاق$","^داروخانه شبانه روزی$","^داروخانه$","^رستوران$","^سوپر\\s?مارکت$","^صيدلية$","^قصابی$","^محط(ه|ة) وقود$","^مخبز(ة)?$","^مطعم$","^مقهى$","^مكتب البريد$","^میوه فروشی$","^نان\\s?(سنگک|بربری|لواش)?$","^نانوایی\\s?(سنگک|بربری|لواش)?ی?$","^پمپ (بنزین|گاز)$","^მარკეტი( \\(market\\))?","^カフェ$","^ポスト$","^体育館$","^加油站$","^珈琲館$","^租$","^自動販売機$","^自販機$","^郵便ポスト$","^郵局$","^食堂$","automat na jizdenky"];
65208         var filters = {
65209         keepTags: keepTags,
65210         discardKeys: discardKeys,
65211         discardNames: discardNames
65212         };
65213
65214         // ES5 for iD, for now
65215
65216
65217         // remove spaces, punctuation, diacritics
65218         var simplify = function simplify(str) {
65219             return diacritics.remove(
65220                 str
65221                     .replace(/&/g,'and')
65222                     .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,'')
65223                     .toLowerCase()
65224             );
65225         };
65226
65227         // ES5 for iD, for now
65228
65229
65230         // toParts - split a name-suggestion-index key into parts
65231         // {
65232         //   kvnd:        "amenity/fast_food|Thaï Express~(North America)",
65233         //   kvn:         "amenity/fast_food|Thaï Express",
65234         //   kv:          "amenity/fast_food",
65235         //   k:           "amenity",
65236         //   v:           "fast_food",
65237         //   n:           "Thaï Express",
65238         //   d:           "(North America)",
65239         //   nsimple:     "thaiexpress",
65240         //   kvnnsimple:  "amenity/fast_food|thaiexpress"
65241         // }
65242         var to_parts = function toParts(kvnd) {
65243             var parts = {};
65244             parts.kvnd = kvnd;
65245
65246             var kvndparts = kvnd.split('~', 2);
65247             if (kvndparts.length > 1) parts.d = kvndparts[1];
65248
65249             parts.kvn = kvndparts[0];
65250             var kvnparts = parts.kvn.split('|', 2);
65251             if (kvnparts.length > 1) parts.n = kvnparts[1];
65252
65253             parts.kv = kvnparts[0];
65254             var kvparts = parts.kv.split('/', 2);
65255             parts.k = kvparts[0];
65256             parts.v = kvparts[1];
65257
65258             parts.nsimple = simplify(parts.n);
65259             parts.kvnsimple = parts.kv + '|' + parts.nsimple;
65260             return parts;
65261         };
65262
65263         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"],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"],fashion:["shop/accessories","shop/bag","shop/botique","shop/clothes","shop/department_store","shop/fashion","shop/fashion_accessories","shop/sports","shop/shoes"],financial:["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/stationery"],hardware:["shop/doityourself","shop/hardware","shop/trade"],houseware:["shop/houseware","shop/interior_decoration"],lodging:["tourism/hotel","tourism/motel"],money_transfer:["amenity/money_transfer","shop/money_transfer"],outdoor:["shop/outdoor","shop/sports"],parts:["shop/car_parts","shop/car_repair","shop/tires","shop/tyres"],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"],vending:["amenity/vending_machine","shop/vending_machine"]};
65264         var match_groups = {
65265         matchGroups: matchGroups
65266         };
65267
65268         var match_groups$1 = /*#__PURE__*/Object.freeze({
65269                 matchGroups: matchGroups,
65270                 'default': match_groups
65271         });
65272
65273         var require$$0 = getCjsExportFromNamespace(match_groups$1);
65274
65275         // ES5 for iD, for now
65276
65277
65278
65279         var matchGroups$1 = require$$0.matchGroups;
65280
65281         var matcher$1 = function() {
65282           var _warnings = []; // array of match conflict pairs
65283           var _ambiguous = {};
65284           var _matchIndex = {};
65285           var matcher = {};
65286
65287           // Create an index of all the keys/simplenames for fast matching
65288           matcher.buildMatchIndex = function(brands) {
65289
65290             // two passes - once for primary names, once for secondary/alternate names
65291             Object.keys(brands).forEach(function(kvnd) { insertNames(kvnd, 'primary'); });
65292             Object.keys(brands).forEach(function(kvnd) { insertNames(kvnd, 'secondary'); });
65293
65294             function insertNames(kvnd, which) {
65295               var obj = brands[kvnd];
65296               var parts = to_parts(kvnd);
65297
65298               if (obj.countryCodes) {
65299                 parts.countryCodes = obj.countryCodes.slice(); // copy
65300               }
65301
65302               var nomatches = (obj.nomatch || [])
65303                 .map(function(kvnd) { return to_parts(kvnd).kvnsimple; });
65304
65305               var match_kv = [parts.kv]
65306                 .concat(obj.matchTags || [])
65307                 .map(function(s) { return s.toLowerCase(); });
65308
65309               var match_nsimple = [];
65310               if (which === 'primary') {
65311                 match_nsimple = [parts.n]
65312                   .concat(obj.matchNames || [])
65313                   .concat(obj.tags.official_name || [])  // #2732
65314                   .map(simplify);
65315
65316               } else if (which === 'secondary') {
65317                 if (parts.d) return;  // exit early - we collected these on the first pass
65318                 match_nsimple = []
65319                   .concat(obj.tags.alt_name || [])       // #2732
65320                   .concat(obj.tags.short_name || [])     // #2732
65321                   .map(simplify);
65322               }
65323
65324               if (!match_nsimple.length) return;  // nothing to do
65325
65326               match_kv.forEach(function(kv) {
65327                 match_nsimple.forEach(function(nsimple) {
65328                   var test = kv + nsimple;
65329                   if (nomatches.some(function(s) { return s === test; })) {
65330                     console.log("WARNING match/nomatch conflict for " + test);
65331                     return;
65332                   }
65333
65334                   if (parts.d) {
65335                     // Known ambiguous names with disambiguation string ~(USA) / ~(Canada)
65336                     // FIXME: Name collisions will overwrite the initial entry (ok for now)
65337                     if (!_ambiguous[kv]) _ambiguous[kv] = {};
65338                     _ambiguous[kv][nsimple] = parts;
65339
65340                   } else {
65341                     // Names we expect to be unique..
65342                     // Warn if we detect collisions in a primary name, ignore if a secondary name - #2972
65343                     if (!_matchIndex[kv]) _matchIndex[kv] = {};
65344                     var m = _matchIndex[kv][nsimple];
65345                     if (m) {  // there already is a match for this name
65346                       if (which === 'primary') {
65347                         _warnings.push([m.kvnd, kvnd + ' ("' + nsimple + '")']);
65348                       }
65349                     } else {
65350                       _matchIndex[kv][nsimple] = parts;
65351                     }
65352                   }
65353                 });
65354               });
65355
65356             }
65357           };
65358
65359           // pass a `key`, `value`, `name` and return the best match,
65360           // `countryCode` optional (if supplied, must match that too)
65361           matcher.matchKVN = function(key, value, name, countryCode) {
65362             return matcher.matchParts(
65363               to_parts(key + "/" + value + "|" + name),
65364               countryCode
65365             );
65366           };
65367
65368           // pass a parts object and return the best match,
65369           // `countryCode` optional (if supplied, must match that too)
65370           matcher.matchParts = function(parts, countryCode) {
65371             var match = null;
65372             var inGroup = false;
65373
65374             // fixme: we currently return a single match for ambiguous
65375             match = _ambiguous[parts.kv] && _ambiguous[parts.kv][parts.nsimple];
65376             if (match && matchesCountryCode(match)) return match;
65377
65378             // try to return an exact match
65379             match = _matchIndex[parts.kv] && _matchIndex[parts.kv][parts.nsimple];
65380             if (match && matchesCountryCode(match)) return match;
65381
65382             // look in match groups
65383             for (var mg in matchGroups$1) {
65384               var matchGroup = matchGroups$1[mg];
65385               match = null;
65386               inGroup = false;
65387
65388               for (var i = 0; i < matchGroup.length; i++) {
65389                 var otherkv = matchGroup[i].toLowerCase();
65390                 if (!inGroup) {
65391                   inGroup = otherkv === parts.kv;
65392                 }
65393                 if (!match) {
65394                   // fixme: we currently return a single match for ambiguous
65395                   match = _ambiguous[otherkv] && _ambiguous[otherkv][parts.nsimple];
65396                 }
65397                 if (!match) {
65398                   match = _matchIndex[otherkv] && _matchIndex[otherkv][parts.nsimple];
65399                 }
65400
65401                 if (!matchesCountryCode(match)) {
65402                   match = null;
65403                 }
65404
65405                 if (inGroup && match) {
65406                   return match;
65407                 }
65408               }
65409             }
65410
65411             return null;
65412
65413             function matchesCountryCode(match) {
65414               if (!countryCode) return true;
65415               if (!match.countryCodes) return true;
65416               return match.countryCodes.indexOf(countryCode) !== -1;
65417             }
65418           };
65419
65420           matcher.getWarnings = function() {
65421             return _warnings;
65422           };
65423
65424           return matcher;
65425         };
65426
65427         function validationGenericName() {
65428             var type = 'generic_name';
65429
65430             // known list of generic names (e.g. "bar")
65431             var discardNamesRegexes = filters.discardNames.map(function(discardName) {
65432                 return new RegExp(discardName, 'i');
65433             });
65434
65435             var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
65436
65437             function isGenericName(entity) {
65438                 var name = entity.tags.name;
65439                 if (!name) return false;
65440                 // a generic name is okay if it's a known brand or entity
65441                 if (entity.hasWikidata()) return false;
65442                 name = name.toLowerCase();
65443
65444                 var i, key, val;
65445
65446                 // test if the name is just the key or tag value (e.g. "park")
65447                 for (i = 0; i < keysToTestForGenericValues.length; i++) {
65448                     key = keysToTestForGenericValues[i];
65449                     val = entity.tags[key];
65450                     if (val) {
65451                         val = val.toLowerCase();
65452                         if (key === name ||
65453                             val === name ||
65454                             key.replace(/\_/g, ' ') === name ||
65455                             val.replace(/\_/g, ' ') === name) {
65456                             return entity.tags.name;
65457                         }
65458                     }
65459                 }
65460
65461                 // test if the name is otherwise generic
65462                 for (i = 0; i < discardNamesRegexes.length; i++) {
65463                     if (discardNamesRegexes[i].test(name)) {
65464                         return entity.tags.name;
65465                     }
65466                 }
65467
65468                 return false;
65469             }
65470
65471
65472             var validation = function checkGenericName(entity) {
65473                 var generic = isGenericName(entity);
65474                 if (!generic) return [];
65475
65476                 return [new validationIssue({
65477                     type: type,
65478                     severity: 'warning',
65479                     message: function(context) {
65480                         var entity = context.hasEntity(this.entityIds[0]);
65481                         if (!entity) return '';
65482                         var preset = utilPreset(entity, context);
65483                         return t('issues.generic_name.message', { feature: preset.name(), name: generic });
65484                     },
65485                     reference: showReference,
65486                     entityIds: [entity.id],
65487                     hash: generic,
65488                     fixes: [
65489                         new validationIssueFix({
65490                             icon: 'iD-operation-delete',
65491                             title: t('issues.fix.remove_generic_name.title'),
65492                             onClick: function(context) {
65493                                 var entityId = this.issue.entityIds[0];
65494                                 var entity = context.entity(entityId);
65495                                 var tags = Object.assign({}, entity.tags);   // shallow copy
65496                                 delete tags.name;
65497                                 context.perform(
65498                                     actionChangeTags(entityId, tags),
65499                                     t('issues.fix.remove_generic_name.annotation')
65500                                 );
65501                             }
65502                         })
65503                     ]
65504                 })];
65505
65506
65507                 function showReference(selection) {
65508                     selection.selectAll('.issue-reference')
65509                         .data([0])
65510                         .enter()
65511                         .append('div')
65512                         .attr('class', 'issue-reference')
65513                         .text(t('issues.generic_name.reference'));
65514                 }
65515             };
65516
65517             validation.type = type;
65518
65519             return validation;
65520         }
65521
65522         function validationImpossibleOneway() {
65523             var type = 'impossible_oneway';
65524
65525             var validation = function checkImpossibleOneway(entity, graph) {
65526
65527                 if (entity.type !== 'way' || entity.geometry(graph) !== 'line') return [];
65528
65529                 if (entity.isClosed()) return [];
65530
65531                 if (!typeForWay(entity)) return [];
65532
65533                 if (!isOneway(entity)) return [];
65534
65535                 var firstIssues = issuesForNode(entity, entity.first());
65536                 var lastIssues = issuesForNode(entity, entity.last());
65537
65538                 return firstIssues.concat(lastIssues);
65539
65540                 function typeForWay(way) {
65541                     if (way.geometry(graph) !== 'line') return null;
65542
65543                     if (osmRoutableHighwayTagValues[way.tags.highway]) return 'highway';
65544                     if (osmFlowingWaterwayTagValues[way.tags.waterway]) return 'waterway';
65545                     return null;
65546                 }
65547
65548                 function isOneway(way) {
65549                     if (way.tags.oneway === 'yes') return true;
65550                     if (way.tags.oneway) return false;
65551
65552                     for (var key in way.tags) {
65553                         if (osmOneWayTags[key] && osmOneWayTags[key][way.tags[key]]) {
65554                             return true;
65555                         }
65556                     }
65557                     return false;
65558                 }
65559
65560                 function nodeOccursMoreThanOnce(way, nodeID) {
65561                     var occurences = 0;
65562                     for (var index in way.nodes) {
65563                         if (way.nodes[index] === nodeID) {
65564                             occurences += 1;
65565                             if (occurences > 1) return true;
65566                         }
65567                     }
65568                     return false;
65569                 }
65570
65571                 function isConnectedViaOtherTypes(way, node) {
65572
65573                     var wayType = typeForWay(way);
65574
65575                     if (wayType === 'highway') {
65576                         // entrances are considered connected
65577                         if (node.tags.entrance && node.tags.entrance !== 'no') return true;
65578                         if (node.tags.amenity === 'parking_entrance') return true;
65579                     } else if (wayType === 'waterway') {
65580                         if (node.id === way.first()) {
65581                             // multiple waterways may start at the same spring
65582                             if (node.tags.natural === 'spring') return true;
65583                         } else {
65584                             // multiple waterways may end at the same drain
65585                             if (node.tags.manhole === 'drain') return true;
65586                         }
65587                     }
65588
65589                     return graph.parentWays(node).some(function(parentWay) {
65590                         if (parentWay.id === way.id) return false;
65591
65592                         if (wayType === 'highway') {
65593
65594                             // allow connections to highway areas
65595                             if (parentWay.geometry(graph) === 'area' &&
65596                                 osmRoutableHighwayTagValues[parentWay.tags.highway]) return true;
65597
65598                             // count connections to ferry routes as connected
65599                             if (parentWay.tags.route === 'ferry') return true;
65600
65601                             return graph.parentRelations(parentWay).some(function(parentRelation) {
65602                                 if (parentRelation.tags.type === 'route' &&
65603                                     parentRelation.tags.route === 'ferry') return true;
65604
65605                                 // allow connections to highway multipolygons
65606                                 return parentRelation.isMultipolygon() && osmRoutableHighwayTagValues[parentRelation.tags.highway];
65607                             });
65608                         } else if (wayType === 'waterway') {
65609                             // multiple waterways may start or end at a water body at the same node
65610                             if (parentWay.tags.natural === 'water' ||
65611                                 parentWay.tags.natural === 'coastline') return true;
65612                         }
65613                         return false;
65614                     });
65615                 }
65616
65617                 function issuesForNode(way, nodeID) {
65618
65619                     var isFirst = nodeID === way.first();
65620
65621                     var wayType = typeForWay(way);
65622
65623                     // ignore if this way is self-connected at this node
65624                     if (nodeOccursMoreThanOnce(way, nodeID)) return [];
65625
65626                     var osm = services$1.osm;
65627                     if (!osm) return [];
65628
65629                     var node = graph.hasEntity(nodeID);
65630
65631                     // ignore if this node or its tile are unloaded
65632                     if (!node || !osm.isDataLoaded(node.loc)) return [];
65633
65634                     if (isConnectedViaOtherTypes(way, node)) return [];
65635
65636                     var attachedWaysOfSameType = graph.parentWays(node).filter(function(parentWay) {
65637                         if (parentWay.id === way.id) return false;
65638                         return typeForWay(parentWay) === wayType;
65639                     });
65640
65641                     // assume it's okay for waterways to start or end disconnected for now
65642                     if (wayType === 'waterway' && attachedWaysOfSameType.length === 0) return [];
65643
65644                     var attachedOneways = attachedWaysOfSameType.filter(function(attachedWay) {
65645                         return isOneway(attachedWay);
65646                     });
65647
65648                     // ignore if the way is connected to some non-oneway features
65649                     if (attachedOneways.length < attachedWaysOfSameType.length) return [];
65650
65651                     if (attachedOneways.length) {
65652                         var connectedEndpointsOkay = attachedOneways.some(function(attachedOneway) {
65653                             if ((isFirst ? attachedOneway.first() : attachedOneway.last()) !== nodeID) return true;
65654                             if (nodeOccursMoreThanOnce(attachedOneway, nodeID)) return true;
65655                             return false;
65656                         });
65657                         if (connectedEndpointsOkay) return [];
65658                     }
65659
65660                     var fixes = [];
65661
65662                     if (attachedOneways.length) {
65663                         fixes.push(new validationIssueFix({
65664                             icon: 'iD-operation-reverse',
65665                             title: t('issues.fix.reverse_feature.title'),
65666                             entityIds: [way.id],
65667                             onClick: function(context) {
65668                                 var id = this.issue.entityIds[0];
65669                                 context.perform(actionReverse(id), t('operations.reverse.annotation'));
65670                             }
65671                         }));
65672                     }
65673                     if (node.tags.noexit !== 'yes') {
65674                         fixes.push(new validationIssueFix({
65675                             icon: 'iD-operation-continue' + (isFirst ? '-left' : ''),
65676                             title: t('issues.fix.continue_from_' + (isFirst ? 'start' : 'end') + '.title'),
65677                             onClick: function(context) {
65678                                 var entityID = this.issue.entityIds[0];
65679                                 var vertexID = this.issue.entityIds[1];
65680                                 var way = context.entity(entityID);
65681                                 var vertex = context.entity(vertexID);
65682                                 continueDrawing(way, vertex, context);
65683                             }
65684                         }));
65685                     }
65686
65687                     var placement = isFirst ? 'start' : 'end',
65688                         messageID = wayType + '.',
65689                         referenceID = wayType + '.';
65690
65691                     if (wayType === 'waterway') {
65692                         messageID += 'connected.' + placement;
65693                         referenceID += 'connected';
65694                     } else {
65695                         messageID += placement;
65696                         referenceID += placement;
65697                     }
65698
65699                     return [new validationIssue({
65700                         type: type,
65701                         subtype: wayType,
65702                         severity: 'warning',
65703                         message: function(context) {
65704                             var entity = context.hasEntity(this.entityIds[0]);
65705                             return entity ? t('issues.impossible_oneway.' + messageID + '.message', {
65706                                 feature: utilDisplayLabel(entity, context)
65707                             }) : '';
65708                         },
65709                         reference: getReference(referenceID),
65710                         entityIds: [way.id, node.id],
65711                         fixes: fixes
65712                     })];
65713
65714                     function getReference(referenceID) {
65715                         return function showReference(selection) {
65716                             selection.selectAll('.issue-reference')
65717                                 .data([0])
65718                                 .enter()
65719                                 .append('div')
65720                                 .attr('class', 'issue-reference')
65721                                 .text(t('issues.impossible_oneway.' + referenceID + '.reference'));
65722                         };
65723                     }
65724                 }
65725             };
65726
65727             function continueDrawing(way, vertex, context) {
65728                 // make sure the vertex is actually visible and editable
65729                 var map = context.map();
65730                 if (!map.editable() || !map.trimmedExtent().contains(vertex.loc)) {
65731                     map.zoomToEase(vertex);
65732                 }
65733
65734                 context.enter(
65735                     modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
65736                 );
65737             }
65738
65739             validation.type = type;
65740
65741             return validation;
65742         }
65743
65744         function validationIncompatibleSource() {
65745             var type = 'incompatible_source';
65746             var invalidSources = [
65747                 {
65748                     id:'google', regex:'google', exceptRegex: 'books.google|Google Books'
65749                 }
65750             ];
65751
65752             var validation = function checkIncompatibleSource(entity) {
65753
65754                 var entitySources = entity.tags && entity.tags.source && entity.tags.source.split(';');
65755
65756                 if (!entitySources) return [];
65757
65758                 var issues = [];
65759
65760                 invalidSources.forEach(function(invalidSource) {
65761
65762                     var hasInvalidSource = entitySources.some(function(source) {
65763                         if (!source.match(new RegExp(invalidSource.regex, 'i'))) return false;
65764                         if (invalidSource.exceptRegex && source.match(new RegExp(invalidSource.exceptRegex, 'i'))) return false;
65765                         return true;
65766                     });
65767
65768                     if (!hasInvalidSource) return;
65769
65770                     issues.push(new validationIssue({
65771                         type: type,
65772                         severity: 'warning',
65773                         message: function(context) {
65774                             var entity = context.hasEntity(this.entityIds[0]);
65775                             return entity ? t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
65776                                 feature: utilDisplayLabel(entity, context)
65777                             }) : '';
65778                         },
65779                         reference: getReference(invalidSource.id),
65780                         entityIds: [entity.id],
65781                         fixes: [
65782                             new validationIssueFix({
65783                                 title: t('issues.fix.remove_proprietary_data.title')
65784                             })
65785                         ]
65786                     }));
65787                 });
65788
65789                 return issues;
65790
65791
65792                 function getReference(id) {
65793                     return function showReference(selection) {
65794                         selection.selectAll('.issue-reference')
65795                             .data([0])
65796                             .enter()
65797                             .append('div')
65798                             .attr('class', 'issue-reference')
65799                             .text(t('issues.incompatible_source.' + id + '.reference'));
65800                     };
65801                 }
65802             };
65803
65804             validation.type = type;
65805
65806             return validation;
65807         }
65808
65809         function validationFormatting() {
65810             var type = 'invalid_format';
65811
65812             var validation = function(entity) {
65813                 var issues = [];
65814
65815                 function isValidEmail(email) {
65816                     // Emails in OSM are going to be official so they should be pretty simple
65817                     // Using negated lists to better support all possible unicode characters (#6494)
65818                     var valid_email = /^[^\(\)\\,":;<>@\[\]]+@[^\(\)\\,":;<>@\[\]\.]+(?:\.[a-z0-9-]+)*$/i;
65819
65820                     // An empty value is also acceptable
65821                     return (!email || valid_email.test(email));
65822                 }
65823
65824                 function isSchemePresent(url) {
65825                     var valid_scheme = /^https?:\/\//i;
65826                     return (!url || valid_scheme.test(url));
65827                 }
65828
65829                 function showReferenceEmail(selection) {
65830                     selection.selectAll('.issue-reference')
65831                         .data([0])
65832                         .enter()
65833                         .append('div')
65834                         .attr('class', 'issue-reference')
65835                         .text(t('issues.invalid_format.email.reference'));
65836                 }
65837
65838                 function showReferenceWebsite(selection) {
65839                     selection.selectAll('.issue-reference')
65840                         .data([0])
65841                         .enter()
65842                         .append('div')
65843                         .attr('class', 'issue-reference')
65844                         .text(t('issues.invalid_format.website.reference'));
65845                 }
65846
65847                 if (entity.tags.website) {
65848                     // Multiple websites are possible
65849                     // If ever we support ES6, arrow functions make this nicer
65850                     var websites = entity.tags.website
65851                         .split(';')
65852                         .map(function(s) { return s.trim(); })
65853                         .filter(function(x) { return !isSchemePresent(x); });
65854
65855                     if (websites.length) {
65856                         issues.push(new validationIssue({
65857                             type: type,
65858                             subtype: 'website',
65859                             severity: 'warning',
65860                             message: function(context) {
65861                                 var entity = context.hasEntity(this.entityIds[0]);
65862                                 return entity ? t('issues.invalid_format.website.message' + this.data,
65863                                     { feature: utilDisplayLabel(entity, context), site: websites.join(', ') }) : '';
65864                             },
65865                             reference: showReferenceWebsite,
65866                             entityIds: [entity.id],
65867                             hash: websites.join(),
65868                             data: (websites.length > 1) ? '_multi' : ''
65869                         }));
65870                     }
65871                 }
65872
65873                 if (entity.tags.email) {
65874                     // Multiple emails are possible
65875                     var emails = entity.tags.email
65876                         .split(';')
65877                         .map(function(s) { return s.trim(); })
65878                         .filter(function(x) { return !isValidEmail(x); });
65879
65880                     if (emails.length) {
65881                         issues.push(new validationIssue({
65882                             type: type,
65883                             subtype: 'email',
65884                             severity: 'warning',
65885                             message: function(context) {
65886                                 var entity = context.hasEntity(this.entityIds[0]);
65887                                 return entity ? t('issues.invalid_format.email.message' + this.data,
65888                                     { feature: utilDisplayLabel(entity, context), email: emails.join(', ') }) : '';
65889                             },
65890                             reference: showReferenceEmail,
65891                             entityIds: [entity.id],
65892                             hash: emails.join(),
65893                             data: (emails.length > 1) ? '_multi' : ''
65894                         }));
65895                     }
65896                 }
65897
65898                 return issues;
65899             };
65900
65901             validation.type = type;
65902
65903             return validation;
65904         }
65905
65906         function validationMaprules() {
65907             var type = 'maprules';
65908
65909             var validation = function checkMaprules(entity, graph) {
65910                 if (!services$1.maprules) return [];
65911
65912                 var rules = services$1.maprules.validationRules();
65913                 var issues = [];
65914
65915                 for (var i = 0; i < rules.length; i++) {
65916                     var rule = rules[i];
65917                     rule.findIssues(entity, graph, issues);
65918                 }
65919
65920                 return issues;
65921             };
65922
65923
65924             validation.type = type;
65925
65926             return validation;
65927         }
65928
65929         function validationMissingRole() {
65930             var type = 'missing_role';
65931
65932             var validation = function checkMissingRole(entity, graph) {
65933                 var issues = [];
65934                 if (entity.type === 'way') {
65935                     graph.parentRelations(entity).forEach(function(relation) {
65936                         if (!relation.isMultipolygon()) return;
65937
65938                         var member = relation.memberById(entity.id);
65939                         if (member && isMissingRole(member)) {
65940                             issues.push(makeIssue(entity, relation, member));
65941                         }
65942                     });
65943                 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
65944                     entity.indexedMembers().forEach(function(member) {
65945                         var way = graph.hasEntity(member.id);
65946                         if (way && isMissingRole(member)) {
65947                             issues.push(makeIssue(way, entity, member));
65948                         }
65949                     });
65950                 }
65951
65952                 return issues;
65953             };
65954
65955
65956             function isMissingRole(member) {
65957                 return !member.role || !member.role.trim().length;
65958             }
65959
65960
65961             function makeIssue(way, relation, member) {
65962                 return new validationIssue({
65963                     type: type,
65964                     severity: 'warning',
65965                     message: function(context) {
65966                         var member = context.hasEntity(this.entityIds[1]),
65967                             relation = context.hasEntity(this.entityIds[0]);
65968                         return (member && relation) ? t('issues.missing_role.message', {
65969                             member: utilDisplayLabel(member, context),
65970                             relation: utilDisplayLabel(relation, context)
65971                         }) : '';
65972                     },
65973                     reference: showReference,
65974                     entityIds: [relation.id, way.id],
65975                     data: {
65976                         member: member
65977                     },
65978                     hash: member.index.toString(),
65979                     fixes: [
65980                         makeAddRoleFix('inner'),
65981                         makeAddRoleFix('outer'),
65982                         new validationIssueFix({
65983                             icon: 'iD-operation-delete',
65984                             title: t('issues.fix.remove_from_relation.title'),
65985                             onClick: function(context) {
65986                                 context.perform(
65987                                     actionDeleteMember(this.issue.entityIds[0], this.issue.data.member.index),
65988                                     t('operations.delete_member.annotation')
65989                                 );
65990                             }
65991                         })
65992                     ]
65993                 });
65994
65995
65996                 function showReference(selection) {
65997                     selection.selectAll('.issue-reference')
65998                         .data([0])
65999                         .enter()
66000                         .append('div')
66001                         .attr('class', 'issue-reference')
66002                         .text(t('issues.missing_role.multipolygon.reference'));
66003                 }
66004             }
66005
66006
66007             function makeAddRoleFix(role) {
66008                 return new validationIssueFix({
66009                     title: t('issues.fix.set_as_' + role + '.title'),
66010                     onClick: function(context) {
66011                         var oldMember = this.issue.data.member;
66012                         var member = { id: this.issue.entityIds[1], type: oldMember.type, role: role };
66013                         context.perform(
66014                             actionChangeMember(this.issue.entityIds[0], member, oldMember.index),
66015                             t('operations.change_role.annotation')
66016                         );
66017                     }
66018                 });
66019             }
66020
66021             validation.type = type;
66022
66023             return validation;
66024         }
66025
66026         function validationMissingTag() {
66027             var type = 'missing_tag';
66028
66029
66030             function hasDescriptiveTags(entity) {
66031                 var keys = Object.keys(entity.tags)
66032                     .filter(function(k) {
66033                         if (k === 'area' || k === 'name') {
66034                             return false;
66035                         } else {
66036                             return osmIsInterestingTag(k);
66037                         }
66038                     });
66039
66040                 if (entity.type === 'relation' && keys.length === 1) {
66041                     return entity.tags.type !== 'multipolygon';
66042                 }
66043                 return keys.length > 0;
66044             }
66045
66046
66047             function isUnknownRoad(entity) {
66048                 return entity.type === 'way' && entity.tags.highway === 'road';
66049             }
66050
66051             function isUntypedRelation(entity) {
66052                 return entity.type === 'relation' && !entity.tags.type;
66053             }
66054
66055
66056             var validation = function checkMissingTag(entity, graph) {
66057
66058                 // ignore vertex features and relation members
66059                 if (entity.geometry(graph) === 'vertex' || entity.hasParentRelations(graph)) {
66060                     return [];
66061                 }
66062
66063                 var subtype;
66064
66065                 if (Object.keys(entity.tags).length === 0) {
66066                     subtype = 'any';
66067                 } else if (!hasDescriptiveTags(entity)) {
66068                     subtype = 'descriptive';
66069                 } else if (isUntypedRelation(entity)) {
66070                     subtype = 'relation_type';
66071                 } else if (isUnknownRoad(entity)) {
66072                     subtype = 'highway_classification';
66073                 }
66074
66075                 if (!subtype) return [];
66076
66077                 var selectFixType = subtype === 'highway_classification' ? 'select_road_type' : 'select_preset';
66078
66079                 var fixes = [
66080                     new validationIssueFix({
66081                         icon: 'iD-icon-search',
66082                         title: t('issues.fix.' + selectFixType + '.title'),
66083                         onClick: function(context) {
66084                             context.ui().sidebar.showPresetList();
66085                         }
66086                     })
66087                 ];
66088
66089                 // can always delete if the user created it in the first place..
66090                 var canDelete = (entity.version === undefined || entity.v !== undefined);
66091                 fixes.push(
66092                     new validationIssueFix({
66093                         icon: 'iD-operation-delete',
66094                         title: t('issues.fix.delete_feature.title'),
66095                         onClick: function(context) {
66096                             var id = this.issue.entityIds[0];
66097                             var operation = operationDelete([id], context);
66098                             if (!operation.disabled()) {
66099                                 operation();
66100                             }
66101                         }
66102                     })
66103                 );
66104
66105                 var messageID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag.' + subtype;
66106                 var referenceID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag';
66107
66108                 var severity = (canDelete && subtype !== 'highway_classification') ? 'error' : 'warning';
66109
66110                 return [new validationIssue({
66111                     type: type,
66112                     subtype: subtype,
66113                     severity: severity,
66114                     message: function(context) {
66115                         var entity = context.hasEntity(this.entityIds[0]);
66116                         return entity ? t('issues.' + messageID + '.message', {
66117                             feature: utilDisplayLabel(entity, context)
66118                         }) : '';
66119                     },
66120                     reference: showReference,
66121                     entityIds: [entity.id],
66122                     fixes: fixes
66123                 })];
66124
66125
66126                 function showReference(selection) {
66127                     selection.selectAll('.issue-reference')
66128                         .data([0])
66129                         .enter()
66130                         .append('div')
66131                         .attr('class', 'issue-reference')
66132                         .text(t('issues.' + referenceID + '.reference'));
66133                 }
66134             };
66135
66136
66137             validation.type = type;
66138
66139             return validation;
66140         }
66141
66142         function validationOutdatedTags(context) {
66143             var type = 'outdated_tags';
66144
66145             // initialize name-suggestion-index matcher
66146             var nsiMatcher = matcher$1();
66147             nsiMatcher.buildMatchIndex(brands$1.brands);
66148             var nsiKeys = ['amenity', 'shop', 'tourism', 'leisure', 'office'];
66149
66150             var allWD = {};
66151             var allWP = {};
66152             Object.keys(brands$1.brands).forEach(function(kvnd) {
66153                 var brand = brands$1.brands[kvnd];
66154                 var wd = brand.tags['brand:wikidata'];
66155                 var wp = brand.tags['brand:wikipedia'];
66156                 if (wd) { allWD[wd] = kvnd; }
66157                 if (wp) { allWP[wp] = kvnd; }
66158             });
66159
66160
66161             function oldTagIssues(entity, graph) {
66162                 var oldTags = Object.assign({}, entity.tags);  // shallow copy
66163                 var preset = context.presets().match(entity, graph);
66164                 var explicitPresetUpgrade = preset.replacement;
66165                 var subtype = 'deprecated_tags';
66166
66167                 // upgrade preset..
66168                 if (preset.replacement) {
66169                     var newPreset = context.presets().item(preset.replacement);
66170                     graph = actionChangePreset(entity.id, preset, newPreset, true)(graph);  // true = skip field defaults
66171                     entity = graph.entity(entity.id);
66172                     preset = newPreset;
66173                 }
66174
66175                 // upgrade tags..
66176                 var deprecatedTags = entity.deprecatedTags();
66177                 if (deprecatedTags.length) {
66178                     deprecatedTags.forEach(function(tag) {
66179                         graph = actionUpgradeTags(entity.id, tag.old, tag.replace)(graph);
66180                     });
66181                     entity = graph.entity(entity.id);
66182                 }
66183
66184                 // add missing addTags..
66185                 var newTags = Object.assign({}, entity.tags);  // shallow copy
66186                 if (preset.tags !== preset.addTags) {
66187                     Object.keys(preset.addTags).forEach(function(k) {
66188                         if (!newTags[k]) {
66189                             newTags[k] = preset.addTags[k];
66190                             if (!explicitPresetUpgrade) {
66191                                 subtype = 'incomplete_tags';
66192                             }
66193                         }
66194                     });
66195                 }
66196
66197                 // Do `wikidata` or `wikipedia` identify this entity as a brand?  #6416
66198                 // If so, these tags can be swapped to `brand:wikidata`/`brand:wikipedia`
66199                 var isBrand;
66200                 if (newTags.wikidata) {                 // try matching `wikidata`
66201                     isBrand = allWD[newTags.wikidata];
66202                 }
66203                 if (!isBrand && newTags.wikipedia) {    // fallback to `wikipedia`
66204                     isBrand = allWP[newTags.wikipedia];
66205                 }
66206                 if (isBrand && !newTags.office) {       // but avoid doing this for corporate offices
66207                     if (newTags.wikidata) {
66208                         newTags['brand:wikidata'] = newTags.wikidata;
66209                         delete newTags.wikidata;
66210                     }
66211                     if (newTags.wikipedia) {
66212                         newTags['brand:wikipedia'] = newTags.wikipedia;
66213                         delete newTags.wikipedia;
66214                     }
66215                     // I considered setting `name` and other tags here, but they aren't unique per wikidata
66216                     // (Q2759586 -> in USA "Papa John's", in Russia "Папа Джонс")
66217                     // So users will really need to use a preset or assign `name` themselves.
66218                 }
66219
66220                 // try key/value|name match against name-suggestion-index
66221                 if (newTags.name) {
66222                     for (var i = 0; i < nsiKeys.length; i++) {
66223                         var k = nsiKeys[i];
66224                         if (!newTags[k]) continue;
66225
66226                         var match = nsiMatcher.matchKVN(k, newTags[k], newTags.name);
66227                         if (!match) continue;
66228
66229                         // for now skip ambiguous matches (like Target~(USA) vs Target~(Australia))
66230                         if (match.d) continue;
66231
66232                         var brand = brands$1.brands[match.kvnd];
66233                         if (brand && brand.tags['brand:wikidata']) {
66234                             subtype = 'noncanonical_brand';
66235
66236                             var keepTags = ['takeaway'].reduce(function(acc, k) {
66237                                 if (newTags[k]) {
66238                                     acc[k] = newTags[k];
66239                                 }
66240                                 return acc;
66241                             }, {});
66242
66243                             nsiKeys.forEach(function(k) { delete newTags[k]; });
66244                             Object.assign(newTags, brand.tags, keepTags);
66245                             break;
66246                         }
66247                     }
66248                 }
66249
66250
66251                 // determine diff
66252                 var tagDiff = utilTagDiff(oldTags, newTags);
66253                 if (!tagDiff.length) return [];
66254
66255                 var prefix = '';
66256                 if (subtype === 'noncanonical_brand') {
66257                     prefix = 'noncanonical_brand.';
66258                 } else if (subtype === 'incomplete_tags') {
66259                     prefix = 'incomplete.';
66260                 }
66261
66262                 // don't allow autofixing brand tags
66263                 var autoArgs = subtype !== 'noncanonical_brand' ? [doUpgrade, t('issues.fix.upgrade_tags.annotation')] : null;
66264
66265                 return [new validationIssue({
66266                     type: type,
66267                     subtype: subtype,
66268                     severity: 'warning',
66269                     message: showMessage,
66270                     reference: showReference,
66271                     entityIds: [entity.id],
66272                     hash: JSON.stringify(tagDiff),
66273                     fixes: [
66274                         new validationIssueFix({
66275                             autoArgs: autoArgs,
66276                             title: t('issues.fix.upgrade_tags.title'),
66277                             onClick: function(context) {
66278                                 context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
66279                             }
66280                         })
66281                     ]
66282                 })];
66283
66284
66285                 function doUpgrade(graph) {
66286                     var currEntity = graph.hasEntity(entity.id);
66287                     if (!currEntity) return graph;
66288
66289                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
66290                     tagDiff.forEach(function(diff) {
66291                         if (diff.type === '-') {
66292                             delete newTags[diff.key];
66293                         } else if (diff.type === '+') {
66294                             newTags[diff.key] = diff.newVal;
66295                         }
66296                     });
66297
66298                     return actionChangeTags(currEntity.id, newTags)(graph);
66299                 }
66300
66301
66302                 function showMessage(context) {
66303                     var currEntity = context.hasEntity(entity.id);
66304                     if (!currEntity) return '';
66305
66306                     return t('issues.outdated_tags.' + prefix + 'message',
66307                         { feature: utilDisplayLabel(currEntity, context) }
66308                     );
66309                 }
66310
66311
66312                 function showReference(selection) {
66313                     var enter = selection.selectAll('.issue-reference')
66314                         .data([0])
66315                         .enter();
66316
66317                     enter
66318                         .append('div')
66319                         .attr('class', 'issue-reference')
66320                         .text(t('issues.outdated_tags.' + prefix + 'reference'));
66321
66322                     enter
66323                         .append('strong')
66324                         .text(t('issues.suggested'));
66325
66326                     enter
66327                         .append('table')
66328                         .attr('class', 'tagDiff-table')
66329                         .selectAll('.tagDiff-row')
66330                         .data(tagDiff)
66331                         .enter()
66332                         .append('tr')
66333                         .attr('class', 'tagDiff-row')
66334                         .append('td')
66335                         .attr('class', function(d) {
66336                             var klass = d.type === '+' ? 'add' : 'remove';
66337                             return 'tagDiff-cell tagDiff-cell-' + klass;
66338                         })
66339                         .text(function(d) { return d.display; });
66340                 }
66341             }
66342
66343
66344             function oldMultipolygonIssues(entity, graph) {
66345
66346                 var multipolygon, outerWay;
66347                 if (entity.type === 'relation') {
66348                     outerWay = osmOldMultipolygonOuterMemberOfRelation(entity, graph);
66349                     multipolygon = entity;
66350                 } else if (entity.type === 'way') {
66351                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
66352                     outerWay = entity;
66353                 } else {
66354                     return [];
66355                 }
66356
66357                 if (!multipolygon || !outerWay) return [];
66358
66359                 return [new validationIssue({
66360                     type: type,
66361                     subtype: 'old_multipolygon',
66362                     severity: 'warning',
66363                     message: showMessage,
66364                     reference: showReference,
66365                     entityIds: [outerWay.id, multipolygon.id],
66366                     fixes: [
66367                         new validationIssueFix({
66368                             autoArgs: [doUpgrade, t('issues.fix.move_tags.annotation')],
66369                             title: t('issues.fix.move_tags.title'),
66370                             onClick: function(context) {
66371                                 context.perform(doUpgrade, t('issues.fix.move_tags.annotation'));
66372                             }
66373                         })
66374                     ]
66375                 })];
66376
66377
66378                 function doUpgrade(graph) {
66379                     var currMultipolygon = graph.hasEntity(multipolygon.id);
66380                     var currOuterWay = graph.hasEntity(outerWay.id);
66381                     if (!currMultipolygon || !currOuterWay) return graph;
66382
66383                     currMultipolygon = currMultipolygon.mergeTags(currOuterWay.tags);
66384                     graph = graph.replace(currMultipolygon);
66385                     return actionChangeTags(currOuterWay.id, {})(graph);
66386                 }
66387
66388
66389                 function showMessage(context) {
66390                     var currMultipolygon = context.hasEntity(multipolygon.id);
66391                     if (!currMultipolygon) return '';
66392
66393                     return t('issues.old_multipolygon.message',
66394                         { multipolygon: utilDisplayLabel(currMultipolygon, context) }
66395                     );
66396                 }
66397
66398
66399                 function showReference(selection) {
66400                     selection.selectAll('.issue-reference')
66401                         .data([0])
66402                         .enter()
66403                         .append('div')
66404                         .attr('class', 'issue-reference')
66405                         .text(t('issues.old_multipolygon.reference'));
66406                 }
66407             }
66408
66409
66410             var validation = function checkOutdatedTags(entity, graph) {
66411                 var issues = oldMultipolygonIssues(entity, graph);
66412                 if (!issues.length) issues = oldTagIssues(entity, graph);
66413                 return issues;
66414             };
66415
66416
66417             validation.type = type;
66418
66419             return validation;
66420         }
66421
66422         function validationPrivateData() {
66423             var type = 'private_data';
66424
66425             // assume that some buildings are private
66426             var privateBuildingValues = {
66427                 detached: true,
66428                 farm: true,
66429                 house: true,
66430                 houseboat: true,
66431                 residential: true,
66432                 semidetached_house: true,
66433                 static_caravan: true
66434             };
66435
66436             // but they might be public if they have one of these other tags
66437             var publicKeys = {
66438                 amenity: true,
66439                 craft: true,
66440                 historic: true,
66441                 leisure: true,
66442                 office: true,
66443                 shop: true,
66444                 tourism: true
66445             };
66446
66447             // these tags may contain personally identifying info
66448             var personalTags = {
66449                 'contact:email': true,
66450                 'contact:fax': true,
66451                 'contact:phone': true,
66452                 email: true,
66453                 fax: true,
66454                 phone: true
66455             };
66456
66457
66458             var validation = function checkPrivateData(entity) {
66459                 var tags = entity.tags;
66460                 if (!tags.building || !privateBuildingValues[tags.building]) return [];
66461
66462                 var keepTags = {};
66463                 for (var k in tags) {
66464                     if (publicKeys[k]) return [];  // probably a public feature
66465                     if (!personalTags[k]) {
66466                         keepTags[k] = tags[k];
66467                     }
66468                 }
66469
66470                 var tagDiff = utilTagDiff(tags, keepTags);
66471                 if (!tagDiff.length) return [];
66472
66473                 var fixID = tagDiff.length === 1 ? 'remove_tag' : 'remove_tags';
66474
66475                 return [new validationIssue({
66476                     type: type,
66477                     severity: 'warning',
66478                     message: showMessage,
66479                     reference: showReference,
66480                     entityIds: [entity.id],
66481                     fixes: [
66482                         new validationIssueFix({
66483                             icon: 'iD-operation-delete',
66484                             title: t('issues.fix.' + fixID + '.title'),
66485                             onClick: function(context) {
66486                                 context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
66487                             }
66488                         })
66489                     ]
66490                 })];
66491
66492
66493                 function doUpgrade(graph) {
66494                     var currEntity = graph.hasEntity(entity.id);
66495                     if (!currEntity) return graph;
66496
66497                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
66498                     tagDiff.forEach(function(diff) {
66499                         if (diff.type === '-') {
66500                             delete newTags[diff.key];
66501                         } else if (diff.type === '+') {
66502                             newTags[diff.key] = diff.newVal;
66503                         }
66504                     });
66505
66506                     return actionChangeTags(currEntity.id, newTags)(graph);
66507                 }
66508
66509
66510                 function showMessage(context) {
66511                     var currEntity = context.hasEntity(this.entityIds[0]);
66512                     if (!currEntity) return '';
66513
66514                     return t('issues.private_data.contact.message',
66515                         { feature: utilDisplayLabel(currEntity, context) }
66516                     );
66517                 }
66518
66519
66520                 function showReference(selection) {
66521                     var enter = selection.selectAll('.issue-reference')
66522                         .data([0])
66523                         .enter();
66524
66525                     enter
66526                         .append('div')
66527                         .attr('class', 'issue-reference')
66528                         .text(t('issues.private_data.reference'));
66529
66530                     enter
66531                         .append('strong')
66532                         .text(t('issues.suggested'));
66533
66534                     enter
66535                         .append('table')
66536                         .attr('class', 'tagDiff-table')
66537                         .selectAll('.tagDiff-row')
66538                         .data(tagDiff)
66539                         .enter()
66540                         .append('tr')
66541                         .attr('class', 'tagDiff-row')
66542                         .append('td')
66543                         .attr('class', function(d) {
66544                             var klass = d.type === '+' ? 'add' : 'remove';
66545                             return 'tagDiff-cell tagDiff-cell-' + klass;
66546                         })
66547                         .text(function(d) { return d.display; });
66548                 }
66549             };
66550
66551
66552             validation.type = type;
66553
66554             return validation;
66555         }
66556
66557         function validationTagSuggestsArea(context) {
66558             var type = 'tag_suggests_area';
66559
66560
66561             var validation = function checkTagSuggestsArea(entity, graph) {
66562                 if (entity.type !== 'way' || entity.isClosed()) return [];
66563
66564                 var tagSuggestingArea = entity.tagSuggestingArea();
66565                 if (!tagSuggestingArea) {
66566                     return [];
66567                 }
66568
66569                 if (context.presets().matchTags(tagSuggestingArea, 'line') ===
66570                     context.presets().matchTags(tagSuggestingArea, 'area')) {
66571                     // these tags also allow lines and making this an area wouldn't matter
66572                     return [];
66573                 }
66574
66575                 var tagText = utilTagText({ tags: tagSuggestingArea });
66576                 var fixes = [];
66577
66578                 var connectEndpointsOnClick;
66579
66580                 // must have at least three nodes to close this automatically
66581                 if (entity.nodes.length >= 3) {
66582                     var nodes = graph.childNodes(entity), testNodes;
66583                     var firstToLastDistanceMeters = geoSphericalDistance(nodes[0].loc, nodes[nodes.length-1].loc);
66584
66585                     // if the distance is very small, attempt to merge the endpoints
66586                     if (firstToLastDistanceMeters < 0.75) {
66587                         testNodes = nodes.slice();   // shallow copy
66588                         testNodes.pop();
66589                         testNodes.push(testNodes[0]);
66590                         // make sure this will not create a self-intersection
66591                         if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
66592                             connectEndpointsOnClick = function(context) {
66593                                 var way = context.entity(this.issue.entityIds[0]);
66594                                 context.perform(
66595                                     actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
66596                                     t('issues.fix.connect_endpoints.annotation')
66597                                 );
66598                             };
66599                         }
66600                     }
66601
66602                     if (!connectEndpointsOnClick) {
66603                         // if the points were not merged, attempt to close the way
66604                         testNodes = nodes.slice();   // shallow copy
66605                         testNodes.push(testNodes[0]);
66606                         // make sure this will not create a self-intersection
66607                         if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
66608                             connectEndpointsOnClick = function(context) {
66609                                 var wayId = this.issue.entityIds[0];
66610                                 var way = context.entity(wayId);
66611                                 var nodeId = way.nodes[0];
66612                                 var index = way.nodes.length;
66613                                 context.perform(
66614                                     actionAddVertex(wayId, nodeId, index),
66615                                     t('issues.fix.connect_endpoints.annotation')
66616                                 );
66617                             };
66618                         }
66619                     }
66620                 }
66621
66622                 fixes.push(new validationIssueFix({
66623                     title: t('issues.fix.connect_endpoints.title'),
66624                     onClick: connectEndpointsOnClick
66625                 }));
66626
66627                 fixes.push(new validationIssueFix({
66628                     icon: 'iD-operation-delete',
66629                     title: t('issues.fix.remove_tag.title'),
66630                     onClick: function(context) {
66631                         var entityId = this.issue.entityIds[0];
66632                         var entity = context.entity(entityId);
66633                         var tags = Object.assign({}, entity.tags);  // shallow copy
66634                         for (var key in tagSuggestingArea) {
66635                             delete tags[key];
66636                         }
66637                         context.perform(
66638                             actionChangeTags(entityId, tags),
66639                             t('issues.fix.remove_tag.annotation')
66640                         );
66641                     }
66642                 }));
66643
66644                 return [new validationIssue({
66645                     type: type,
66646                     severity: 'warning',
66647                     message: function(context) {
66648                         var entity = context.hasEntity(this.entityIds[0]);
66649                         return entity ? t('issues.tag_suggests_area.message', {
66650                             feature: utilDisplayLabel(entity, context),
66651                             tag: tagText
66652                         }) : '';
66653                     },
66654                     reference: showReference,
66655                     entityIds: [entity.id],
66656                     hash: JSON.stringify(tagSuggestingArea) +
66657                         // avoid stale "connect endpoints" fix
66658                         (typeof connectEndpointsOnClick),
66659                     fixes: fixes
66660                 })];
66661
66662
66663                 function showReference(selection) {
66664                     selection.selectAll('.issue-reference')
66665                         .data([0])
66666                         .enter()
66667                         .append('div')
66668                         .attr('class', 'issue-reference')
66669                         .text(t('issues.tag_suggests_area.reference'));
66670                 }
66671             };
66672
66673             validation.type = type;
66674
66675             return validation;
66676         }
66677
66678         function validationUnsquareWay(context) {
66679             var type = 'unsquare_way';
66680             var DEFAULT_DEG_THRESHOLD = 5;   // see also issues.js
66681
66682             // use looser epsilon for detection to reduce warnings of buildings that are essentially square already
66683             var epsilon = 0.05;
66684             var nodeThreshold = 10;
66685
66686             function isBuilding(entity, graph) {
66687                 if (entity.type !== 'way' || entity.geometry(graph) !== 'area') return false;
66688                 return entity.tags.building && entity.tags.building !== 'no';
66689             }
66690
66691
66692             var validation = function checkUnsquareWay(entity, graph) {
66693
66694                 if (!isBuilding(entity, graph)) return [];
66695
66696                 // don't flag ways marked as physically unsquare
66697                 if (entity.tags.nonsquare === 'yes') return [];
66698
66699                 var isClosed = entity.isClosed();
66700                 if (!isClosed) return [];        // this building has bigger problems
66701
66702                 // don't flag ways with lots of nodes since they are likely detail-mapped
66703                 var nodes = graph.childNodes(entity).slice();    // shallow copy
66704                 if (nodes.length > nodeThreshold + 1) return [];   // +1 because closing node appears twice
66705
66706                 // ignore if not all nodes are fully downloaded
66707                 var osm = services$1.osm;
66708                 if (!osm || nodes.some(function(node) { return !osm.isDataLoaded(node.loc); })) return [];
66709
66710                 // don't flag connected ways to avoid unresolvable unsquare loops
66711                 var hasConnectedSquarableWays = nodes.some(function(node) {
66712                     return graph.parentWays(node).some(function(way) {
66713                         if (way.id === entity.id) return false;
66714                         if (isBuilding(way, graph)) return true;
66715                         return graph.parentRelations(way).some(function(parentRelation) {
66716                             return parentRelation.isMultipolygon() &&
66717                                 parentRelation.tags.building &&
66718                                 parentRelation.tags.building !== 'no';
66719                         });
66720                     });
66721                 });
66722                 if (hasConnectedSquarableWays) return [];
66723
66724
66725                 // user-configurable square threshold
66726                 var storedDegreeThreshold = context.storage('validate-square-degrees');
66727                 var degreeThreshold = isNaN(storedDegreeThreshold) ? DEFAULT_DEG_THRESHOLD : parseFloat(storedDegreeThreshold);
66728
66729                 var points = nodes.map(function(node) { return context.projection(node.loc); });
66730                 if (!geoOrthoCanOrthogonalize(points, isClosed, epsilon, degreeThreshold, true)) return [];
66731
66732                 var autoArgs;
66733                 // don't allow autosquaring features linked to wikidata
66734                 if (!entity.tags.wikidata) {
66735                     // use same degree threshold as for detection
66736                     var autoAction = actionOrthogonalize(entity.id, context.projection, undefined, degreeThreshold);
66737                     autoAction.transitionable = false;  // when autofixing, do it instantly
66738                     autoArgs = [autoAction, t('operations.orthogonalize.annotation.area')];
66739                 }
66740
66741                 return [new validationIssue({
66742                     type: type,
66743                     severity: 'warning',
66744                     message: function(context) {
66745                         var entity = context.hasEntity(this.entityIds[0]);
66746                         return entity ? t('issues.unsquare_way.message', { feature: utilDisplayLabel(entity, context) }) : '';
66747                     },
66748                     reference: showReference,
66749                     entityIds: [entity.id],
66750                     hash: JSON.stringify(autoArgs !== undefined) + degreeThreshold,
66751                     fixes: [
66752                         new validationIssueFix({
66753                             icon: 'iD-operation-orthogonalize',
66754                             title: t('issues.fix.square_feature.title'),
66755                             autoArgs: autoArgs,
66756                             onClick: function(context, completionHandler) {
66757                                 var entityId = this.issue.entityIds[0];
66758                                 // use same degree threshold as for detection
66759                                 context.perform(
66760                                     actionOrthogonalize(entityId, context.projection, undefined, degreeThreshold),
66761                                     t('operations.orthogonalize.annotation.area')
66762                                 );
66763                                 // run after the squaring transition (currently 150ms)
66764                                 window.setTimeout(function() { completionHandler(); }, 175);
66765                             }
66766                         }),
66767                         /*
66768                         new validationIssueFix({
66769                             title: t('issues.fix.tag_as_unsquare.title'),
66770                             onClick: function(context) {
66771                                 var entityId = this.issue.entityIds[0];
66772                                 var entity = context.entity(entityId);
66773                                 var tags = Object.assign({}, entity.tags);  // shallow copy
66774                                 tags.nonsquare = 'yes';
66775                                 context.perform(
66776                                     actionChangeTags(entityId, tags),
66777                                     t('issues.fix.tag_as_unsquare.annotation')
66778                                 );
66779                             }
66780                         })
66781                         */
66782                     ]
66783                 })];
66784
66785                 function showReference(selection) {
66786                     selection.selectAll('.issue-reference')
66787                         .data([0])
66788                         .enter()
66789                         .append('div')
66790                         .attr('class', 'issue-reference')
66791                         .text(t('issues.unsquare_way.buildings.reference'));
66792                 }
66793             };
66794
66795             validation.type = type;
66796
66797             return validation;
66798         }
66799
66800
66801
66802         var Validations = /*#__PURE__*/Object.freeze({
66803                 validationAlmostJunction: validationAlmostJunction,
66804                 validationCloseNodes: validationCloseNodes,
66805                 validationCrossingWays: validationCrossingWays,
66806                 validationDisconnectedWay: validationDisconnectedWay,
66807                 validationFixmeTag: validationFixmeTag,
66808                 validationGenericName: validationGenericName,
66809                 validationImpossibleOneway: validationImpossibleOneway,
66810                 validationIncompatibleSource: validationIncompatibleSource,
66811                 validationFormatting: validationFormatting,
66812                 validationMaprules: validationMaprules,
66813                 validationMissingRole: validationMissingRole,
66814                 validationMissingTag: validationMissingTag,
66815                 validationOutdatedTags: validationOutdatedTags,
66816                 validationPrivateData: validationPrivateData,
66817                 validationTagSuggestsArea: validationTagSuggestsArea,
66818                 validationUnsquareWay: validationUnsquareWay
66819         });
66820
66821         function coreValidator(context) {
66822             var dispatch$1 = dispatch('validated', 'focusedIssue');
66823             var validator = utilRebind({}, dispatch$1, 'on');
66824
66825             var _rules = {};
66826             var _disabledRules = {};
66827
66828             var _ignoredIssueIDs = {};       // issue.id -> true
66829             var _issuesByIssueID = {};       // issue.id -> issue
66830             var _issuesByEntityID = {};      // entity.id -> set(issue.id)
66831             var _validatedGraph = null;
66832             var _deferred = new Set();
66833
66834             //
66835             // initialize the validator rulesets
66836             //
66837             validator.init = function() {
66838                 Object.values(Validations).forEach(function(validation) {
66839                     if (typeof validation !== 'function') return;
66840
66841                     var fn = validation(context);
66842                     var key = fn.type;
66843                     _rules[key] = fn;
66844                 });
66845
66846                 var disabledRules = context.storage('validate-disabledRules');
66847                 if (disabledRules) {
66848                     disabledRules.split(',')
66849                         .forEach(function(key) { _disabledRules[key] = true; });
66850                 }
66851             };
66852
66853
66854             //
66855             // clear caches, called whenever iD resets after a save
66856             //
66857             validator.reset = function() {
66858                 Array.from(_deferred).forEach(function(handle) {
66859                     window.cancelIdleCallback(handle);
66860                     _deferred.delete(handle);
66861                 });
66862
66863                 // clear caches
66864                 _ignoredIssueIDs = {};
66865                 _issuesByIssueID = {};
66866                 _issuesByEntityID = {};
66867                 _validatedGraph = null;
66868
66869                 for (var key in _rules) {
66870                     if (typeof _rules[key].reset === 'function') {
66871                         _rules[key].reset();   // 'crossing_ways' is the only one like this
66872                     }
66873                 }
66874             };
66875
66876             validator.resetIgnoredIssues = function() {
66877                 _ignoredIssueIDs = {};
66878                 // reload UI
66879                 dispatch$1.call('validated');
66880             };
66881
66882
66883             // when the user changes the squaring thereshold, rerun this on all buildings
66884             validator.changeSquareThreshold = function() {
66885                 var checkUnsquareWay = _rules.unsquare_way;
66886                 if (typeof checkUnsquareWay !== 'function') return;
66887
66888                 // uncache existing
66889                 Object.values(_issuesByIssueID)
66890                     .filter(function(issue) { return issue.type === 'unsquare_way'; })
66891                     .forEach(function(issue) {
66892                         var entityId = issue.entityIds[0];   // always 1 entity for unsquare way
66893                         if (_issuesByEntityID[entityId]) {
66894                             _issuesByEntityID[entityId].delete(issue.id);
66895                         }
66896                         delete _issuesByIssueID[issue.id];
66897                     });
66898
66899                 var buildings = context.intersects(geoExtent([-180,-90],[180, 90]))  // everywhere
66900                     .filter(function(entity) {
66901                         return entity.type === 'way' && entity.tags.building && entity.tags.building !== 'no';
66902                     });
66903
66904                 // rerun for all buildings
66905                 buildings.forEach(function(entity) {
66906                     var detected = checkUnsquareWay(entity, context.graph());
66907                     if (detected.length !== 1) return;
66908
66909                     var issue = detected[0];
66910                     var ignoreFix = new validationIssueFix({
66911                         title: t('issues.fix.ignore_issue.title'),
66912                         icon: 'iD-icon-close',
66913                         onClick: function() {
66914                             ignoreIssue(this.issue.id);
66915                         }
66916                     });
66917                     ignoreFix.type = 'ignore';
66918                     ignoreFix.issue = issue;
66919                     issue.fixes.push(ignoreFix);
66920
66921                     if (!_issuesByEntityID[entity.id]) {
66922                         _issuesByEntityID[entity.id] = new Set();
66923                     }
66924                     _issuesByEntityID[entity.id].add(issue.id);
66925                     _issuesByIssueID[issue.id] = issue;
66926                 });
66927
66928                 dispatch$1.call('validated');
66929             };
66930
66931
66932             // options = {
66933             //     what: 'all',     // 'all' or 'edited'
66934             //     where: 'all',   // 'all' or 'visible'
66935             //     includeIgnored: false   // true, false, or 'only'
66936             //     includeDisabledRules: false   // true, false, or 'only'
66937             // };
66938             validator.getIssues = function(options) {
66939                 var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false, includeDisabledRules: false }, options);
66940                 var issues = Object.values(_issuesByIssueID);
66941                 var changes = context.history().difference().changes();
66942                 var view = context.map().extent();
66943
66944                 return issues.filter(function(issue) {
66945                     if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) return false;
66946                     if (!opts.includeDisabledRules && _disabledRules[issue.type]) return false;
66947
66948                     if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false;
66949                     if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false;
66950
66951                     // Sanity check:  This issue may be for an entity that not longer exists.
66952                     // If we detect this, uncache and return false so it is not included..
66953                     var entityIds = issue.entityIds || [];
66954                     for (var i = 0; i < entityIds.length; i++) {
66955                         var entityId = entityIds[i];
66956                         if (!context.hasEntity(entityId)) {
66957                             delete _issuesByEntityID[entityId];
66958                             delete _issuesByIssueID[issue.id];
66959                             return false;
66960                         }
66961                     }
66962
66963                     if (opts.what === 'edited') {
66964                         var isEdited = entityIds.some(function(entityId) { return changes[entityId]; });
66965                         if (entityIds.length && !isEdited) return false;
66966                     }
66967
66968                     if (opts.where === 'visible') {
66969                         var extent = issue.extent(context.graph());
66970                         if (!view.intersects(extent)) return false;
66971                     }
66972
66973                     return true;
66974                 });
66975             };
66976
66977             validator.focusIssue = function(issue) {
66978                 var extent = issue.extent(context.graph());
66979
66980                 if (extent) {
66981                     var setZoom = Math.max(context.map().zoom(), 19);
66982                     context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
66983
66984                     // select the first entity
66985                     if (issue.entityIds && issue.entityIds.length) {
66986                         window.setTimeout(function() {
66987                             var ids = issue.entityIds;
66988                             context.enter(modeSelect(context, [ids[0]]));
66989                             dispatch$1.call('focusedIssue', this, issue);
66990                         }, 250);  // after ease
66991                     }
66992                 }
66993             };
66994
66995
66996             validator.getIssuesBySeverity = function(options) {
66997                 var groups = utilArrayGroupBy(validator.getIssues(options), 'severity');
66998                 groups.error = groups.error || [];
66999                 groups.warning = groups.warning || [];
67000                 return groups;
67001             };
67002
67003
67004             validator.getEntityIssues = function(entityID, options) {
67005                 var issueIDs = _issuesByEntityID[entityID];
67006                 if (!issueIDs) return [];
67007
67008                 var opts = options || {};
67009
67010                 return Array.from(issueIDs)
67011                     .map(function(id) { return _issuesByIssueID[id]; })
67012                     .filter(function(issue) {
67013                         if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) return false;
67014                         if (!opts.includeDisabledRules && _disabledRules[issue.type]) return false;
67015
67016                         if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false;
67017                         if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false;
67018
67019                         return true;
67020                     });
67021             };
67022
67023
67024             validator.getRuleKeys = function() {
67025                 return Object.keys(_rules)
67026                     .filter(function(key) { return key !== 'maprules'; })
67027                     .sort(function(key1, key2) {
67028                         // alphabetize by localized title
67029                         return t('issues.' + key1 + '.title') < t('issues.' + key2 + '.title') ? -1 : 1;
67030                     });
67031             };
67032
67033
67034             validator.isRuleEnabled = function(key) {
67035                 return !_disabledRules[key];
67036             };
67037
67038
67039             validator.toggleRule = function(key) {
67040                 if (_disabledRules[key]) {
67041                     delete _disabledRules[key];
67042                 } else {
67043                     _disabledRules[key] = true;
67044                 }
67045
67046                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
67047                 validator.validate();
67048             };
67049
67050
67051             validator.disableRules = function(keys) {
67052                 _disabledRules = {};
67053                 keys.forEach(function(k) {
67054                     _disabledRules[k] = true;
67055                 });
67056
67057                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
67058                 validator.validate();
67059             };
67060
67061
67062             //
67063             // Remove a single entity and all its related issues from the caches
67064             //
67065             function uncacheEntityID(entityID) {
67066                 var issueIDs = _issuesByEntityID[entityID];
67067                 if (!issueIDs) return;
67068
67069                 issueIDs.forEach(function(issueID) {
67070                     var issue = _issuesByIssueID[issueID];
67071                     if (issue) {
67072                         // When multiple entities are involved (e.g. crossing_ways),
67073                         // remove this issue from the other entity caches too..
67074                         var entityIds = issue.entityIds || [];
67075                         entityIds.forEach(function(other) {
67076                             if (other !== entityID) {
67077                                 if (_issuesByEntityID[other]) {
67078                                     _issuesByEntityID[other].delete(issueID);
67079                                 }
67080                             }
67081                         });
67082                     }
67083
67084                     delete _issuesByIssueID[issueID];
67085                 });
67086
67087                 delete _issuesByEntityID[entityID];
67088             }
67089
67090
67091             function ignoreIssue(id) {
67092                 _ignoredIssueIDs[id] = true;
67093             }
67094
67095
67096             //
67097             // Run validation on a single entity for the given graph
67098             //
67099             function validateEntity(entity, graph) {
67100                 var entityIssues = [];
67101                 var ran = {};
67102
67103                 // runs validation and appends resulting issues,
67104                 // returning true if validation passed without issue
67105                 function runValidation(key) {
67106                     if (ran[key]) return true;
67107
67108                     var fn = _rules[key];
67109                     if (typeof fn !== 'function') {
67110                         console.error('no such validation rule = ' + key);  // eslint-disable-line no-console
67111                         ran[key] = true;
67112                         return true;
67113                     }
67114
67115                     var detected = fn(entity, graph);
67116                     detected.forEach(function(issue) {
67117                         var hasIgnoreFix = issue.fixes && issue.fixes.length && issue.fixes[issue.fixes.length - 1].type === 'ignore';
67118                         if (issue.severity === 'warning' && !hasIgnoreFix) {
67119                             var ignoreFix = new validationIssueFix({
67120                                 title: t('issues.fix.ignore_issue.title'),
67121                                 icon: 'iD-icon-close',
67122                                 onClick: function() {
67123                                     ignoreIssue(this.issue.id);
67124                                 }
67125                             });
67126                             ignoreFix.type = 'ignore';
67127                             ignoreFix.issue = issue;
67128                             issue.fixes.push(ignoreFix);
67129                         }
67130                     });
67131                     entityIssues = entityIssues.concat(detected);
67132                     ran[key] = true;
67133                     return !detected.length;
67134                 }
67135
67136                 // run some validations manually to control the order and to skip some
67137
67138                 runValidation('missing_role');
67139
67140                 if (entity.type === 'relation') {
67141                     if (!runValidation('outdated_tags')) {
67142                         // don't flag missing tags if they are on the outer way
67143                         ran.missing_tag = true;
67144                     }
67145                 }
67146
67147                 runValidation('missing_tag');
67148
67149                 runValidation('outdated_tags');
67150
67151                 runValidation('crossing_ways');
67152                 runValidation('almost_junction');
67153
67154                 // only check impossible_oneway if no disconnected_way issues
67155                 if (runValidation('disconnected_way')) {
67156                     runValidation('impossible_oneway');
67157                 } else {
67158                     ran.impossible_oneway = true;
67159                 }
67160
67161                 runValidation('tag_suggests_area');
67162
67163                 // run all rules not yet run
67164                 Object.keys(_rules).forEach(runValidation);
67165
67166                 return entityIssues;
67167             }
67168
67169             function entityIDsToValidate(entityIDs, graph) {
67170                 var processedIDs = new Set();
67171                 return entityIDs.reduce(function(acc, entityID) {
67172                     // keep redundancy check separate from `acc` because an `entityID`
67173                     // could have been added to `acc` as a related entity through an earlier pass
67174                     if (processedIDs.has(entityID)) return acc;
67175                     processedIDs.add(entityID);
67176
67177                     var entity = graph.hasEntity(entityID);
67178                     if (!entity) return acc;
67179
67180                     acc.add(entityID);
67181
67182                     var checkParentRels = [entity];
67183
67184                     if (entity.type === 'node') {   // include parent ways
67185                         graph.parentWays(entity).forEach(function(parentWay) {
67186                             acc.add(parentWay.id);
67187                             checkParentRels.push(parentWay);
67188                         });
67189                     } else if (entity.type === 'relation') {   // include members
67190                         entity.members.forEach(function(member) {
67191                             acc.add(member.id);
67192                         });
67193                     } else if (entity.type === 'way') {   // include connected ways
67194                         entity.nodes.forEach(function(nodeID) {
67195                             graph._parentWays[nodeID].forEach(function(wayID) {
67196                                 acc.add(wayID);
67197                             });
67198                         });
67199                     }
67200
67201                     checkParentRels.forEach(function(entity) {   // include parent relations
67202                         if (entity.type !== 'relation') {        // but not super-relations
67203                             graph.parentRelations(entity).forEach(function(parentRelation) {
67204                                 acc.add(parentRelation.id);
67205                             });
67206                         }
67207                     });
67208
67209                     return acc;
67210
67211                 }, new Set());
67212             }
67213
67214             //
67215             // Run validation for several entities, supplied `entityIDs`
67216             //
67217             function validateEntities(entityIDs) {
67218
67219                 var graph = context.graph();
67220
67221                 // clear caches for existing issues related to these entities
67222                 entityIDs.forEach(uncacheEntityID);
67223
67224                 // detect new issues and update caches
67225                 entityIDs.forEach(function(entityID) {
67226                     var entity = graph.hasEntity(entityID);
67227                     // don't validate deleted entities
67228                     if (!entity) return;
67229
67230                     var issues = validateEntity(entity, graph);
67231                     issues.forEach(function(issue) {
67232                         var entityIds = issue.entityIds || [];
67233                         entityIds.forEach(function(entityId) {
67234                             if (!_issuesByEntityID[entityId]) {
67235                                 _issuesByEntityID[entityId] = new Set();
67236                             }
67237                             _issuesByEntityID[entityId].add(issue.id);
67238                         });
67239                         _issuesByIssueID[issue.id] = issue;
67240                     });
67241                 });
67242
67243                 dispatch$1.call('validated');
67244             }
67245
67246
67247             //
67248             // Validates anything that has changed since the last time it was run.
67249             // Also updates the "validatedGraph" to be the current graph
67250             // and dispatches a `validated` event when finished.
67251             //
67252             validator.validate = function() {
67253                 var currGraph = context.graph();
67254                 _validatedGraph = _validatedGraph || context.history().base();
67255                 if (currGraph === _validatedGraph) {
67256                     dispatch$1.call('validated');
67257                     return;
67258                 }
67259                 var oldGraph = _validatedGraph;
67260                 var difference = coreDifference(oldGraph, currGraph);
67261                 _validatedGraph = currGraph;
67262
67263                 for (var key in _rules) {
67264                     if (typeof _rules[key].reset === 'function') {
67265                         _rules[key].reset();   // 'crossing_ways' is the only one like this
67266                     }
67267                 }
67268
67269                 var createdAndModifiedEntityIDs = difference.extantIDs(true);   // created/modified (true = w/relation members)
67270                 var entityIDsToCheck = entityIDsToValidate(createdAndModifiedEntityIDs, currGraph);
67271
67272                 // "validate" deleted entities in order to update their related entities
67273                 // (e.g. deleting the only highway connected to a road should create a disconnected highway issue)
67274                 var deletedEntityIDs = difference.deleted().map(function(entity) { return entity.id; });
67275                 var entityIDsToCheckForDeleted = entityIDsToValidate(deletedEntityIDs, oldGraph);
67276
67277                 // concat the sets
67278                 entityIDsToCheckForDeleted.forEach(entityIDsToCheck.add, entityIDsToCheck);
67279
67280                 validateEntities(entityIDsToCheck);   // dispatches 'validated'
67281             };
67282
67283
67284             // WHEN TO RUN VALIDATION:
67285             // When graph changes:
67286             context.history()
67287                 .on('restore.validator', validator.validate)   // restore saved history
67288                 .on('undone.validator', validator.validate)    // undo
67289                 .on('redone.validator', validator.validate);   // redo
67290                 // but not on 'change' (e.g. while drawing)
67291
67292             // When user chages editing modes:
67293             context
67294                 .on('exit.validator', validator.validate);
67295
67296             // When merging fetched data:
67297             context.history()
67298                 .on('merge.validator', function(entities) {
67299                     if (!entities) return;
67300                     var handle = window.requestIdleCallback(function() {
67301                         var ids = entities.map(function(entity) { return entity.id; });
67302                         validateEntities(entityIDsToValidate(ids, context.graph()));
67303                     });
67304                     _deferred.add(handle);
67305                 });
67306
67307
67308             return validator;
67309         }
67310
67311         function presetCollection(collection) {
67312             var maxSearchResults = 50;
67313
67314             var presets = {
67315
67316                 collection: collection,
67317
67318
67319                 item: function(id) {
67320                     return this.collection.find(function(d) {
67321                         return d.id === id;
67322                     });
67323                 },
67324
67325                 index: function(id) {
67326                     return this.collection.findIndex(function(d) {
67327                         return d.id === id;
67328                     });
67329                 },
67330
67331                 matchGeometry: function(geometry) {
67332                     return presetCollection(this.collection.filter(function(d) {
67333                         return d.matchGeometry(geometry);
67334                     }));
67335                 },
67336
67337                 matchAnyGeometry: function(geometries) {
67338                     return presetCollection(this.collection.filter(function(d) {
67339                         return geometries.some(function(geometry) {
67340                             return d.matchGeometry(geometry);
67341                         });
67342                     }));
67343                 },
67344
67345                 fallback: function(geometry) {
67346                     var id = geometry;
67347                     if (id === 'vertex') id = 'point';
67348                     return this.item(id);
67349                 },
67350
67351                 search: function(value, geometry, countryCode) {
67352                     if (!value) return this;
67353
67354                     value = value.toLowerCase().trim();
67355
67356                     // match at name beginning or just after a space (e.g. "office" -> match "Law Office")
67357                     function leading(a) {
67358                         var index = a.indexOf(value);
67359                         return index === 0 || a[index - 1] === ' ';
67360                     }
67361
67362                     // match at name beginning only
67363                     function leadingStrict(a) {
67364                         var index = a.indexOf(value);
67365                         return index === 0;
67366                     }
67367
67368                     function sortNames(a, b) {
67369                         var aCompare = (a.suggestion ? a.originalName : a.name()).toLowerCase();
67370                         var bCompare = (b.suggestion ? b.originalName : b.name()).toLowerCase();
67371
67372                         // priority if search string matches preset name exactly - #4325
67373                         if (value === aCompare) return -1;
67374                         if (value === bCompare) return 1;
67375
67376                         // priority for higher matchScore
67377                         var i = b.originalScore - a.originalScore;
67378                         if (i !== 0) return i;
67379
67380                         // priority if search string appears earlier in preset name
67381                         i = aCompare.indexOf(value) - bCompare.indexOf(value);
67382                         if (i !== 0) return i;
67383
67384                         // priority for shorter preset names
67385                         return aCompare.length - bCompare.length;
67386                     }
67387
67388                     var pool = this.collection;
67389                     if (countryCode) {
67390                         pool = pool.filter(function(a) {
67391                             if (!a.countryCodes) return true;
67392                             return a.countryCodes.indexOf(countryCode) !== -1;
67393                         });
67394                     }
67395                     var searchable = pool.filter(function(a) {
67396                         return a.searchable !== false && a.suggestion !== true;
67397                     });
67398                     var suggestions = pool.filter(function(a) {
67399                         return a.suggestion === true;
67400                     });
67401
67402                     // matches value to preset.name
67403                     var leading_name = searchable
67404                         .filter(function(a) {
67405                             return leading(a.name().toLowerCase());
67406                         }).sort(sortNames);
67407
67408                     // matches value to preset.terms values
67409                     var leading_terms = searchable
67410                         .filter(function(a) {
67411                             return (a.terms() || []).some(leading);
67412                         });
67413
67414                     // matches value to preset.tags values
67415                     var leading_tag_values = searchable
67416                         .filter(function(a) {
67417                             return Object.values(a.tags || {})
67418                                 .filter(function(val) { return val !== '*'; })
67419                                 .some(leading);
67420                         });
67421
67422                     var leading_suggestions = suggestions
67423                         .filter(function(a) {
67424                             return leadingStrict(a.originalName.toLowerCase());
67425                         }).sort(sortNames);
67426
67427                     // finds close matches to value in preset.name
67428                     var similar_name = searchable
67429                         .map(function(a) {
67430                             return { preset: a, dist: utilEditDistance(value, a.name()) };
67431                         }).filter(function(a) {
67432                             return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3;
67433                         }).sort(function(a, b) {
67434                             return a.dist - b.dist;
67435                         }).map(function(a) {
67436                             return a.preset;
67437                         });
67438
67439                     // finds close matches to value in preset.terms
67440                     var similar_terms = searchable
67441                         .filter(function(a) {
67442                             return (a.terms() || []).some(function(b) {
67443                                 return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3;
67444                             });
67445                         });
67446
67447                     var similar_suggestions = suggestions
67448                         .map(function(a) {
67449                             return { preset: a, dist: utilEditDistance(value, a.originalName.toLowerCase()) };
67450                         }).filter(function(a) {
67451                             return a.dist + Math.min(value.length - a.preset.originalName.length, 0) < 1;
67452                         }).sort(function(a, b) {
67453                             return a.dist - b.dist;
67454                         }).map(function(a) {
67455                             return a.preset;
67456                         });
67457
67458                     var results = leading_name.concat(
67459                         leading_suggestions,
67460                         leading_terms,
67461                         leading_tag_values,
67462                         similar_name,
67463                         similar_suggestions,
67464                         similar_terms
67465                     ).slice(0, maxSearchResults - 1);
67466
67467                     if (geometry) {
67468                         if (typeof geometry === 'string') {
67469                             results.push(presets.fallback(geometry));
67470                         } else {
67471                             geometry.forEach(function(geom) {
67472                                 results.push(presets.fallback(geom));
67473                             });
67474                         }
67475                     }
67476
67477                     return presetCollection(utilArrayUniq(results));
67478                 }
67479             };
67480
67481
67482             return presets;
67483         }
67484
67485         function presetCategory(id, category, all) {
67486             category = Object.assign({}, category);   // shallow copy
67487
67488             category.id = id;
67489
67490
67491             category.members = presetCollection(category.members.map(function(id) {
67492                 return all.item(id);
67493             }));
67494
67495
67496             category.geometry = category.members.collection.reduce(function(geometries, preset) {
67497                 for (var index in preset.geometry) {
67498                     var geometry = preset.geometry[index];
67499                     if (geometries.indexOf(geometry) === -1) {
67500                         geometries.push(geometry);
67501                     }
67502                 }
67503                 return geometries;
67504             }, []);
67505
67506
67507             category.matchGeometry = function(geometry) {
67508                 return category.geometry.indexOf(geometry) >= 0;
67509             };
67510
67511
67512             category.matchScore = function() {
67513                 return -1;
67514             };
67515
67516
67517             category.name = function() {
67518                 return t('presets.categories.' + id + '.name', {'default': id});
67519             };
67520
67521
67522             category.terms = function() {
67523                 return [];
67524             };
67525
67526
67527             return category;
67528         }
67529
67530         function presetField(id, field) {
67531             field = Object.assign({}, field);   // shallow copy
67532
67533             field.id = id;
67534
67535             // for use in classes, element ids, css selectors
67536             field.safeid = id.replace(/[^_a-zA-Z0-9\-]/g, '_');
67537
67538             field.matchGeometry = function(geometry) {
67539                 return !field.geometry || field.geometry === geometry;
67540             };
67541
67542
67543             field.t = function(scope, options) {
67544                 return t('presets.fields.' + id + '.' + scope, options);
67545             };
67546
67547
67548             field.label = function() {
67549                 return field.overrideLabel || field.t('label', {'default': id});
67550             };
67551
67552
67553             var placeholder = field.placeholder;
67554             field.placeholder = function() {
67555                 return field.t('placeholder', {'default': placeholder});
67556             };
67557
67558
67559             field.originalTerms = (field.terms || []).join();
67560
67561             field.terms = function() {
67562                 return field.t('terms', { 'default': field.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
67563             };
67564
67565
67566             return field;
67567         }
67568
67569         function presetPreset(id, preset, fields, visible, rawPresets) {
67570             preset = Object.assign({}, preset);   // shallow copy
67571
67572             preset.id = id;
67573
67574             preset.parentPresetID = function() {
67575                 var endIndex = preset.id.lastIndexOf('/');
67576                 if (endIndex < 0) return null;
67577
67578                 return preset.id.substring(0, endIndex);
67579             };
67580
67581
67582             // For a preset without fields, use the fields of the parent preset.
67583             // Replace {preset} placeholders with the fields of the specified presets.
67584             function resolveFieldInheritance() {
67585
67586                 // Skip `fields` for the keys which define the preset.
67587                 // These are usually `typeCombo` fields like `shop=*`
67588                 function shouldInheritFieldWithID(fieldID) {
67589                     var f = fields[fieldID];
67590                     if (f.key) {
67591                         if (preset.tags[f.key] !== undefined &&
67592                             // inherit anyway if multiple values are allowed or just a checkbox
67593                             f.type !== 'multiCombo' && f.type !== 'semiCombo' && f.type !== 'check') {
67594                             return false;
67595                         }
67596                     }
67597                     return true;
67598                 }
67599
67600                 // returns an array of field IDs to inherit from the given presetID, if found
67601                 function inheritedFieldIDs(presetID, prop) {
67602                     if (!presetID) return null;
67603
67604                     var inheritPreset = rawPresets[presetID];
67605                     if (!inheritPreset) return null;
67606
67607                     var inheritFieldIDs = inheritPreset[prop] || [];
67608
67609                     if (prop === 'fields') {
67610                         inheritFieldIDs = inheritFieldIDs.filter(shouldInheritFieldWithID);
67611                     }
67612
67613                     return inheritFieldIDs;
67614                 }
67615
67616
67617                 ['fields', 'moreFields'].forEach(function(prop) {
67618                     var fieldIDs = [];
67619                     if (preset[prop] && preset[prop].length) {    // fields were defined
67620                         preset[prop].forEach(function(fieldID) {
67621                             var match = fieldID.match(/\{(.*)\}/);
67622                             if (match !== null) {        // presetID wrapped in braces {}
67623                                 var inheritIDs = inheritedFieldIDs(match[1], prop);
67624                                 if (inheritIDs !== null) {
67625                                     fieldIDs = fieldIDs.concat(inheritIDs);
67626                                 } else {
67627                                     /* eslint-disable no-console */
67628                                     console.log('Cannot resolve presetID ' + match[0] +
67629                                         ' found in ' + preset.id + ' ' + prop);
67630                                     /* eslint-enable no-console */
67631                                 }
67632                             } else {
67633                                 fieldIDs.push(fieldID);  // no braces - just a normal field
67634                             }
67635                         });
67636
67637                     } else {  // no fields defined, so use the parent's if possible
67638                         fieldIDs = inheritedFieldIDs(preset.parentPresetID(), prop);
67639                     }
67640                     // resolve duplicate fields
67641                     fieldIDs = utilArrayUniq(fieldIDs);
67642
67643                     // update this preset with the results
67644                     preset[prop] = fieldIDs;
67645
67646                     // update the raw object to allow for multiple levels of inheritance
67647                     rawPresets[preset.id][prop] = fieldIDs;
67648                 });
67649             }
67650
67651             if (rawPresets) {
67652                 resolveFieldInheritance();
67653             }
67654
67655             preset.fields = (preset.fields || []).map(getFields);
67656             preset.moreFields = (preset.moreFields || []).map(getFields);
67657             preset.geometry = (preset.geometry || []);
67658
67659             visible = visible || false;
67660
67661             function getFields(f) {
67662                 return fields[f];
67663             }
67664
67665
67666             preset.matchGeometry = function(geometry) {
67667                 return preset.geometry.indexOf(geometry) >= 0;
67668             };
67669
67670
67671             preset.originalScore = preset.matchScore || 1;
67672
67673
67674             preset.matchScore = function(entityTags) {
67675                 var tags = preset.tags;
67676                 var seen = {};
67677                 var score = 0;
67678                 var k;
67679
67680                 // match on tags
67681                 for (k in tags) {
67682                     seen[k] = true;
67683                     if (entityTags[k] === tags[k]) {
67684                         score += preset.originalScore;
67685                     } else if (tags[k] === '*' && k in entityTags) {
67686                         score += preset.originalScore / 2;
67687                     } else {
67688                         return -1;
67689                     }
67690                 }
67691
67692                 // boost score for additional matches in addTags - #6802
67693                 var addTags = preset.addTags;
67694                 for (k in addTags) {
67695                     if (!seen[k] && entityTags[k] === addTags[k]) {
67696                         score += preset.originalScore;
67697                     }
67698                 }
67699
67700                 return score;
67701             };
67702
67703
67704             var _textCache = {};
67705
67706             preset.t = function(scope, options) {
67707                 var textID = 'presets.presets.' + id + '.' + scope;
67708
67709                 if (_textCache[textID]) return _textCache[textID];
67710
67711                 var text = t(textID, options);
67712                 _textCache[textID] = text;
67713                 return text;
67714             };
67715
67716
67717             preset.originalName = preset.name || '';
67718
67719
67720             preset.name = function() {
67721                 if (preset.suggestion) {
67722                     var path = id.split('/');
67723                     path.pop();  // remove brand name
67724                     // NOTE: insert an en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
67725                     return preset.originalName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
67726                 }
67727                 return preset.t('name', { 'default': preset.originalName });
67728             };
67729
67730
67731             preset.originalTerms = (preset.terms || []).join();
67732
67733
67734             preset.terms = function() {
67735                 return preset.t('terms', { 'default': preset.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
67736             };
67737
67738
67739             preset.isFallback = function() {
67740                 var tagCount = Object.keys(preset.tags).length;
67741                 return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area'));
67742             };
67743
67744             preset.visible = function(val) {
67745                 if (!arguments.length) return visible;
67746                 visible = val;
67747                 return visible;
67748             };
67749
67750
67751             var reference = preset.reference || {};
67752             preset.reference = function(geometry) {
67753                 // Lookup documentation on Wikidata...
67754                 var qid = preset.tags.wikidata || preset.tags['brand:wikidata'] || preset.tags['operator:wikidata'];
67755                 if (qid) {
67756                     return { qid: qid };
67757                 }
67758
67759                 // Lookup documentation on OSM Wikibase...
67760                 var key = reference.key || Object.keys(utilObjectOmit(preset.tags, 'name'))[0];
67761                 var value = reference.value || preset.tags[key];
67762
67763                 if (geometry === 'relation' && key === 'type') {
67764                     if (value in preset.tags) {
67765                         key = value;
67766                         value = preset.tags[key];
67767                     } else {
67768                         return { rtype: value };
67769                     }
67770                 }
67771
67772                 if (value === '*') {
67773                     return { key: key };
67774                 } else {
67775                     return { key: key, value: value };
67776                 }
67777             };
67778
67779
67780             preset.removeTags = preset.removeTags || preset.addTags || preset.tags || {};
67781             preset.unsetTags = function(tags, geometry) {
67782                 tags = utilObjectOmit(tags, Object.keys(preset.removeTags));
67783
67784                 for (var f in preset.fields) {
67785                     var field = preset.fields[f];
67786                     if (field.matchGeometry(geometry) && field.default === tags[field.key]) {
67787                         delete tags[field.key];
67788                     }
67789                 }
67790
67791                 delete tags.area;
67792                 return tags;
67793             };
67794
67795
67796             preset.addTags = preset.addTags || preset.tags || {};
67797             preset.setTags = function(tags, geometry, skipFieldDefaults) {
67798                 var addTags = preset.addTags;
67799                 var k;
67800
67801                 tags = Object.assign({}, tags);   // shallow copy
67802
67803                 for (k in addTags) {
67804                     if (addTags[k] === '*') {
67805                         tags[k] = 'yes';
67806                     } else {
67807                         tags[k] = addTags[k];
67808                     }
67809                 }
67810
67811                 // Add area=yes if necessary.
67812                 // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of:
67813                 // 1. chosen preset could be either an area or a line (`barrier=city_wall`)
67814                 // 2. chosen preset doesn't have a key in osmAreaKeys (`railway=station`)
67815                 if (!addTags.hasOwnProperty('area')) {
67816                     delete tags.area;
67817                     if (geometry === 'area') {
67818                         var needsAreaTag = true;
67819                         if (preset.geometry.indexOf('line') === -1) {
67820                             for (k in addTags) {
67821                                 if (k in osmAreaKeys) {
67822                                     needsAreaTag = false;
67823                                     break;
67824                                 }
67825                             }
67826                         }
67827                         if (needsAreaTag) {
67828                             tags.area = 'yes';
67829                         }
67830                     }
67831                 }
67832                 if (geometry && !skipFieldDefaults) {
67833                     for (var f in preset.fields) {
67834                         var field = preset.fields[f];
67835                         if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
67836                             tags[field.key] = field.default;
67837                         }
67838                     }
67839                 }
67840
67841                 return tags;
67842             };
67843
67844
67845             return preset;
67846         }
67847
67848         function presetIndex(context) {
67849             // a presetCollection with methods for
67850             // loading new data and returning defaults
67851
67852             var dispatch$1 = dispatch('recentsChange', 'favoritePreset');
67853
67854             var all = presetCollection([]);
67855             var _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
67856             var _fields = {};
67857             var _universal = [];
67858             var _favorites, _recents;
67859             // presets that the user can add
67860             var _addablePresetIDs;
67861
67862             // Index of presets by (geometry, tag key).
67863             var _index = {
67864                 point: {},
67865                 vertex: {},
67866                 line: {},
67867                 area: {},
67868                 relation: {}
67869             };
67870
67871             all.match = function(entity, resolver) {
67872                 return resolver.transient(entity, 'presetMatch', function() {
67873                     var geometry = entity.geometry(resolver);
67874
67875                     // Treat entities on addr:interpolation lines as points, not vertices - #3241
67876                     if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) {
67877                         geometry = 'point';
67878                     }
67879
67880                     return all.matchTags(entity.tags, geometry);
67881                 });
67882             };
67883
67884             all.matchTags = function(tags, geometry) {
67885
67886                 var address;
67887                 var geometryMatches = _index[geometry];
67888                 var best = -1;
67889                 var match;
67890
67891                 for (var k in tags) {
67892                     // If any part of an address is present,
67893                     // allow fallback to "Address" preset - #4353
67894                     if (/^addr:/.test(k) && geometryMatches['addr:*']) {
67895                         address = geometryMatches['addr:*'][0];
67896                     }
67897
67898                     var keyMatches = geometryMatches[k];
67899                     if (!keyMatches) continue;
67900
67901                     for (var i = 0; i < keyMatches.length; i++) {
67902                         var score = keyMatches[i].matchScore(tags);
67903                         if (score > best) {
67904                             best = score;
67905                             match = keyMatches[i];
67906                         }
67907                     }
67908
67909                 }
67910
67911                 if (address && (!match || match.isFallback())) {
67912                     match = address;
67913                 }
67914                 return match || all.fallback(geometry);
67915             };
67916
67917             all.allowsVertex = function(entity, resolver) {
67918                 if (entity.type !== 'node') return false;
67919                 if (Object.keys(entity.tags).length === 0) return true;
67920
67921                 return resolver.transient(entity, 'vertexMatch', function() {
67922                     // address lines allow vertices to act as standalone points
67923                     if (entity.isOnAddressLine(resolver)) return true;
67924
67925                     var geometries = osmNodeGeometriesForTags(entity.tags);
67926                     if (geometries.vertex) return true;
67927                     if (geometries.point) return false;
67928                     // allow vertices for unspecified points
67929                     return true;
67930                 });
67931             };
67932
67933
67934             // Because of the open nature of tagging, iD will never have a complete
67935             // list of tags used in OSM, so we want it to have logic like "assume
67936             // that a closed way with an amenity tag is an area, unless the amenity
67937             // is one of these specific types". This function computes a structure
67938             // that allows testing of such conditions, based on the presets designated
67939             // as as supporting (or not supporting) the area geometry.
67940             //
67941             // The returned object L is a whitelist/blacklist of tags. A closed way
67942             // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])`
67943             // (see `Way#isArea()`). In other words, the keys of L form the whitelist,
67944             // and the subkeys form the blacklist.
67945             all.areaKeys = function() {
67946                 var areaKeys = {};
67947                 var ignore = ['barrier', 'highway', 'footway', 'railway', 'type'];  // probably a line..
67948
67949                 // ignore name-suggestion-index and deprecated presets
67950                 var presets = all.collection.filter(function(p) {
67951                     return !p.suggestion && !p.replacement;
67952                 });
67953
67954                 // whitelist
67955                 presets.forEach(function(d) {
67956                     for (var key in d.tags) break;
67957                     if (!key) return;
67958                     if (ignore.indexOf(key) !== -1) return;
67959
67960                     if (d.geometry.indexOf('area') !== -1) {    // probably an area..
67961                         areaKeys[key] = areaKeys[key] || {};
67962                     }
67963                 });
67964
67965                 // blacklist
67966                 presets.forEach(function(d) {
67967                     for (var key in d.tags) break;
67968                     if (!key) return;
67969                     if (ignore.indexOf(key) !== -1) return;
67970
67971                     var value = d.tags[key];
67972                     if (key in areaKeys &&                      // probably an area...
67973                         d.geometry.indexOf('line') !== -1 &&    // but sometimes a line
67974                         value !== '*') {
67975                         areaKeys[key][value] = true;
67976                     }
67977                 });
67978
67979                 return areaKeys;
67980             };
67981
67982             all.pointTags = function() {
67983                 return all.collection.reduce(function(pointTags, d) {
67984                     // ignore name-suggestion-index, deprecated, and generic presets
67985                     if (d.suggestion || d.replacement || d.searchable === false) return pointTags;
67986
67987                     // only care about the primary tag
67988                     for (var key in d.tags) break;
67989                     if (!key) return pointTags;
67990
67991                     // if this can be a point
67992                     if (d.geometry.indexOf('point') !== -1) {
67993                         pointTags[key] = pointTags[key] || {};
67994                         pointTags[key][d.tags[key]] = true;
67995                     }
67996                     return pointTags;
67997                 }, {});
67998             };
67999
68000             all.vertexTags = function() {
68001                 return all.collection.reduce(function(vertexTags, d) {
68002                     // ignore name-suggestion-index, deprecated, and generic presets
68003                     if (d.suggestion || d.replacement || d.searchable === false) return vertexTags;
68004
68005                     // only care about the primary tag
68006                     for (var key in d.tags) break;
68007                     if (!key) return vertexTags;
68008
68009                     // if this can be a vertex
68010                     if (d.geometry.indexOf('vertex') !== -1) {
68011                         vertexTags[key] = vertexTags[key] || {};
68012                         vertexTags[key][d.tags[key]] = true;
68013                     }
68014                     return vertexTags;
68015                 }, {});
68016             };
68017
68018             all.build = function(d, visible) {
68019                 if (d.fields) {
68020                     Object.keys(d.fields).forEach(function(id) {
68021                         var f = d.fields[id];
68022                         _fields[id] = presetField(id, f);
68023                         if (f.universal) {
68024                             _universal.push(_fields[id]);
68025                         }
68026                     });
68027                 }
68028
68029                 if (d.presets) {
68030                     var rawPresets = d.presets;
68031                     Object.keys(d.presets).forEach(function(id) {
68032                         var p = d.presets[id];
68033                         var existing = all.index(id);
68034                         var isVisible = typeof visible === 'function' ? visible(id, p) : visible;
68035                         if (existing !== -1) {
68036                             all.collection[existing] = presetPreset(id, p, _fields, isVisible, rawPresets);
68037                         } else {
68038                             all.collection.push(presetPreset(id, p, _fields, isVisible, rawPresets));
68039                         }
68040                     });
68041                 }
68042
68043                 if (d.categories) {
68044                     Object.keys(d.categories).forEach(function(id) {
68045                         var c = d.categories[id];
68046                         var existing = all.index(id);
68047                         if (existing !== -1) {
68048                             all.collection[existing] = presetCategory(id, c, all);
68049                         } else {
68050                             all.collection.push(presetCategory(id, c, all));
68051                         }
68052                     });
68053                 }
68054
68055                 var getItem = (all.item).bind(all);
68056                 if (_addablePresetIDs) {
68057                     ['area', 'line', 'point', 'vertex', 'relation'].forEach(function(geometry) {
68058                         _defaults[geometry] = presetCollection(_addablePresetIDs.map(getItem).filter(function(preset) {
68059                             return preset.geometry.indexOf(geometry) !== -1;
68060                         }));
68061                     });
68062                 } else if (d.defaults) {
68063                     _defaults = {
68064                         area: presetCollection(d.defaults.area.map(getItem)),
68065                         line: presetCollection(d.defaults.line.map(getItem)),
68066                         point: presetCollection(d.defaults.point.map(getItem)),
68067                         vertex: presetCollection(d.defaults.vertex.map(getItem)),
68068                         relation: presetCollection(d.defaults.relation.map(getItem))
68069                     };
68070                 }
68071
68072                 for (var i = 0; i < all.collection.length; i++) {
68073                     var preset = all.collection[i];
68074                     var geometry = preset.geometry;
68075
68076                     for (var j = 0; j < geometry.length; j++) {
68077                         var g = _index[geometry[j]];
68078                         for (var k in preset.tags) {
68079                             (g[k] = g[k] || []).push(preset);
68080                         }
68081                     }
68082                 }
68083                 return all;
68084             };
68085
68086             all.init = function(addablePresetIDs) {
68087                 all.collection = [];
68088                 _favorites = null;
68089                 _recents = null;
68090                 _addablePresetIDs = addablePresetIDs;
68091                 _fields = {};
68092                 _universal = [];
68093                 _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
68094
68095                 var show = true;
68096                 if (addablePresetIDs) {
68097                     show = function(presetID) {
68098                         return addablePresetIDs.indexOf(presetID) !== -1;
68099                     };
68100                 }
68101
68102                 return all.build(data.presets, show);
68103             };
68104
68105
68106             all.reset = function() {
68107                 all.collection = [];
68108                 _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
68109                 _fields = {};
68110                 _universal = [];
68111                 _favorites = null;
68112                 _recents = null;
68113
68114                 // Index of presets by (geometry, tag key).
68115                 _index = {
68116                     point: {},
68117                     vertex: {},
68118                     line: {},
68119                     area: {},
68120                     relation: {}
68121                 };
68122
68123                 return all;
68124             };
68125
68126             all.fromExternal = function(external, done) {
68127                 all.reset();
68128                 d3_json(external)
68129                     .then(function(externalPresets) {
68130                         all.build(data.presets, false);    // make default presets hidden to begin
68131                         all.build(externalPresets, true);  // make the external visible
68132                     })
68133                     .catch(function() {
68134                         all.init();
68135                     })
68136                     .finally(function() {
68137                         done(all);
68138                     });
68139             };
68140
68141             all.field = function(id) {
68142                 return _fields[id];
68143             };
68144
68145             all.universal = function() {
68146                 return _universal;
68147             };
68148
68149             all.defaults = function(geometry, n) {
68150                 var rec = [];
68151                 if (!context.inIntro()) {
68152                     rec = all.recent().matchGeometry(geometry).collection.slice(0, 4);
68153                 }
68154                 var def = utilArrayUniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1);
68155                 return presetCollection(utilArrayUniq(rec.concat(def).concat(all.fallback(geometry))));
68156             };
68157
68158             all.recent = function() {
68159                 return presetCollection(utilArrayUniq(all.getRecents().map(function(d) {
68160                     return d.preset;
68161                 })));
68162             };
68163
68164             function RibbonItem(preset, geometry, source) {
68165                 var item = {};
68166                 item.preset = preset;
68167                 item.geometry = geometry;
68168                 item.source = source;
68169
68170                 item.isFavorite = function() {
68171                     return item.source === 'favorite';
68172                 };
68173                 item.isRecent = function() {
68174                     return item.source === 'recent';
68175                 };
68176                 item.matches = function(preset, geometry) {
68177                     return item.preset.id === preset.id && item.geometry === geometry;
68178                 };
68179                 item.minified = function() {
68180                     return {
68181                         pID: item.preset.id,
68182                         geom: item.geometry
68183                     };
68184                 };
68185                 return item;
68186             }
68187
68188             function ribbonItemForMinified(d, source) {
68189                 if (d && d.pID && d.geom) {
68190                     var preset = all.item(d.pID);
68191                     if (!preset) return null;
68192
68193                     var geom = d.geom;
68194                     // treat point and vertex features as one geometry
68195                     if (geom === 'vertex') geom = 'point';
68196
68197                     // iD's presets could have changed since this was saved,
68198                     // so make sure it's still valid.
68199                     if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
68200                         return RibbonItem(preset, geom, source);
68201                     }
68202                 }
68203                 return null;
68204             }
68205
68206             function setFavorites(items) {
68207                 _favorites = items;
68208                 var minifiedItems = items.map(function(d) { return d.minified(); });
68209                 context.storage('preset_favorites', JSON.stringify(minifiedItems));
68210
68211                 // call update
68212                 dispatch$1.call('favoritePreset');
68213             }
68214
68215             all.getFavorites = function() {
68216                 if (!_favorites) {
68217                     // fetch from local storage
68218                     _favorites = (JSON.parse(context.storage('preset_favorites')) || [
68219                             // use the generic presets as the default favorites
68220                             { pID: 'point', geom: 'point'},
68221                             { pID: 'line', geom: 'line'},
68222                             { pID: 'area', geom: 'area'}
68223                         ]).reduce(function(output, d) {
68224                             var item = ribbonItemForMinified(d, 'favorite');
68225                             if (item) output.push(item);
68226                             return output;
68227                         }, []);
68228                 }
68229                 return _favorites;
68230             };
68231
68232             function setRecents(items) {
68233                 _recents = items;
68234                 var minifiedItems = items.map(function(d) { return d.minified(); });
68235                 context.storage('preset_recents', JSON.stringify(minifiedItems));
68236
68237                 dispatch$1.call('recentsChange');
68238             }
68239
68240             all.getRecents = function() {
68241                 if (!_recents) {
68242                     // fetch from local storage
68243                     _recents = (JSON.parse(context.storage('preset_recents')) || [])
68244                         .reduce(function(output, d) {
68245                             var item = ribbonItemForMinified(d, 'recent');
68246                             if (item) output.push(item);
68247                             return output;
68248                         }, []);
68249                 }
68250                 return _recents;
68251             };
68252
68253             all.toggleFavorite = function(preset, geometry) {
68254                 geometry = all.fallback(geometry).id;
68255                 var favs = all.getFavorites();
68256                 var favorite = all.favoriteMatching(preset, geometry);
68257                 if (favorite) {
68258                     favs.splice(favs.indexOf(favorite), 1);
68259                 } else {
68260                     // only allow 10 favorites
68261                     if (favs.length === 10) {
68262                         // remove the last favorite (last in, first out)
68263                         favs.pop();
68264                     }
68265                     // append array
68266                     favs.push(RibbonItem(preset, geometry, 'favorite'));
68267                 }
68268                 setFavorites(favs);
68269             };
68270
68271             all.removeFavorite = function(preset, geometry) {
68272                 geometry = all.fallback(geometry).id;
68273                 var item = all.favoriteMatching(preset, geometry);
68274                 if (item) {
68275                     var items = all.getFavorites();
68276                     items.splice(items.indexOf(item), 1);
68277                     setFavorites(items);
68278                 }
68279             };
68280
68281             all.removeRecent = function(preset, geometry) {
68282                 var item = all.recentMatching(preset, geometry);
68283                 if (item) {
68284                     var items = all.getRecents();
68285                     items.splice(items.indexOf(item), 1);
68286                     setRecents(items);
68287                 }
68288             };
68289
68290             all.favoriteMatching = function(preset, geometry) {
68291                 geometry = all.fallback(geometry).id;
68292                 var favs = all.getFavorites();
68293                 for (var index in favs) {
68294                     if (favs[index].matches(preset, geometry)) {
68295                         return favs[index];
68296                     }
68297                 }
68298                 return null;
68299             };
68300             all.recentMatching = function(preset, geometry) {
68301                 geometry = all.fallback(geometry).id;
68302                 var items = all.getRecents();
68303                 for (var index in items) {
68304                     if (items[index].matches(preset, geometry)) {
68305                         return items[index];
68306                     }
68307                 }
68308                 return null;
68309             };
68310
68311             all.moveItem = function(items, fromIndex, toIndex) {
68312                 if (fromIndex === toIndex ||
68313                     fromIndex < 0 || toIndex < 0 ||
68314                     fromIndex >= items.length || toIndex >= items.length) return null;
68315                 items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
68316                 return items;
68317             };
68318
68319             all.moveFavorite = function(fromIndex, toIndex) {
68320                 var items = all.moveItem(all.getFavorites(), fromIndex, toIndex);
68321                 if (items) setFavorites(items);
68322             };
68323
68324             all.moveRecent = function(item, beforeItem) {
68325                 var recents = all.getRecents();
68326                 var fromIndex = recents.indexOf(item);
68327                 var toIndex = recents.indexOf(beforeItem);
68328                 var items = all.moveItem(recents, fromIndex, toIndex);
68329                 if (items) setRecents(items);
68330             };
68331
68332             all.setMostRecent = function(preset, geometry) {
68333                 if (context.inIntro()) return;
68334                 if (preset.searchable === false) return;
68335
68336                 geometry = all.fallback(geometry).id;
68337
68338                 var items = all.getRecents();
68339                 var item = all.recentMatching(preset, geometry);
68340                 if (item) {
68341                     items.splice(items.indexOf(item), 1);
68342                 } else {
68343                     item = RibbonItem(preset, geometry, 'recent');
68344                 }
68345                 // allow 30 recents
68346                 if (items.length === 30) {
68347                     // remove the last favorite (first in, first out)
68348                     items.pop();
68349                 }
68350                 // prepend array
68351                 items.unshift(item);
68352                 setRecents(items);
68353             };
68354
68355             return utilRebind(all, dispatch$1, 'on');
68356         }
68357
68358         function localeDateString(s) {
68359             if (!s) return null;
68360             var detected = utilDetect();
68361             var options = { day: 'numeric', month: 'short', year: 'numeric' };
68362             var d = new Date(s);
68363             if (isNaN(d.getTime())) return null;
68364             return d.toLocaleDateString(detected.locale, options);
68365         }
68366
68367         function vintageRange(vintage) {
68368             var s;
68369             if (vintage.start || vintage.end) {
68370                 s = (vintage.start || '?');
68371                 if (vintage.start !== vintage.end) {
68372                     s += ' - ' + (vintage.end || '?');
68373                 }
68374             }
68375             return s;
68376         }
68377
68378
68379         function rendererBackgroundSource(data) {
68380             var source = Object.assign({}, data);   // shallow copy
68381             var offset = [0, 0];
68382             var name = source.name;
68383             var description = source.description;
68384             var best = !!source.best;
68385             var template = source.template;
68386
68387             source.tileSize = data.tileSize || 256;
68388             source.zoomExtent = data.zoomExtent || [0, 22];
68389             source.overzoom = data.overzoom !== false;
68390
68391             source.offset = function(_) {
68392                 if (!arguments.length) return offset;
68393                 offset = _;
68394                 return source;
68395             };
68396
68397
68398             source.nudge = function(val, zoomlevel) {
68399                 offset[0] += val[0] / Math.pow(2, zoomlevel);
68400                 offset[1] += val[1] / Math.pow(2, zoomlevel);
68401                 return source;
68402             };
68403
68404
68405             source.name = function() {
68406                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
68407                 return t('imagery.' + id_safe + '.name', { default: name });
68408             };
68409
68410
68411             source.description = function() {
68412                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
68413                 return t('imagery.' + id_safe + '.description', { default: description });
68414             };
68415
68416
68417             source.best = function() {
68418                 return best;
68419             };
68420
68421
68422             source.area = function() {
68423                 if (!data.polygon) return Number.MAX_VALUE;  // worldwide
68424                 var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
68425                 return isNaN(area) ? 0 : area;
68426             };
68427
68428
68429             source.imageryUsed = function() {
68430                 return name || source.id;
68431             };
68432
68433
68434             source.template = function(_) {
68435                 if (!arguments.length) return template;
68436                 if (source.id === 'custom') template = _;
68437                 return source;
68438             };
68439
68440
68441             source.url = function(coord) {
68442                 if (this.type === 'wms') {
68443                     var tileToProjectedCoords = (function(x, y, z) {
68444                         //polyfill for IE11, PhantomJS
68445                         var sinh = Math.sinh || function(x) {
68446                             var y = Math.exp(x);
68447                             return (y - 1 / y) / 2;
68448                         };
68449
68450                         var zoomSize = Math.pow(2, z);
68451                         var lon = x / zoomSize * Math.PI * 2 - Math.PI;
68452                         var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
68453
68454                         switch (this.projection) {
68455                             case 'EPSG:4326':
68456                                 return {
68457                                     x: lon * 180 / Math.PI,
68458                                     y: lat * 180 / Math.PI
68459                                 };
68460                             default: // EPSG:3857 and synonyms
68461                                 var mercCoords = mercatorRaw(lon, lat);
68462                                 return {
68463                                     x: 20037508.34 / Math.PI * mercCoords[0],
68464                                     y: 20037508.34 / Math.PI * mercCoords[1]
68465                                 };
68466                         }
68467                     }).bind(this);
68468
68469                     var tileSize = this.tileSize;
68470                     var projection = this.projection;
68471                     var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
68472                     var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
68473                     return template.replace(/\{(\w+)\}/g, function (token, key) {
68474                       switch (key) {
68475                         case 'width':
68476                         case 'height':
68477                           return tileSize;
68478                         case 'proj':
68479                           return projection;
68480                         case 'wkid':
68481                           return projection.replace(/^EPSG:/, '');
68482                         case 'bbox':
68483                           return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
68484                         case 'w':
68485                           return minXmaxY.x;
68486                         case 's':
68487                           return maxXminY.y;
68488                         case 'n':
68489                           return maxXminY.x;
68490                         case 'e':
68491                           return minXmaxY.y;
68492                         default:
68493                           return token;
68494                       }
68495                     });
68496                 }
68497                 return template
68498                     .replace('{x}', coord[0])
68499                     .replace('{y}', coord[1])
68500                     // TMS-flipped y coordinate
68501                     .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
68502                     .replace(/\{z(oom)?\}/, coord[2])
68503                     .replace(/\{switch:([^}]+)\}/, function(s, r) {
68504                         var subdomains = r.split(',');
68505                         return subdomains[(coord[0] + coord[1]) % subdomains.length];
68506                     })
68507                     .replace('{u}', function() {
68508                         var u = '';
68509                         for (var zoom = coord[2]; zoom > 0; zoom--) {
68510                             var b = 0;
68511                             var mask = 1 << (zoom - 1);
68512                             if ((coord[0] & mask) !== 0) b++;
68513                             if ((coord[1] & mask) !== 0) b += 2;
68514                             u += b.toString();
68515                         }
68516                         return u;
68517                     });
68518             };
68519
68520
68521             source.validZoom = function(z) {
68522                 return source.zoomExtent[0] <= z &&
68523                     (source.overzoom || source.zoomExtent[1] > z);
68524             };
68525
68526
68527             source.isLocatorOverlay = function() {
68528                 return source.id === 'mapbox_locator_overlay';
68529             };
68530
68531
68532             /* hides a source from the list, but leaves it available for use */
68533             source.isHidden = function() {
68534                 return source.id === 'DigitalGlobe-Premium-vintage' ||
68535                     source.id === 'DigitalGlobe-Standard-vintage';
68536             };
68537
68538
68539             source.copyrightNotices = function() {};
68540
68541
68542             source.getMetadata = function(center, tileCoord, callback) {
68543                 var vintage = {
68544                     start: localeDateString(source.startDate),
68545                     end: localeDateString(source.endDate)
68546                 };
68547                 vintage.range = vintageRange(vintage);
68548
68549                 var metadata = { vintage: vintage };
68550                 callback(null, metadata);
68551             };
68552
68553
68554             return source;
68555         }
68556
68557
68558         rendererBackgroundSource.Bing = function(data, dispatch) {
68559             // http://msdn.microsoft.com/en-us/library/ff701716.aspx
68560             // http://msdn.microsoft.com/en-us/library/ff701701.aspx
68561
68562             data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
68563
68564             var bing = rendererBackgroundSource(data);
68565             // var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // P2, JOSM, etc
68566             var key = 'Ak5oTE46TUbjRp08OFVcGpkARErDobfpuyNKa-W2mQ8wbt1K1KL8p1bIRwWwcF-Q';    // iD
68567
68568
68569             var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key;
68570             var cache = {};
68571             var inflight = {};
68572             var providers = [];
68573
68574             d3_json(url)
68575                 .then(function(json) {
68576                     providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
68577                         return {
68578                             attribution: provider.attribution,
68579                             areas: provider.coverageAreas.map(function(area) {
68580                                 return {
68581                                     zoom: [area.zoomMin, area.zoomMax],
68582                                     extent: geoExtent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
68583                                 };
68584                             })
68585                         };
68586                     });
68587                     dispatch.call('change');
68588                 })
68589                 .catch(function() {
68590                     /* ignore */
68591                 });
68592
68593
68594             bing.copyrightNotices = function(zoom, extent) {
68595                 zoom = Math.min(zoom, 21);
68596                 return providers.filter(function(provider) {
68597                     return provider.areas.some(function(area) {
68598                         return extent.intersects(area.extent) &&
68599                             area.zoom[0] <= zoom &&
68600                             area.zoom[1] >= zoom;
68601                     });
68602                 }).map(function(provider) {
68603                     return provider.attribution;
68604                 }).join(', ');
68605             };
68606
68607
68608             bing.getMetadata = function(center, tileCoord, callback) {
68609                 var tileID = tileCoord.slice(0, 3).join('/');
68610                 var zoom = Math.min(tileCoord[2], 21);
68611                 var centerPoint = center[1] + ',' + center[0];  // lat,lng
68612                 var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
68613                         '?zl=' + zoom + '&key=' + key;
68614
68615                 if (inflight[tileID]) return;
68616
68617                 if (!cache[tileID]) {
68618                     cache[tileID] = {};
68619                 }
68620                 if (cache[tileID] && cache[tileID].metadata) {
68621                     return callback(null, cache[tileID].metadata);
68622                 }
68623
68624                 inflight[tileID] = true;
68625                 d3_json(url)
68626                     .then(function(result) {
68627                         delete inflight[tileID];
68628                         if (!result) {
68629                             throw new Error('Unknown Error');
68630                         }
68631                         var vintage = {
68632                             start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
68633                             end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
68634                         };
68635                         vintage.range = vintageRange(vintage);
68636
68637                         var metadata = { vintage: vintage };
68638                         cache[tileID].metadata = metadata;
68639                         if (callback) callback(null, metadata);
68640                     })
68641                     .catch(function(err) {
68642                         delete inflight[tileID];
68643                         if (callback) callback(err.message);
68644                     });
68645             };
68646
68647
68648             bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
68649
68650
68651             return bing;
68652         };
68653
68654
68655
68656         rendererBackgroundSource.Esri = function(data) {
68657             // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
68658             if (data.template.match(/blankTile/) === null) {
68659                 data.template = data.template + '?blankTile=false';
68660             }
68661
68662             var esri = rendererBackgroundSource(data);
68663             var cache = {};
68664             var inflight = {};
68665             var _prevCenter;
68666
68667             // use a tilemap service to set maximum zoom for esri tiles dynamically
68668             // https://developers.arcgis.com/documentation/tiled-elevation-service/
68669             esri.fetchTilemap = function(center) {
68670                 // skip if we have already fetched a tilemap within 5km
68671                 if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) return;
68672                 _prevCenter = center;
68673
68674                 // tiles are available globally to zoom level 19, afterward they may or may not be present
68675                 var z = 20;
68676
68677                 // first generate a random url using the template
68678                 var dummyUrl = esri.url([1,2,3]);
68679
68680                 // calculate url z/y/x from the lat/long of the center of the map
68681                 var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
68682                 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)));
68683
68684                 // fetch an 8x8 grid to leverage cache
68685                 var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
68686
68687                 // make the request and introspect the response from the tilemap server
68688                 d3_json(tilemapUrl)
68689                     .then(function(tilemap) {
68690                         if (!tilemap) {
68691                             throw new Error('Unknown Error');
68692                         }
68693                         var hasTiles = true;
68694                         for (var i = 0; i < tilemap.data.length; i++) {
68695                             // 0 means an individual tile in the grid doesn't exist
68696                             if (!tilemap.data[i]) {
68697                                 hasTiles = false;
68698                                 break;
68699                             }
68700                         }
68701
68702                         // if any tiles are missing at level 20 we restrict maxZoom to 19
68703                         esri.zoomExtent[1] = (hasTiles ? 22 : 19);
68704                     })
68705                     .catch(function() {
68706                         /* ignore */
68707                     });
68708             };
68709
68710
68711             esri.getMetadata = function(center, tileCoord, callback) {
68712                 var tileID = tileCoord.slice(0, 3).join('/');
68713                 var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
68714                 var centerPoint = center[0] + ',' + center[1];  // long, lat (as it should be)
68715                 var unknown = t('info_panels.background.unknown');
68716                 var metadataLayer;
68717                 var vintage = {};
68718                 var metadata = {};
68719
68720                 if (inflight[tileID]) return;
68721
68722                 switch (true) {
68723                     case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
68724                         metadataLayer = 4;
68725                         break;
68726                     case zoom >= 19:
68727                         metadataLayer = 3;
68728                         break;
68729                     case zoom >= 17:
68730                         metadataLayer = 2;
68731                         break;
68732                     case zoom >= 13:
68733                         metadataLayer = 0;
68734                         break;
68735                     default:
68736                         metadataLayer = 99;
68737                 }
68738
68739                 var url;
68740                 // build up query using the layer appropriate to the current zoom
68741                 if (esri.id === 'EsriWorldImagery') {
68742                     url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
68743                 } else if (esri.id === 'EsriWorldImageryClarity') {
68744                     url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
68745                 }
68746
68747                 url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
68748
68749                 if (!cache[tileID]) {
68750                     cache[tileID] = {};
68751                 }
68752                 if (cache[tileID] && cache[tileID].metadata) {
68753                     return callback(null, cache[tileID].metadata);
68754                 }
68755
68756                 // accurate metadata is only available >= 13
68757                 if (metadataLayer === 99) {
68758                     vintage = {
68759                         start: null,
68760                         end: null,
68761                         range: null
68762                     };
68763                     metadata = {
68764                         vintage: null,
68765                         source: unknown,
68766                         description: unknown,
68767                         resolution: unknown,
68768                         accuracy: unknown
68769                     };
68770
68771                     callback(null, metadata);
68772
68773                 } else {
68774                     inflight[tileID] = true;
68775                     d3_json(url)
68776                         .then(function(result) {
68777                             delete inflight[tileID];
68778                             if (!result) {
68779                                 throw new Error('Unknown Error');
68780                             } else if (result.features && result.features.length < 1) {
68781                                 throw new Error('No Results');
68782                             } else if (result.error && result.error.message) {
68783                                 throw new Error(result.error.message);
68784                             }
68785
68786                             // pass through the discrete capture date from metadata
68787                             var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
68788                             vintage = {
68789                                 start: captureDate,
68790                                 end: captureDate,
68791                                 range: captureDate
68792                             };
68793                             metadata = {
68794                                 vintage: vintage,
68795                                 source: clean(result.features[0].attributes.NICE_NAME),
68796                                 description: clean(result.features[0].attributes.NICE_DESC),
68797                                 resolution: clean(result.features[0].attributes.SRC_RES),
68798                                 accuracy: clean(result.features[0].attributes.SRC_ACC)
68799                             };
68800
68801                             // append units - meters
68802                             if (isFinite(metadata.resolution)) {
68803                                 metadata.resolution += ' m';
68804                             }
68805                             if (isFinite(metadata.accuracy)) {
68806                                 metadata.accuracy += ' m';
68807                             }
68808
68809                             cache[tileID].metadata = metadata;
68810                             if (callback) callback(null, metadata);
68811                         })
68812                         .catch(function(err) {
68813                             delete inflight[tileID];
68814                             if (callback) callback(err.message);
68815                         });
68816                 }
68817
68818
68819                 function clean(val) {
68820                     return String(val).trim() || unknown;
68821                 }
68822             };
68823
68824             return esri;
68825         };
68826
68827
68828         rendererBackgroundSource.None = function() {
68829             var source = rendererBackgroundSource({ id: 'none', template: '' });
68830
68831
68832             source.name = function() {
68833                 return t('background.none');
68834             };
68835
68836
68837             source.imageryUsed = function() {
68838                 return null;
68839             };
68840
68841
68842             source.area = function() {
68843                 return -1;  // sources in background pane are sorted by area
68844             };
68845
68846
68847             return source;
68848         };
68849
68850
68851         rendererBackgroundSource.Custom = function(template) {
68852             var source = rendererBackgroundSource({ id: 'custom', template: template });
68853
68854
68855             source.name = function() {
68856                 return t('background.custom');
68857             };
68858
68859
68860             source.imageryUsed = function() {
68861                 return 'Custom (' + source.template() + ')';
68862             };
68863
68864
68865             source.area = function() {
68866                 return -2;  // sources in background pane are sorted by area
68867             };
68868
68869
68870             return source;
68871         };
68872
68873         function rendererTileLayer(context) {
68874             var transformProp = utilPrefixCSSProperty('Transform');
68875             var tiler = utilTiler();
68876
68877             var _tileSize = 256;
68878             var _projection;
68879             var _cache = {};
68880             var _tileOrigin;
68881             var _zoom;
68882             var _source;
68883
68884
68885             function tileSizeAtZoom(d, z) {
68886                 var EPSILON = 0.002;    // close seams
68887                 return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
68888             }
68889
68890
68891             function atZoom(t, distance) {
68892                 var power = Math.pow(2, distance);
68893                 return [
68894                     Math.floor(t[0] * power),
68895                     Math.floor(t[1] * power),
68896                     t[2] + distance
68897                 ];
68898             }
68899
68900
68901             function lookUp(d) {
68902                 for (var up = -1; up > -d[2]; up--) {
68903                     var tile = atZoom(d, up);
68904                     if (_cache[_source.url(tile)] !== false) {
68905                         return tile;
68906                     }
68907                 }
68908             }
68909
68910
68911             function uniqueBy(a, n) {
68912                 var o = [];
68913                 var seen = {};
68914                 for (var i = 0; i < a.length; i++) {
68915                     if (seen[a[i][n]] === undefined) {
68916                         o.push(a[i]);
68917                         seen[a[i][n]] = true;
68918                     }
68919                 }
68920                 return o;
68921             }
68922
68923
68924             function addSource(d) {
68925                 d.push(_source.url(d));
68926                 return d;
68927             }
68928
68929
68930             // Update tiles based on current state of `projection`.
68931             function background(selection) {
68932                 _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
68933
68934                 var pixelOffset;
68935                 if (_source) {
68936                     pixelOffset = [
68937                         _source.offset()[0] * Math.pow(2, _zoom),
68938                         _source.offset()[1] * Math.pow(2, _zoom)
68939                     ];
68940                 } else {
68941                     pixelOffset = [0, 0];
68942                 }
68943
68944                 var translate = [
68945                     _projection.translate()[0] + pixelOffset[0],
68946                     _projection.translate()[1] + pixelOffset[1]
68947                 ];
68948
68949                 tiler
68950                     .scale(_projection.scale() * 2 * Math.PI)
68951                     .translate(translate);
68952
68953                 _tileOrigin = [
68954                     _projection.scale() * Math.PI - translate[0],
68955                     _projection.scale() * Math.PI - translate[1]
68956                 ];
68957
68958                 render(selection);
68959             }
68960
68961
68962             // Derive the tiles onscreen, remove those offscreen and position them.
68963             // Important that this part not depend on `_projection` because it's
68964             // rentered when tiles load/error (see #644).
68965             function render(selection) {
68966                 if (!_source) return;
68967                 var requests = [];
68968                 var showDebug = context.getDebug('tile') && !_source.overlay;
68969
68970                 if (_source.validZoom(_zoom)) {
68971                     tiler.skipNullIsland(!!_source.overlay);
68972
68973                     tiler().forEach(function(d) {
68974                         addSource(d);
68975                         if (d[3] === '') return;
68976                         if (typeof d[3] !== 'string') return; // Workaround for #2295
68977                         requests.push(d);
68978                         if (_cache[d[3]] === false && lookUp(d)) {
68979                             requests.push(addSource(lookUp(d)));
68980                         }
68981                     });
68982
68983                     requests = uniqueBy(requests, 3).filter(function(r) {
68984                         // don't re-request tiles which have failed in the past
68985                         return _cache[r[3]] !== false;
68986                     });
68987                 }
68988
68989                 function load(d) {
68990                     _cache[d[3]] = true;
68991                     d3_select(this)
68992                         .on('error', null)
68993                         .on('load', null)
68994                         .classed('tile-loaded', true);
68995                     render(selection);
68996                 }
68997
68998                 function error(d) {
68999                     _cache[d[3]] = false;
69000                     d3_select(this)
69001                         .on('error', null)
69002                         .on('load', null)
69003                         .remove();
69004                     render(selection);
69005                 }
69006
69007                 function imageTransform(d) {
69008                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
69009                     var scale = tileSizeAtZoom(d, _zoom);
69010                     return 'translate(' +
69011                         ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
69012                         ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
69013                         'scale(' + scale + ',' + scale + ')';
69014                 }
69015
69016                 function tileCenter(d) {
69017                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
69018                     return [
69019                         ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
69020                         ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
69021                     ];
69022                 }
69023
69024                 function debugTransform(d) {
69025                     var coord = tileCenter(d);
69026                     return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
69027                 }
69028
69029
69030                 // Pick a representative tile near the center of the viewport
69031                 // (This is useful for sampling the imagery vintage)
69032                 var dims = tiler.size();
69033                 var mapCenter = [dims[0] / 2, dims[1] / 2];
69034                 var minDist = Math.max(dims[0], dims[1]);
69035                 var nearCenter;
69036
69037                 requests.forEach(function(d) {
69038                     var c = tileCenter(d);
69039                     var dist = geoVecLength(c, mapCenter);
69040                     if (dist < minDist) {
69041                         minDist = dist;
69042                         nearCenter = d;
69043                     }
69044                 });
69045
69046
69047                 var image = selection.selectAll('img')
69048                     .data(requests, function(d) { return d[3]; });
69049
69050                 image.exit()
69051                     .style(transformProp, imageTransform)
69052                     .classed('tile-removing', true)
69053                     .classed('tile-center', false)
69054                     .each(function() {
69055                         var tile = d3_select(this);
69056                         window.setTimeout(function() {
69057                             if (tile.classed('tile-removing')) {
69058                                 tile.remove();
69059                             }
69060                         }, 300);
69061                     });
69062
69063                 image.enter()
69064                   .append('img')
69065                     .attr('class', 'tile')
69066                     .attr('src', function(d) { return d[3]; })
69067                     .on('error', error)
69068                     .on('load', load)
69069                   .merge(image)
69070                     .style(transformProp, imageTransform)
69071                     .classed('tile-debug', showDebug)
69072                     .classed('tile-removing', false)
69073                     .classed('tile-center', function(d) { return d === nearCenter; });
69074
69075
69076
69077                 var debug = selection.selectAll('.tile-label-debug')
69078                     .data(showDebug ? requests : [], function(d) { return d[3]; });
69079
69080                 debug.exit()
69081                     .remove();
69082
69083                 if (showDebug) {
69084                     var debugEnter = debug.enter()
69085                         .append('div')
69086                         .attr('class', 'tile-label-debug');
69087
69088                     debugEnter
69089                         .append('div')
69090                         .attr('class', 'tile-label-debug-coord');
69091
69092                     debugEnter
69093                         .append('div')
69094                         .attr('class', 'tile-label-debug-vintage');
69095
69096                     debug = debug.merge(debugEnter);
69097
69098                     debug
69099                         .style(transformProp, debugTransform);
69100
69101                     debug
69102                         .selectAll('.tile-label-debug-coord')
69103                         .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
69104
69105                     debug
69106                         .selectAll('.tile-label-debug-vintage')
69107                         .each(function(d) {
69108                             var span = d3_select(this);
69109                             var center = context.projection.invert(tileCenter(d));
69110                             _source.getMetadata(center, d, function(err, result) {
69111                                 span.text((result && result.vintage && result.vintage.range) ||
69112                                     t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
69113                                 );
69114                             });
69115                         });
69116                 }
69117
69118             }
69119
69120
69121             background.projection = function(val) {
69122                 if (!arguments.length) return _projection;
69123                 _projection = val;
69124                 return background;
69125             };
69126
69127
69128             background.dimensions = function(val) {
69129                 if (!arguments.length) return tiler.size();
69130                 tiler.size(val);
69131                 return background;
69132             };
69133
69134
69135             background.source = function(val) {
69136                 if (!arguments.length) return _source;
69137                 _source = val;
69138                 _tileSize = _source.tileSize;
69139                 _cache = {};
69140                 tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
69141                 return background;
69142             };
69143
69144
69145             return background;
69146         }
69147
69148         function rendererBackground(context) {
69149             var dispatch$1 = dispatch('change');
69150             var detected = utilDetect();
69151             var baseLayer = rendererTileLayer(context).projection(context.projection);
69152             var _isValid = true;
69153             var _overlayLayers = [];
69154             var _backgroundSources = [];
69155             var _brightness = 1;
69156             var _contrast = 1;
69157             var _saturation = 1;
69158             var _sharpness = 1;
69159
69160
69161             function background(selection) {
69162                 // If we are displaying an Esri basemap at high zoom,
69163                 // check its tilemap to see how high the zoom can go
69164                 if (context.map().zoom() > 18) {
69165                     var basemap = baseLayer.source();
69166                     if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
69167                         var center = context.map().center();
69168                         basemap.fetchTilemap(center);
69169                     }
69170                 }
69171
69172                 // Is the imagery valid here? - #4827
69173                 var sources = background.sources(context.map().extent());
69174                 var wasValid = _isValid;
69175                 _isValid = !!sources
69176                     .filter(function(d) { return d === baseLayer.source(); }).length;
69177
69178                 if (wasValid !== _isValid) {      // change in valid status
69179                     background.updateImagery();
69180                 }
69181
69182
69183                 var baseFilter = '';
69184                 if (detected.cssfilters) {
69185                     if (_brightness !== 1) {
69186                         baseFilter += 'brightness(' + _brightness + ')';
69187                     }
69188                     if (_contrast !== 1) {
69189                         baseFilter += 'contrast(' + _contrast + ')';
69190                     }
69191                     if (_saturation !== 1) {
69192                         baseFilter += 'saturate(' + _saturation + ')';
69193                     }
69194                     if (_sharpness < 1) {  // gaussian blur
69195                         var blur = d3_interpolateNumber(0.5, 5)(1 - _sharpness);
69196                         baseFilter += 'blur(' + blur + 'px)';
69197                     }
69198                 }
69199
69200                 var base = selection.selectAll('.layer-background')
69201                     .data([0]);
69202
69203                 base = base.enter()
69204                     .insert('div', '.layer-data')
69205                     .attr('class', 'layer layer-background')
69206                     .merge(base);
69207
69208                 if (detected.cssfilters) {
69209                     base.style('filter', baseFilter || null);
69210                 } else {
69211                     base.style('opacity', _brightness);
69212                 }
69213
69214
69215                 var imagery = base.selectAll('.layer-imagery')
69216                     .data([0]);
69217
69218                 imagery.enter()
69219                     .append('div')
69220                     .attr('class', 'layer layer-imagery')
69221                     .merge(imagery)
69222                     .call(baseLayer);
69223
69224
69225                 var maskFilter = '';
69226                 var mixBlendMode = '';
69227                 if (detected.cssfilters && _sharpness > 1) {  // apply unsharp mask
69228                     mixBlendMode = 'overlay';
69229                     maskFilter = 'saturate(0) blur(3px) invert(1)';
69230
69231                     var contrast = _sharpness - 1;
69232                     maskFilter += ' contrast(' + contrast + ')';
69233
69234                     var brightness = d3_interpolateNumber(1, 0.85)(_sharpness - 1);
69235                     maskFilter += ' brightness(' + brightness + ')';
69236                 }
69237
69238                 var mask = base.selectAll('.layer-unsharp-mask')
69239                     .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
69240
69241                 mask.exit()
69242                     .remove();
69243
69244                 mask.enter()
69245                     .append('div')
69246                     .attr('class', 'layer layer-mask layer-unsharp-mask')
69247                     .merge(mask)
69248                     .call(baseLayer)
69249                     .style('filter', maskFilter || null)
69250                     .style('mix-blend-mode', mixBlendMode || null);
69251
69252
69253                 var overlays = selection.selectAll('.layer-overlay')
69254                     .data(_overlayLayers, function(d) { return d.source().name(); });
69255
69256                 overlays.exit()
69257                     .remove();
69258
69259                 overlays.enter()
69260                     .insert('div', '.layer-data')
69261                     .attr('class', 'layer layer-overlay')
69262                     .merge(overlays)
69263                     .each(function(layer) { d3_select(this).call(layer); });
69264             }
69265
69266
69267             background.updateImagery = function() {
69268                 var b = baseLayer.source();
69269                 if (context.inIntro() || !b) return;
69270
69271                 var o = _overlayLayers
69272                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
69273                     .map(function (d) { return d.source().id; })
69274                     .join(',');
69275
69276                 var meters = geoOffsetToMeters(b.offset());
69277                 var epsilon = 0.01;
69278                 var x = +meters[0].toFixed(2);
69279                 var y = +meters[1].toFixed(2);
69280                 var q = utilStringQs(window.location.hash.substring(1));
69281
69282                 var id = b.id;
69283                 if (id === 'custom') {
69284                     id = 'custom:' + b.template();
69285                 }
69286
69287                 if (id) {
69288                     q.background = id;
69289                 } else {
69290                     delete q.background;
69291                 }
69292
69293                 if (o) {
69294                     q.overlays = o;
69295                 } else {
69296                     delete q.overlays;
69297                 }
69298
69299                 if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
69300                     q.offset = x + ',' + y;
69301                 } else {
69302                     delete q.offset;
69303                 }
69304
69305                 if (!window.mocha) {
69306                     window.location.replace('#' + utilQsString(q, true));
69307                 }
69308
69309                 var imageryUsed = [];
69310                 var photoOverlaysUsed = [];
69311
69312                 var current = b.imageryUsed();
69313                 if (current && _isValid) {
69314                     imageryUsed.push(current);
69315                 }
69316
69317                 _overlayLayers
69318                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
69319                     .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
69320
69321                 var data = context.layers().layer('data');
69322                 if (data && data.enabled() && data.hasData()) {
69323                     imageryUsed.push(data.getSrc());
69324                 }
69325
69326                 var photoOverlayLayers = {
69327                     streetside: 'Bing Streetside',
69328                     mapillary: 'Mapillary Images',
69329                     'mapillary-signs': 'Mapillary Signs',
69330                     openstreetcam: 'OpenStreetCam Images'
69331                 };
69332
69333                 for (var layerID in photoOverlayLayers) {
69334                     var layer = context.layers().layer(layerID);
69335                     if (layer && layer.enabled()) {
69336                         photoOverlaysUsed.push(layerID);
69337                         imageryUsed.push(photoOverlayLayers[layerID]);
69338                     }
69339                 }
69340
69341                 context.history().photoOverlaysUsed(photoOverlaysUsed);
69342                 context.history().imageryUsed(imageryUsed);
69343             };
69344
69345
69346             background.sources = function(extent) {
69347                 if (!data.imagery || !data.imagery.query) return [];   // called before init()?
69348
69349                 var matchIDs = {};
69350                 var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
69351                 matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
69352
69353                 return _backgroundSources.filter(function(source) {
69354                     return matchIDs[source.id] || !source.polygon;   // no polygon = worldwide
69355                 });
69356             };
69357
69358
69359             background.dimensions = function(d) {
69360                 if (!d) return;
69361                 baseLayer.dimensions(d);
69362
69363                 _overlayLayers.forEach(function(layer) {
69364                     layer.dimensions(d);
69365                 });
69366             };
69367
69368
69369             background.baseLayerSource = function(d) {
69370                 if (!arguments.length) return baseLayer.source();
69371
69372                 // test source against OSM imagery blacklists..
69373                 var osm = context.connection();
69374                 if (!osm) return background;
69375
69376                 var blacklists = context.connection().imageryBlacklists();
69377                 var template = d.template();
69378                 var fail = false;
69379                 var tested = 0;
69380                 var regex;
69381
69382                 for (var i = 0; i < blacklists.length; i++) {
69383                     try {
69384                         regex = new RegExp(blacklists[i]);
69385                         fail = regex.test(template);
69386                         tested++;
69387                         if (fail) break;
69388                     } catch (e) {
69389                         /* noop */
69390                     }
69391                 }
69392
69393                 // ensure at least one test was run.
69394                 if (!tested) {
69395                     regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
69396                     fail = regex.test(template);
69397                 }
69398
69399                 baseLayer.source(!fail ? d : background.findSource('none'));
69400                 dispatch$1.call('change');
69401                 background.updateImagery();
69402                 return background;
69403             };
69404
69405
69406             background.findSource = function(id) {
69407                 return _backgroundSources.find(function(d) {
69408                     return d.id && d.id === id;
69409                 });
69410             };
69411
69412
69413             background.bing = function() {
69414                 background.baseLayerSource(background.findSource('Bing'));
69415             };
69416
69417
69418             background.showsLayer = function(d) {
69419                 var baseSource = baseLayer.source();
69420                 if (!d || !baseSource) return false;
69421                 return d.id === baseSource.id ||
69422                     _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
69423             };
69424
69425
69426             background.overlayLayerSources = function() {
69427                 return _overlayLayers.map(function (l) { return l.source(); });
69428             };
69429
69430
69431             background.toggleOverlayLayer = function(d) {
69432                 var layer;
69433                 for (var i = 0; i < _overlayLayers.length; i++) {
69434                     layer = _overlayLayers[i];
69435                     if (layer.source() === d) {
69436                         _overlayLayers.splice(i, 1);
69437                         dispatch$1.call('change');
69438                         background.updateImagery();
69439                         return;
69440                     }
69441                 }
69442
69443                 layer = rendererTileLayer(context)
69444                     .source(d)
69445                     .projection(context.projection)
69446                     .dimensions(baseLayer.dimensions()
69447                 );
69448
69449                 _overlayLayers.push(layer);
69450                 dispatch$1.call('change');
69451                 background.updateImagery();
69452             };
69453
69454
69455             background.nudge = function(d, zoom) {
69456                 baseLayer.source().nudge(d, zoom);
69457                 dispatch$1.call('change');
69458                 background.updateImagery();
69459                 return background;
69460             };
69461
69462
69463             background.offset = function(d) {
69464                 if (!arguments.length) return baseLayer.source().offset();
69465                 baseLayer.source().offset(d);
69466                 dispatch$1.call('change');
69467                 background.updateImagery();
69468                 return background;
69469             };
69470
69471
69472             background.brightness = function(d) {
69473                 if (!arguments.length) return _brightness;
69474                 _brightness = d;
69475                 if (context.mode()) dispatch$1.call('change');
69476                 return background;
69477             };
69478
69479
69480             background.contrast = function(d) {
69481                 if (!arguments.length) return _contrast;
69482                 _contrast = d;
69483                 if (context.mode()) dispatch$1.call('change');
69484                 return background;
69485             };
69486
69487
69488             background.saturation = function(d) {
69489                 if (!arguments.length) return _saturation;
69490                 _saturation = d;
69491                 if (context.mode()) dispatch$1.call('change');
69492                 return background;
69493             };
69494
69495
69496             background.sharpness = function(d) {
69497                 if (!arguments.length) return _sharpness;
69498                 _sharpness = d;
69499                 if (context.mode()) dispatch$1.call('change');
69500                 return background;
69501             };
69502
69503
69504             background.init = function() {
69505                 function parseMap(qmap) {
69506                     if (!qmap) return false;
69507                     var args = qmap.split('/').map(Number);
69508                     if (args.length < 3 || args.some(isNaN)) return false;
69509                     return geoExtent([args[2], args[1]]);
69510                 }
69511
69512                 var q = utilStringQs(window.location.hash.substring(1));
69513                 var requested = q.background || q.layer;
69514                 var extent = parseMap(q.map);
69515                 var first;
69516                 var best;
69517
69518
69519                 data.imagery = data.imagery || [];
69520                 data.imagery.features = {};
69521
69522                 // build efficient index and querying for data.imagery
69523                 var features = data.imagery.map(function(source) {
69524                     if (!source.polygon) return null;
69525
69526                     // Add an extra array nest to each element in `source.polygon`
69527                     // so the rings are not treated as a bunch of holes:
69528                     // what we have: [ [[outer],[hole],[hole]] ]
69529                     // what we want: [ [[outer]],[[outer]],[[outer]] ]
69530                     var rings = source.polygon.map(function(ring) { return [ring]; });
69531
69532                     var feature = {
69533                         type: 'Feature',
69534                         properties: { id: source.id },
69535                         geometry: { type: 'MultiPolygon', coordinates: rings }
69536                     };
69537
69538                     data.imagery.features[source.id] = feature;
69539                     return feature;
69540
69541                 }).filter(Boolean);
69542
69543                 data.imagery.query = whichPolygon_1({
69544                     type: 'FeatureCollection',
69545                     features: features
69546                 });
69547
69548
69549                 // Add all the available imagery sources
69550                 _backgroundSources = data.imagery.map(function(source) {
69551                     if (source.type === 'bing') {
69552                         return rendererBackgroundSource.Bing(source, dispatch$1);
69553                     } else if (/^EsriWorldImagery/.test(source.id)) {
69554                         return rendererBackgroundSource.Esri(source);
69555                     } else {
69556                         return rendererBackgroundSource(source);
69557                     }
69558                 });
69559
69560                 first = _backgroundSources.length && _backgroundSources[0];
69561
69562                 // Add 'None'
69563                 _backgroundSources.unshift(rendererBackgroundSource.None());
69564
69565                 // Add 'Custom'
69566                 var template = context.storage('background-custom-template') || '';
69567                 var custom = rendererBackgroundSource.Custom(template);
69568                 _backgroundSources.unshift(custom);
69569
69570
69571                 // Decide which background layer to display
69572                 if (!requested && extent) {
69573                     best = this.sources(extent).find(function(s) { return s.best(); });
69574                 }
69575                 if (requested && requested.indexOf('custom:') === 0) {
69576                     template = requested.replace(/^custom:/, '');
69577                     background.baseLayerSource(custom.template(template));
69578                     context.storage('background-custom-template', template);
69579                 } else {
69580                     background.baseLayerSource(
69581                         background.findSource(requested) ||
69582                         best ||
69583                         background.findSource(context.storage('background-last-used')) ||
69584                         background.findSource('Bing') ||
69585                         first ||
69586                         background.findSource('none')
69587                     );
69588                 }
69589
69590                 var locator = _backgroundSources.find(function(d) {
69591                     return d.overlay && d.default;
69592                 });
69593
69594                 if (locator) {
69595                     background.toggleOverlayLayer(locator);
69596                 }
69597
69598                 var overlays = (q.overlays || '').split(',');
69599                 overlays.forEach(function(overlay) {
69600                     overlay = background.findSource(overlay);
69601                     if (overlay) {
69602                         background.toggleOverlayLayer(overlay);
69603                     }
69604                 });
69605
69606                 if (q.gpx) {
69607                     var gpx = context.layers().layer('data');
69608                     if (gpx) {
69609                         gpx.url(q.gpx, '.gpx');
69610                     }
69611                 }
69612
69613                 if (q.offset) {
69614                     var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
69615                         return !isNaN(n) && n;
69616                     });
69617
69618                     if (offset.length === 2) {
69619                         background.offset(geoMetersToOffset(offset));
69620                     }
69621                 }
69622             };
69623
69624
69625             return utilRebind(background, dispatch$1, 'on');
69626         }
69627
69628         function rendererFeatures(context) {
69629             var dispatch$1 = dispatch('change', 'redraw');
69630             var features = utilRebind({}, dispatch$1, 'on');
69631             var _deferred = new Set();
69632
69633             var traffic_roads = {
69634                 'motorway': true,
69635                 'motorway_link': true,
69636                 'trunk': true,
69637                 'trunk_link': true,
69638                 'primary': true,
69639                 'primary_link': true,
69640                 'secondary': true,
69641                 'secondary_link': true,
69642                 'tertiary': true,
69643                 'tertiary_link': true,
69644                 'residential': true,
69645                 'unclassified': true,
69646                 'living_street': true
69647             };
69648
69649             var service_roads = {
69650                 'service': true,
69651                 'road': true,
69652                 'track': true
69653             };
69654
69655             var paths = {
69656                 'path': true,
69657                 'footway': true,
69658                 'cycleway': true,
69659                 'bridleway': true,
69660                 'steps': true,
69661                 'pedestrian': true,
69662                 'corridor': true
69663             };
69664
69665             var past_futures = {
69666                 'proposed': true,
69667                 'construction': true,
69668                 'abandoned': true,
69669                 'dismantled': true,
69670                 'disused': true,
69671                 'razed': true,
69672                 'demolished': true,
69673                 'obliterated': true
69674             };
69675
69676             var _cullFactor = 1;
69677             var _cache = {};
69678             var _rules = {};
69679             var _stats = {};
69680             var _keys = [];
69681             var _hidden = [];
69682             var _forceVisible = {};
69683
69684
69685             function update() {
69686                 if (!window.mocha) {
69687                     var q = utilStringQs(window.location.hash.substring(1));
69688                     var disabled = features.disabled();
69689                     if (disabled.length) {
69690                         q.disable_features = disabled.join(',');
69691                     } else {
69692                         delete q.disable_features;
69693                     }
69694                     window.location.replace('#' + utilQsString(q, true));
69695                     context.storage('disabled-features', disabled.join(','));
69696                 }
69697                 _hidden = features.hidden();
69698                 dispatch$1.call('change');
69699                 dispatch$1.call('redraw');
69700             }
69701
69702
69703             function defineRule(k, filter, max) {
69704                 var isEnabled = true;
69705
69706                 _keys.push(k);
69707                 _rules[k] = {
69708                     filter: filter,
69709                     enabled: isEnabled,   // whether the user wants it enabled..
69710                     count: 0,
69711                     currentMax: (max || Infinity),
69712                     defaultMax: (max || Infinity),
69713                     enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
69714                     disable: function() { this.enabled = false; this.currentMax = 0; },
69715                     hidden: function() {
69716                         return !context.editable() ||
69717                             (this.count === 0 && !this.enabled) ||
69718                             this.count > this.currentMax * _cullFactor;
69719                     },
69720                     autoHidden: function() { return this.hidden() && this.currentMax > 0; }
69721                 };
69722             }
69723
69724
69725             defineRule('points', function isPoint(tags, geometry) {
69726                 return geometry === 'point';
69727             }, 200);
69728
69729             defineRule('traffic_roads', function isTrafficRoad(tags) {
69730                 return traffic_roads[tags.highway];
69731             });
69732
69733             defineRule('service_roads', function isServiceRoad(tags) {
69734                 return service_roads[tags.highway];
69735             });
69736
69737             defineRule('paths', function isPath(tags) {
69738                 return paths[tags.highway];
69739             });
69740
69741             defineRule('buildings', function isBuilding(tags) {
69742                 return (
69743                     (!!tags.building && tags.building !== 'no') ||
69744                     tags.parking === 'multi-storey' ||
69745                     tags.parking === 'sheds' ||
69746                     tags.parking === 'carports' ||
69747                     tags.parking === 'garage_boxes'
69748                 );
69749             }, 250);
69750
69751             defineRule('building_parts', function isBuildingPart(tags) {
69752                 return tags['building:part'];
69753             });
69754
69755             defineRule('indoor', function isIndoor(tags) {
69756                 return tags.indoor;
69757             });
69758
69759             defineRule('landuse', function isLanduse(tags, geometry) {
69760                 return geometry === 'area' &&
69761                     !_rules.buildings.filter(tags) &&
69762                     !_rules.building_parts.filter(tags) &&
69763                     !_rules.indoor.filter(tags) &&
69764                     !_rules.water.filter(tags) &&
69765                     !_rules.pistes.filter(tags);
69766             });
69767
69768             defineRule('boundaries', function isBoundary(tags) {
69769                 return (
69770                     !!tags.boundary
69771                 ) && !(
69772                     traffic_roads[tags.highway] ||
69773                     service_roads[tags.highway] ||
69774                     paths[tags.highway] ||
69775                     tags.waterway ||
69776                     tags.railway ||
69777                     tags.landuse ||
69778                     tags.natural ||
69779                     tags.building ||
69780                     tags.power
69781                 );
69782             });
69783
69784             defineRule('water', function isWater(tags) {
69785                 return (
69786                     !!tags.waterway ||
69787                     tags.natural === 'water' ||
69788                     tags.natural === 'coastline' ||
69789                     tags.natural === 'bay' ||
69790                     tags.landuse === 'pond' ||
69791                     tags.landuse === 'basin' ||
69792                     tags.landuse === 'reservoir' ||
69793                     tags.landuse === 'salt_pond'
69794                 );
69795             });
69796
69797             defineRule('rail', function isRail(tags) {
69798                 return (
69799                     !!tags.railway ||
69800                     tags.landuse === 'railway'
69801                 ) && !(
69802                     traffic_roads[tags.highway] ||
69803                     service_roads[tags.highway] ||
69804                     paths[tags.highway]
69805                 );
69806             });
69807
69808             defineRule('pistes', function isPiste(tags) {
69809                 return tags['piste:type'];
69810             });
69811
69812             defineRule('aerialways', function isPiste(tags) {
69813                 return tags.aerialway &&
69814                     tags.aerialway !== 'yes' &&
69815                     tags.aerialway !== 'station';
69816             });
69817
69818             defineRule('power', function isPower(tags) {
69819                 return !!tags.power;
69820             });
69821
69822             // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
69823             defineRule('past_future', function isPastFuture(tags) {
69824                 if (
69825                     traffic_roads[tags.highway] ||
69826                     service_roads[tags.highway] ||
69827                     paths[tags.highway]
69828                 ) { return false; }
69829
69830                 var strings = Object.keys(tags);
69831
69832                 for (var i = 0; i < strings.length; i++) {
69833                     var s = strings[i];
69834                     if (past_futures[s] || past_futures[tags[s]]) { return true; }
69835                 }
69836                 return false;
69837             });
69838
69839             // Lines or areas that don't match another feature filter.
69840             // IMPORTANT: The 'others' feature must be the last one defined,
69841             //   so that code in getMatches can skip this test if `hasMatch = true`
69842             defineRule('others', function isOther(tags, geometry) {
69843                 return (geometry === 'line' || geometry === 'area');
69844             });
69845
69846
69847
69848             features.features = function() {
69849                 return _rules;
69850             };
69851
69852
69853             features.keys = function() {
69854                 return _keys;
69855             };
69856
69857
69858             features.enabled = function(k) {
69859                 if (!arguments.length) {
69860                     return _keys.filter(function(k) { return _rules[k].enabled; });
69861                 }
69862                 return _rules[k] && _rules[k].enabled;
69863             };
69864
69865
69866             features.disabled = function(k) {
69867                 if (!arguments.length) {
69868                     return _keys.filter(function(k) { return !_rules[k].enabled; });
69869                 }
69870                 return _rules[k] && !_rules[k].enabled;
69871             };
69872
69873
69874             features.hidden = function(k) {
69875                 if (!arguments.length) {
69876                     return _keys.filter(function(k) { return _rules[k].hidden(); });
69877                 }
69878                 return _rules[k] && _rules[k].hidden();
69879             };
69880
69881
69882             features.autoHidden = function(k) {
69883                 if (!arguments.length) {
69884                     return _keys.filter(function(k) { return _rules[k].autoHidden(); });
69885                 }
69886                 return _rules[k] && _rules[k].autoHidden();
69887             };
69888
69889
69890             features.enable = function(k) {
69891                 if (_rules[k] && !_rules[k].enabled) {
69892                     _rules[k].enable();
69893                     update();
69894                 }
69895             };
69896
69897             features.enableAll = function() {
69898                 var didEnable = false;
69899                 for (var k in _rules) {
69900                     if (!_rules[k].enabled) {
69901                         didEnable = true;
69902                         _rules[k].enable();
69903                     }
69904                 }
69905                 if (didEnable) update();
69906             };
69907
69908
69909             features.disable = function(k) {
69910                 if (_rules[k] && _rules[k].enabled) {
69911                     _rules[k].disable();
69912                     update();
69913                 }
69914             };
69915
69916             features.disableAll = function() {
69917                 var didDisable = false;
69918                 for (var k in _rules) {
69919                     if (_rules[k].enabled) {
69920                         didDisable = true;
69921                         _rules[k].disable();
69922                     }
69923                 }
69924                 if (didDisable) update();
69925             };
69926
69927
69928             features.toggle = function(k) {
69929                 if (_rules[k]) {
69930                     (function(f) { return f.enabled ? f.disable() : f.enable(); }(_rules[k]));
69931                     update();
69932                 }
69933             };
69934
69935
69936             features.resetStats = function() {
69937                 for (var i = 0; i < _keys.length; i++) {
69938                     _rules[_keys[i]].count = 0;
69939                 }
69940                 dispatch$1.call('change');
69941             };
69942
69943
69944             features.gatherStats = function(d, resolver, dimensions) {
69945                 var needsRedraw = false;
69946                 var types = utilArrayGroupBy(d, 'type');
69947                 var entities = [].concat(types.relation || [], types.way || [], types.node || []);
69948                 var currHidden, geometry, matches, i, j;
69949
69950                 for (i = 0; i < _keys.length; i++) {
69951                     _rules[_keys[i]].count = 0;
69952                 }
69953
69954                 // adjust the threshold for point/building culling based on viewport size..
69955                 // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
69956                 _cullFactor = dimensions[0] * dimensions[1] / 1000000;
69957
69958                 for (i = 0; i < entities.length; i++) {
69959                     geometry = entities[i].geometry(resolver);
69960                     matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
69961                     for (j = 0; j < matches.length; j++) {
69962                         _rules[matches[j]].count++;
69963                     }
69964                 }
69965
69966                 currHidden = features.hidden();
69967                 if (currHidden !== _hidden) {
69968                     _hidden = currHidden;
69969                     needsRedraw = true;
69970                     dispatch$1.call('change');
69971                 }
69972
69973                 return needsRedraw;
69974             };
69975
69976
69977             features.stats = function() {
69978                 for (var i = 0; i < _keys.length; i++) {
69979                     _stats[_keys[i]] = _rules[_keys[i]].count;
69980                 }
69981
69982                 return _stats;
69983             };
69984
69985
69986             features.clear = function(d) {
69987                 for (var i = 0; i < d.length; i++) {
69988                     features.clearEntity(d[i]);
69989                 }
69990             };
69991
69992
69993             features.clearEntity = function(entity) {
69994                 delete _cache[osmEntity.key(entity)];
69995             };
69996
69997
69998             features.reset = function() {
69999                 Array.from(_deferred).forEach(function(handle) {
70000                     window.cancelIdleCallback(handle);
70001                     _deferred.delete(handle);
70002                 });
70003
70004                 _cache = {};
70005             };
70006
70007             // only certain relations are worth checking
70008             function relationShouldBeChecked(relation) {
70009                 // multipolygon features have `area` geometry and aren't checked here
70010                 return relation.tags.type === 'boundary';
70011             }
70012
70013             features.getMatches = function(entity, resolver, geometry) {
70014                 if (geometry === 'vertex' ||
70015                     (geometry === 'relation' && !relationShouldBeChecked(entity))) return {};
70016
70017                 var ent = osmEntity.key(entity);
70018                 if (!_cache[ent]) {
70019                     _cache[ent] = {};
70020                 }
70021
70022                 if (!_cache[ent].matches) {
70023                     var matches = {};
70024                     var hasMatch = false;
70025
70026                     for (var i = 0; i < _keys.length; i++) {
70027                         if (_keys[i] === 'others') {
70028                             if (hasMatch) continue;
70029
70030                             // If an entity...
70031                             //   1. is a way that hasn't matched other 'interesting' feature rules,
70032                             if (entity.type === 'way') {
70033                                 var parents = features.getParents(entity, resolver, geometry);
70034
70035                                 //   2a. belongs only to a single multipolygon relation
70036                                 if ((parents.length === 1 && parents[0].isMultipolygon()) ||
70037                                     // 2b. or belongs only to boundary relations
70038                                     (parents.length > 0 && parents.every(function(parent) { return parent.tags.type === 'boundary'; }))) {
70039
70040                                     // ...then match whatever feature rules the parent relation has matched.
70041                                     // see #2548, #2887
70042                                     //
70043                                     // IMPORTANT:
70044                                     // For this to work, getMatches must be called on relations before ways.
70045                                     //
70046                                     var pkey = osmEntity.key(parents[0]);
70047                                     if (_cache[pkey] && _cache[pkey].matches) {
70048                                         matches = Object.assign({}, _cache[pkey].matches);  // shallow copy
70049                                         continue;
70050                                     }
70051                                 }
70052                             }
70053                         }
70054
70055                         if (_rules[_keys[i]].filter(entity.tags, geometry)) {
70056                             matches[_keys[i]] = hasMatch = true;
70057                         }
70058                     }
70059                     _cache[ent].matches = matches;
70060                 }
70061
70062                 return _cache[ent].matches;
70063             };
70064
70065
70066             features.getParents = function(entity, resolver, geometry) {
70067                 if (geometry === 'point') return [];
70068
70069                 var ent = osmEntity.key(entity);
70070                 if (!_cache[ent]) {
70071                     _cache[ent] = {};
70072                 }
70073
70074                 if (!_cache[ent].parents) {
70075                     var parents = [];
70076                     if (geometry === 'vertex') {
70077                         parents = resolver.parentWays(entity);
70078                     } else {   // 'line', 'area', 'relation'
70079                         parents = resolver.parentRelations(entity);
70080                     }
70081                     _cache[ent].parents = parents;
70082                 }
70083                 return _cache[ent].parents;
70084             };
70085
70086
70087             features.isHiddenPreset = function(preset, geometry) {
70088                 if (!_hidden.length) return false;
70089                 if (!preset.tags) return false;
70090
70091                 var test = preset.setTags({}, geometry);
70092                 for (var key in _rules) {
70093                     if (_rules[key].filter(test, geometry)) {
70094                         if (_hidden.indexOf(key) !== -1) {
70095                             return key;
70096                         }
70097                         return false;
70098                     }
70099                 }
70100                 return false;
70101             };
70102
70103
70104             features.isHiddenFeature = function(entity, resolver, geometry) {
70105                 if (!_hidden.length) return false;
70106                 if (!entity.version) return false;
70107                 if (_forceVisible[entity.id]) return false;
70108
70109                 var matches = Object.keys(features.getMatches(entity, resolver, geometry));
70110                 return matches.length && matches.every(function(k) { return features.hidden(k); });
70111             };
70112
70113
70114             features.isHiddenChild = function(entity, resolver, geometry) {
70115                 if (!_hidden.length) return false;
70116                 if (!entity.version || geometry === 'point') return false;
70117                 if (_forceVisible[entity.id]) return false;
70118
70119                 var parents = features.getParents(entity, resolver, geometry);
70120                 if (!parents.length) return false;
70121
70122                 for (var i = 0; i < parents.length; i++) {
70123                     if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
70124                         return false;
70125                     }
70126                 }
70127                 return true;
70128             };
70129
70130
70131             features.hasHiddenConnections = function(entity, resolver) {
70132                 if (!_hidden.length) return false;
70133
70134                 var childNodes, connections;
70135                 if (entity.type === 'midpoint') {
70136                     childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
70137                     connections = [];
70138                 } else {
70139                     childNodes = entity.nodes ? resolver.childNodes(entity) : [];
70140                     connections = features.getParents(entity, resolver, entity.geometry(resolver));
70141                 }
70142
70143                 // gather ways connected to child nodes..
70144                 connections = childNodes.reduce(function(result, e) {
70145                     return resolver.isShared(e) ? utilArrayUnion(result, resolver.parentWays(e)) : result;
70146                 }, connections);
70147
70148                 return connections.some(function(e) {
70149                     return features.isHidden(e, resolver, e.geometry(resolver));
70150                 });
70151             };
70152
70153
70154             features.isHidden = function(entity, resolver, geometry) {
70155                 if (!_hidden.length) return false;
70156                 if (!entity.version) return false;
70157
70158                 var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
70159                 return fn(entity, resolver, geometry);
70160             };
70161
70162
70163             features.filter = function(d, resolver) {
70164                 if (!_hidden.length) return d;
70165
70166                 var result = [];
70167                 for (var i = 0; i < d.length; i++) {
70168                     var entity = d[i];
70169                     if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
70170                         result.push(entity);
70171                     }
70172                 }
70173                 return result;
70174             };
70175
70176
70177             features.forceVisible = function(entityIDs) {
70178                 if (!arguments.length) return Object.keys(_forceVisible);
70179
70180                 _forceVisible = {};
70181                 for (var i = 0; i < entityIDs.length; i++) {
70182                     _forceVisible[entityIDs[i]] = true;
70183                     var entity = context.hasEntity(entityIDs[i]);
70184                     if (entity && entity.type === 'relation') {
70185                         // also show relation members (one level deep)
70186                         for (var j in entity.members) {
70187                             _forceVisible[entity.members[j].id] = true;
70188                         }
70189                     }
70190                 }
70191                 return features;
70192             };
70193
70194
70195             features.init = function() {
70196                 var storage = context.storage('disabled-features');
70197                 if (storage) {
70198                     var storageDisabled = storage.replace(/;/g, ',').split(',');
70199                     storageDisabled.forEach(features.disable);
70200                 }
70201
70202                 var q = utilStringQs(window.location.hash.substring(1));
70203                 if (q.disable_features) {
70204                     var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
70205                     hashDisabled.forEach(features.disable);
70206                 }
70207             };
70208
70209
70210             // warm up the feature matching cache upon merging fetched data
70211             context.history().on('merge.features', function(newEntities) {
70212                 if (!newEntities) return;
70213                 var handle = window.requestIdleCallback(function() {
70214                     var graph = context.graph();
70215                     var types = utilArrayGroupBy(newEntities, 'type');
70216                     // ensure that getMatches is called on relations before ways
70217                     var entities = [].concat(types.relation || [], types.way || [], types.node || []);
70218                     for (var i = 0; i < entities.length; i++) {
70219                         var geometry = entities[i].geometry(graph);
70220                         features.getMatches(entities[i], graph, geometry);
70221                     }
70222                 });
70223                 _deferred.add(handle);
70224             });
70225
70226
70227             return features;
70228         }
70229
70230         // Touch targets control which other vertices we can drag a vertex onto.
70231         //
70232         // - the activeID - nope
70233         // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
70234         // - 2 away from the activeID - nope (would create a self intersecting segment)
70235         // - all others on a linear way - yes
70236         // - all others on a closed way - nope (would create a self intersecting polygon)
70237         //
70238         // returns
70239         // 0 = active vertex - no touch/connect
70240         // 1 = passive vertex - yes touch/connect
70241         // 2 = adjacent vertex - yes but pay attention segmenting a line here
70242         //
70243         function svgPassiveVertex(node, graph, activeID) {
70244             if (!activeID) return 1;
70245             if (activeID === node.id) return 0;
70246
70247             var parents = graph.parentWays(node);
70248
70249             for (var i = 0; i < parents.length; i++) {
70250                 var nodes = parents[i].nodes;
70251                 var isClosed = parents[i].isClosed();
70252                 for (var j = 0; j < nodes.length; j++) {   // find this vertex, look nearby
70253                     if (nodes[j] === node.id) {
70254                         var ix1 = j - 2;
70255                         var ix2 = j - 1;
70256                         var ix3 = j + 1;
70257                         var ix4 = j + 2;
70258
70259                         if (isClosed) {  // wraparound if needed
70260                             var max = nodes.length - 1;
70261                             if (ix1 < 0)   ix1 = max + ix1;
70262                             if (ix2 < 0)   ix2 = max + ix2;
70263                             if (ix3 > max) ix3 = ix3 - max;
70264                             if (ix4 > max) ix4 = ix4 - max;
70265                         }
70266
70267                         if (nodes[ix1] === activeID) return 0;        // no - prevent self intersect
70268                         else if (nodes[ix2] === activeID) return 2;   // ok - adjacent
70269                         else if (nodes[ix3] === activeID) return 2;   // ok - adjacent
70270                         else if (nodes[ix4] === activeID) return 0;   // no - prevent self intersect
70271                         else if (isClosed && nodes.indexOf(activeID) !== -1) return 0;  // no - prevent self intersect
70272                     }
70273                 }
70274             }
70275
70276             return 1;   // ok
70277         }
70278
70279
70280         function svgMarkerSegments(projection, graph, dt,
70281                                           shouldReverse,
70282                                           bothDirections) {
70283             return function(entity) {
70284                 var i = 0;
70285                 var offset = dt;
70286                 var segments = [];
70287                 var clip = d3_geoIdentity().clipExtent(projection.clipExtent()).stream;
70288                 var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
70289                 var a, b;
70290
70291                 if (shouldReverse(entity)) {
70292                     coordinates.reverse();
70293                 }
70294
70295                 d3_geoStream({
70296                     type: 'LineString',
70297                     coordinates: coordinates
70298                 }, projection.stream(clip({
70299                     lineStart: function() {},
70300                     lineEnd: function() { a = null; },
70301                     point: function(x, y) {
70302                         b = [x, y];
70303
70304                         if (a) {
70305                             var span = geoVecLength(a, b) - offset;
70306
70307                             if (span >= 0) {
70308                                 var heading = geoVecAngle(a, b);
70309                                 var dx = dt * Math.cos(heading);
70310                                 var dy = dt * Math.sin(heading);
70311                                 var p = [
70312                                     a[0] + offset * Math.cos(heading),
70313                                     a[1] + offset * Math.sin(heading)
70314                                 ];
70315
70316                                 // gather coordinates
70317                                 var coord = [a, p];
70318                                 for (span -= dt; span >= 0; span -= dt) {
70319                                     p = geoVecAdd(p, [dx, dy]);
70320                                     coord.push(p);
70321                                 }
70322                                 coord.push(b);
70323
70324                                 // generate svg paths
70325                                 var segment = '';
70326                                 var j;
70327
70328                                 for (j = 0; j < coord.length; j++) {
70329                                     segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
70330                                 }
70331                                 segments.push({ id: entity.id, index: i++, d: segment });
70332
70333                                 if (bothDirections(entity)) {
70334                                     segment = '';
70335                                     for (j = coord.length - 1; j >= 0; j--) {
70336                                         segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
70337                                     }
70338                                     segments.push({ id: entity.id, index: i++, d: segment });
70339                                 }
70340                             }
70341
70342                             offset = -span;
70343                         }
70344
70345                         a = b;
70346                     }
70347                 })));
70348
70349                 return segments;
70350             };
70351         }
70352
70353
70354         function svgPath(projection, graph, isArea) {
70355
70356             // Explanation of magic numbers:
70357             // "padding" here allows space for strokes to extend beyond the viewport,
70358             // so that the stroke isn't drawn along the edge of the viewport when
70359             // the shape is clipped.
70360             //
70361             // When drawing lines, pad viewport by 5px.
70362             // When drawing areas, pad viewport by 65px in each direction to allow
70363             // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
70364
70365             var cache = {};
70366             var padding = isArea ? 65 : 5;
70367             var viewport = projection.clipExtent();
70368             var paddedExtent = [
70369                 [viewport[0][0] - padding, viewport[0][1] - padding],
70370                 [viewport[1][0] + padding, viewport[1][1] + padding]
70371             ];
70372             var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
70373             var project = projection.stream;
70374             var path = d3_geoPath()
70375                 .projection({stream: function(output) { return project(clip(output)); }});
70376
70377             var svgpath = function(entity) {
70378                 if (entity.id in cache) {
70379                     return cache[entity.id];
70380                 } else {
70381                     return cache[entity.id] = path(entity.asGeoJSON(graph));
70382                 }
70383             };
70384
70385             svgpath.geojson = function(d) {
70386                 if (d.__featurehash__ !== undefined) {
70387                     if (d.__featurehash__ in cache) {
70388                         return cache[d.__featurehash__];
70389                     } else {
70390                         return cache[d.__featurehash__] = path(d);
70391                     }
70392                 } else {
70393                     return path(d);
70394                 }
70395             };
70396
70397             return svgpath;
70398         }
70399
70400
70401         function svgPointTransform(projection) {
70402             var svgpoint = function(entity) {
70403                 // http://jsperf.com/short-array-join
70404                 var pt = projection(entity.loc);
70405                 return 'translate(' + pt[0] + ',' + pt[1] + ')';
70406             };
70407
70408             svgpoint.geojson = function(d) {
70409                 return svgpoint(d.properties.entity);
70410             };
70411
70412             return svgpoint;
70413         }
70414
70415
70416         function svgRelationMemberTags(graph) {
70417             return function(entity) {
70418                 var tags = entity.tags;
70419                 var shouldCopyMultipolygonTags = !entity.hasInterestingTags();
70420                 graph.parentRelations(entity).forEach(function(relation) {
70421                     var type = relation.tags.type;
70422                     if ((type === 'multipolygon' && shouldCopyMultipolygonTags) || type === 'boundary') {
70423                         tags = Object.assign({}, relation.tags, tags);
70424                     }
70425                 });
70426                 return tags;
70427             };
70428         }
70429
70430
70431         function svgSegmentWay(way, graph, activeID) {
70432             // When there is no activeID, we can memoize this expensive computation
70433             if (activeID === undefined) {
70434                 return graph.transient(way, 'waySegments', getWaySegments);
70435             } else {
70436                 return getWaySegments();
70437             }
70438
70439             function getWaySegments() {
70440                 var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
70441                 var features = { passive: [], active: [] };
70442                 var start = {};
70443                 var end = {};
70444                 var node, type;
70445
70446                 for (var i = 0; i < way.nodes.length; i++) {
70447                     node = graph.entity(way.nodes[i]);
70448                     type = svgPassiveVertex(node, graph, activeID);
70449                     end = { node: node, type: type };
70450
70451                     if (start.type !== undefined) {
70452                         if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) {   // one adjacent vertex
70453                             pushActive(start, end, i);
70454                         } else if (start.type === 0 && end.type === 0) {   // both active vertices
70455                             pushActive(start, end, i);
70456                         } else {
70457                             pushPassive(start, end, i);
70458                         }
70459                     }
70460
70461                     start = end;
70462                 }
70463
70464                 return features;
70465
70466                 function pushActive(start, end, index) {
70467                     features.active.push({
70468                         type: 'Feature',
70469                         id: way.id + '-' + index + '-nope',
70470                         properties: {
70471                             nope: true,
70472                             target: true,
70473                             entity: way,
70474                             nodes: [start.node, end.node],
70475                             index: index
70476                         },
70477                         geometry: {
70478                             type: 'LineString',
70479                             coordinates: [start.node.loc, end.node.loc]
70480                         }
70481                     });
70482                 }
70483
70484                 function pushPassive(start, end, index) {
70485                     features.passive.push({
70486                         type: 'Feature',
70487                         id: way.id + '-' + index,
70488                         properties: {
70489                             target: true,
70490                             entity: way,
70491                             nodes: [start.node, end.node],
70492                             index: index
70493                         },
70494                         geometry: {
70495                             type: 'LineString',
70496                             coordinates: [start.node.loc, end.node.loc]
70497                         }
70498                     });
70499                 }
70500             }
70501         }
70502
70503         function svgTagClasses() {
70504             var primaries = [
70505                 'building', 'highway', 'railway', 'waterway', 'aeroway', 'aerialway',
70506                 'piste:type', 'boundary', 'power', 'amenity', 'natural', 'landuse',
70507                 'leisure', 'military', 'place', 'man_made', 'route', 'attraction',
70508                 'building:part', 'indoor'
70509             ];
70510             var statuses = [
70511                 'proposed', 'construction', 'disused', 'abandoned', 'dismantled',
70512                 'razed', 'demolished', 'obliterated', 'intermittent'
70513             ];
70514             var secondaries = [
70515                 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
70516                 'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
70517                 'public_transport', 'location', 'parking', 'golf', 'type', 'leisure',
70518                 'man_made', 'indoor'
70519             ];
70520             var _tags = function(entity) { return entity.tags; };
70521
70522
70523             var tagClasses = function(selection) {
70524                 selection.each(function tagClassesEach(entity) {
70525                     var value = this.className;
70526
70527                     if (value.baseVal !== undefined) {
70528                         value = value.baseVal;
70529                     }
70530
70531                     var t = _tags(entity);
70532
70533                     var computed = tagClasses.getClassesString(t, value, entity);
70534
70535                     if (computed !== value) {
70536                         d3_select(this).attr('class', computed);
70537                     }
70538                 });
70539             };
70540
70541
70542             tagClasses.getClassesString = function(t, value, entity) {
70543                 var primary, status;
70544                 var i, k, v;
70545
70546                 // in some situations we want to render perimeter strokes a certain way
70547                 var overrideGeometry;
70548                 if (/\bstroke\b/.test(value)) {
70549                     if (!!t.barrier && t.barrier !== 'no') {
70550                         overrideGeometry = 'line';
70551                     } else if (t.type === 'multipolygon' && !entity.hasInterestingTags()) {
70552                         overrideGeometry = 'area';
70553                     }
70554                 }
70555
70556                 // preserve base classes (nothing with `tag-`)
70557                 var classes = value.trim().split(/\s+/)
70558                     .filter(function(klass) {
70559                         return klass.length && !/^tag-/.test(klass);
70560                     })
70561                     .map(function(klass) {  // special overrides for some perimeter strokes
70562                         return (klass === 'line' || klass === 'area') ? (overrideGeometry || klass) : klass;
70563                     });
70564
70565                 // pick at most one primary classification tag..
70566                 for (i = 0; i < primaries.length; i++) {
70567                     k = primaries[i];
70568                     v = t[k];
70569                     if (!v || v === 'no') continue;
70570
70571                     if (k === 'piste:type') {  // avoid a ':' in the class name
70572                         k = 'piste';
70573                     } else if (k === 'building:part') {  // avoid a ':' in the class name
70574                         k = 'building_part';
70575                     }
70576
70577                     primary = k;
70578                     if (statuses.indexOf(v) !== -1) {   // e.g. `railway=abandoned`
70579                         status = v;
70580                         classes.push('tag-' + k);
70581                     } else {
70582                         classes.push('tag-' + k);
70583                         classes.push('tag-' + k + '-' + v);
70584                     }
70585
70586                     break;
70587                 }
70588
70589                 // add at most one status tag, only if relates to primary tag..
70590                 if (!status) {
70591                     for (i = 0; i < statuses.length; i++) {
70592                         k = statuses[i];
70593                         v = t[k];
70594                         if (!v || v === 'no') continue;
70595
70596                         if (v === 'yes') {   // e.g. `railway=rail + abandoned=yes`
70597                             status = k;
70598                         }
70599                         else if (primary && primary === v) {  // e.g. `railway=rail + abandoned=railway`
70600                             status = k;
70601                         } else if (!primary && primaries.indexOf(v) !== -1) {  // e.g. `abandoned=railway`
70602                             status = k;
70603                             primary = v;
70604                             classes.push('tag-' + v);
70605                         }  // else ignore e.g.  `highway=path + abandoned=railway`
70606
70607                         if (status) break;
70608                     }
70609                 }
70610
70611                 if (status) {
70612                     classes.push('tag-status');
70613                     classes.push('tag-status-' + status);
70614                 }
70615
70616                 // add any secondary tags
70617                 for (i = 0; i < secondaries.length; i++) {
70618                     k = secondaries[i];
70619                     v = t[k];
70620                     if (!v || v === 'no' || k === primary) continue;
70621                     classes.push('tag-' + k);
70622                     classes.push('tag-' + k + '-' + v);
70623                 }
70624
70625                 // For highways, look for surface tagging..
70626                 if (primary === 'highway' || primary === 'aeroway') {
70627                     var paved = (t.highway !== 'track');
70628                     for (k in t) {
70629                         v = t[k];
70630                         if (k in osmPavedTags) {
70631                             paved = !!osmPavedTags[k][v];
70632                             break;
70633                         }
70634                     }
70635                     if (!paved) {
70636                         classes.push('tag-unpaved');
70637                     }
70638                 }
70639
70640                 // If this is a wikidata-tagged item, add a class for that..
70641                 if (t.wikidata || t['brand:wikidata']) {
70642                     classes.push('tag-wikidata');
70643                 }
70644
70645                 return classes.join(' ').trim();
70646             };
70647
70648
70649             tagClasses.tags = function(val) {
70650                 if (!arguments.length) return _tags;
70651                 _tags = val;
70652                 return tagClasses;
70653             };
70654
70655             return tagClasses;
70656         }
70657
70658         function svgAreas(projection, context) {
70659             // Patterns only work in Firefox when set directly on element.
70660             // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
70661             var patterns = {
70662                 // tag - pattern name
70663                 // -or-
70664                 // tag - value - pattern name
70665                 // -or-
70666                 // tag - value - rules (optional tag-values, pattern name)
70667                 // (matches earlier rules first, so fallback should be last entry)
70668                 amenity: {
70669                     grave_yard: 'cemetery',
70670                     fountain: 'water_standing'
70671                 },
70672                 landuse: {
70673                     cemetery: [
70674                         { religion: 'christian', pattern: 'cemetery_christian' },
70675                         { religion: 'buddhist', pattern: 'cemetery_buddhist' },
70676                         { religion: 'muslim', pattern: 'cemetery_muslim' },
70677                         { religion: 'jewish', pattern: 'cemetery_jewish' },
70678                         { pattern: 'cemetery' }
70679                     ],
70680                     construction: 'construction',
70681                     farmland: 'farmland',
70682                     farmyard: 'farmyard',
70683                     forest: [
70684                         { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
70685                         { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
70686                         { leaf_type: 'leafless', pattern: 'forest_leafless' },
70687                         { pattern: 'forest' } // same as 'leaf_type:mixed'
70688                     ],
70689                     grave_yard: 'cemetery',
70690                     grass: 'grass',
70691                     landfill: 'landfill',
70692                     meadow: 'meadow',
70693                     military: 'construction',
70694                     orchard: 'orchard',
70695                     quarry: 'quarry',
70696                     vineyard: 'vineyard'
70697                 },
70698                 natural: {
70699                     beach: 'beach',
70700                     grassland: 'grass',
70701                     sand: 'beach',
70702                     scrub: 'scrub',
70703                     water: [
70704                         { water: 'pond', pattern: 'pond' },
70705                         { water: 'reservoir', pattern: 'water_standing' },
70706                         { pattern: 'waves' }
70707                     ],
70708                     wetland: [
70709                         { wetland: 'marsh', pattern: 'wetland_marsh' },
70710                         { wetland: 'swamp', pattern: 'wetland_swamp' },
70711                         { wetland: 'bog', pattern: 'wetland_bog' },
70712                         { wetland: 'reedbed', pattern: 'wetland_reedbed' },
70713                         { pattern: 'wetland' }
70714                     ],
70715                     wood: [
70716                         { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
70717                         { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
70718                         { leaf_type: 'leafless', pattern: 'forest_leafless' },
70719                         { pattern: 'forest' } // same as 'leaf_type:mixed'
70720                     ]
70721                 },
70722                 traffic_calming: {
70723                     island: [
70724                         { surface: 'grass', pattern: 'grass' },
70725                     ],
70726                     chicane: [
70727                         { surface: 'grass', pattern: 'grass' },
70728                     ],
70729                     choker: [
70730                         { surface: 'grass', pattern: 'grass' },
70731                     ]
70732                 }
70733             };
70734
70735             function setPattern(entity) {
70736                 // Skip pattern filling if this is a building (buildings don't get patterns applied)
70737                 if (entity.tags.building && entity.tags.building !== 'no') {
70738                     this.style.fill = this.style.stroke = '';
70739                     return;
70740                 }
70741
70742                 for (var tag in patterns) {
70743                     var entityValue = entity.tags[tag];
70744                     if (!entityValue) continue;
70745
70746                     if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
70747                         this.style.fill = this.style.stroke = 'url("#pattern-' + patterns[tag] + '")';
70748                         return;
70749                     } else {
70750                         var values = patterns[tag];
70751                         for (var value in values) {
70752                             if (entityValue !== value) continue;
70753
70754                             var rules = values[value];
70755                             if (typeof rules === 'string') { // short syntax - pattern name
70756                                 this.style.fill = this.style.stroke = 'url("#pattern-' + rules + '")';
70757                                 return;
70758                             } else { // long syntax - rule array
70759                                 for (var ruleKey in rules) {
70760                                     var rule = rules[ruleKey];
70761
70762                                     var pass = true;
70763                                     for (var criterion in rule) {
70764                                         if (criterion !== 'pattern') { // reserved for pattern name
70765                                             // The only rule is a required tag-value pair
70766                                             var v = entity.tags[criterion];
70767                                             if (!v || v !== rule[criterion]) {
70768                                                 pass = false;
70769                                                 break;
70770                                             }
70771                                         }
70772                                     }
70773
70774                                     if (pass) {
70775                                         this.style.fill = this.style.stroke = 'url("#pattern-' + rule.pattern + '")';
70776                                         return;
70777                                     }
70778                                 }
70779                             }
70780                         }
70781                     }
70782                 }
70783
70784                 this.style.fill = this.style.stroke = '';
70785             }
70786
70787
70788             function drawTargets(selection, graph, entities, filter) {
70789                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
70790                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
70791                 var getPath = svgPath(projection).geojson;
70792                 var activeID = context.activeID();
70793
70794                 // The targets and nopes will be MultiLineString sub-segments of the ways
70795                 var data = { targets: [], nopes: [] };
70796
70797                 entities.forEach(function(way) {
70798                     var features = svgSegmentWay(way, graph, activeID);
70799                     data.targets.push.apply(data.targets, features.passive);
70800                     data.nopes.push.apply(data.nopes, features.active);
70801                 });
70802
70803
70804                 // Targets allow hover and vertex snapping
70805                 var targetData = data.targets.filter(getPath);
70806                 var targets = selection.selectAll('.area.target-allowed')
70807                     .filter(function(d) { return filter(d.properties.entity); })
70808                     .data(targetData, function key(d) { return d.id; });
70809
70810                 // exit
70811                 targets.exit()
70812                     .remove();
70813
70814                 // enter/update
70815                 targets.enter()
70816                     .append('path')
70817                     .merge(targets)
70818                     .attr('d', getPath)
70819                     .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; });
70820
70821
70822                 // NOPE
70823                 var nopeData = data.nopes.filter(getPath);
70824                 var nopes = selection.selectAll('.area.target-nope')
70825                     .filter(function(d) { return filter(d.properties.entity); })
70826                     .data(nopeData, function key(d) { return d.id; });
70827
70828                 // exit
70829                 nopes.exit()
70830                     .remove();
70831
70832                 // enter/update
70833                 nopes.enter()
70834                     .append('path')
70835                     .merge(nopes)
70836                     .attr('d', getPath)
70837                     .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; });
70838             }
70839
70840
70841             function drawAreas(selection, graph, entities, filter) {
70842                 var path = svgPath(projection, graph, true);
70843                 var areas = {};
70844                 var multipolygon;
70845
70846                 for (var i = 0; i < entities.length; i++) {
70847                     var entity = entities[i];
70848                     if (entity.geometry(graph) !== 'area') continue;
70849
70850                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
70851                     if (multipolygon) {
70852                         areas[multipolygon.id] = {
70853                             entity: multipolygon.mergeTags(entity.tags),
70854                             area: Math.abs(entity.area(graph))
70855                         };
70856                     } else if (!areas[entity.id]) {
70857                         areas[entity.id] = {
70858                             entity: entity,
70859                             area: Math.abs(entity.area(graph))
70860                         };
70861                     }
70862                 }
70863
70864                 var fills = Object.values(areas).filter(function hasPath(a) { return path(a.entity); });
70865                 fills.sort(function areaSort(a, b) { return b.area - a.area; });
70866                 fills = fills.map(function(a) { return a.entity; });
70867
70868                 var strokes = fills.filter(function(area) { return area.type === 'way'; });
70869
70870                 var data = {
70871                     clip: fills,
70872                     shadow: strokes,
70873                     stroke: strokes,
70874                     fill: fills
70875                 };
70876
70877                 var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
70878                    .filter(filter)
70879                    .data(data.clip, osmEntity.key);
70880
70881                 clipPaths.exit()
70882                    .remove();
70883
70884                 var clipPathsEnter = clipPaths.enter()
70885                    .append('clipPath')
70886                    .attr('class', 'clipPath-osm')
70887                    .attr('id', function(entity) { return entity.id + '-clippath'; });
70888
70889                 clipPathsEnter
70890                    .append('path');
70891
70892                 clipPaths.merge(clipPathsEnter)
70893                    .selectAll('path')
70894                    .attr('d', path);
70895
70896
70897                 var drawLayer = selection.selectAll('.layer-osm.areas');
70898                 var touchLayer = selection.selectAll('.layer-touch.areas');
70899
70900                 // Draw areas..
70901                 var areagroup = drawLayer
70902                     .selectAll('g.areagroup')
70903                     .data(['fill', 'shadow', 'stroke']);
70904
70905                 areagroup = areagroup.enter()
70906                     .append('g')
70907                     .attr('class', function(d) { return 'areagroup area-' + d; })
70908                     .merge(areagroup);
70909
70910                 var paths = areagroup
70911                     .selectAll('path')
70912                     .filter(filter)
70913                     .data(function(layer) { return data[layer]; }, osmEntity.key);
70914
70915                 paths.exit()
70916                     .remove();
70917
70918
70919                 var fillpaths = selection.selectAll('.area-fill path.area').nodes();
70920                 var bisect = d3_bisector(function(node) { return -node.__data__.area(graph); }).left;
70921
70922                 function sortedByArea(entity) {
70923                     if (this._parent.__data__ === 'fill') {
70924                         return fillpaths[bisect(fillpaths, -entity.area(graph))];
70925                     }
70926                 }
70927
70928                 paths = paths.enter()
70929                     .insert('path', sortedByArea)
70930                     .merge(paths)
70931                     .each(function(entity) {
70932                         var layer = this.parentNode.__data__;
70933                         this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
70934
70935                         if (layer === 'fill') {
70936                             this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
70937                             setPattern.call(this, entity);
70938                         }
70939                     })
70940                     .call(svgTagClasses())
70941                     .attr('d', path);
70942
70943
70944                 // Draw touch targets..
70945                 touchLayer
70946                     .call(drawTargets, graph, data.stroke, filter);
70947             }
70948
70949             return drawAreas;
70950         }
70951
70952         //[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]
70953         //[4a]          NameChar           ::=          NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
70954         //[5]           Name       ::=          NameStartChar (NameChar)*
70955         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
70956         var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
70957         var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
70958         //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
70959         //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(',')
70960
70961         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
70962         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
70963         var S_TAG = 0;//tag name offerring
70964         var S_ATTR = 1;//attr name offerring 
70965         var S_ATTR_SPACE=2;//attr name end and space offer
70966         var S_EQ = 3;//=space?
70967         var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
70968         var S_ATTR_END = 5;//attr value end and no space(quot end)
70969         var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
70970         var S_TAG_CLOSE = 7;//closed el<el />
70971
70972         function XMLReader(){
70973                 
70974         }
70975
70976         XMLReader.prototype = {
70977                 parse:function(source,defaultNSMap,entityMap){
70978                         var domBuilder = this.domBuilder;
70979                         domBuilder.startDocument();
70980                         _copy(defaultNSMap ,defaultNSMap = {});
70981                         parse(source,defaultNSMap,entityMap,
70982                                         domBuilder,this.errorHandler);
70983                         domBuilder.endDocument();
70984                 }
70985         };
70986         function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
70987                 function fixedFromCharCode(code) {
70988                         // String.prototype.fromCharCode does not supports
70989                         // > 2 bytes unicode chars directly
70990                         if (code > 0xffff) {
70991                                 code -= 0x10000;
70992                                 var surrogate1 = 0xd800 + (code >> 10)
70993                                         , surrogate2 = 0xdc00 + (code & 0x3ff);
70994
70995                                 return String.fromCharCode(surrogate1, surrogate2);
70996                         } else {
70997                                 return String.fromCharCode(code);
70998                         }
70999                 }
71000                 function entityReplacer(a){
71001                         var k = a.slice(1,-1);
71002                         if(k in entityMap){
71003                                 return entityMap[k]; 
71004                         }else if(k.charAt(0) === '#'){
71005                                 return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
71006                         }else{
71007                                 errorHandler.error('entity not found:'+a);
71008                                 return a;
71009                         }
71010                 }
71011                 function appendText(end){//has some bugs
71012                         if(end>start){
71013                                 var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
71014                                 locator&&position(start);
71015                                 domBuilder.characters(xt,0,end-start);
71016                                 start = end;
71017                         }
71018                 }
71019                 function position(p,m){
71020                         while(p>=lineEnd && (m = linePattern.exec(source))){
71021                                 lineStart = m.index;
71022                                 lineEnd = lineStart + m[0].length;
71023                                 locator.lineNumber++;
71024                                 //console.log('line++:',locator,startPos,endPos)
71025                         }
71026                         locator.columnNumber = p-lineStart+1;
71027                 }
71028                 var lineStart = 0;
71029                 var lineEnd = 0;
71030                 var linePattern = /.*(?:\r\n?|\n)|.*$/g;
71031                 var locator = domBuilder.locator;
71032                 
71033                 var parseStack = [{currentNSMap:defaultNSMapCopy}];
71034                 var closeMap = {};
71035                 var start = 0;
71036                 while(true){
71037                         try{
71038                                 var tagStart = source.indexOf('<',start);
71039                                 if(tagStart<0){
71040                                         if(!source.substr(start).match(/^\s*$/)){
71041                                                 var doc = domBuilder.doc;
71042                                         var text = doc.createTextNode(source.substr(start));
71043                                         doc.appendChild(text);
71044                                         domBuilder.currentElement = text;
71045                                         }
71046                                         return;
71047                                 }
71048                                 if(tagStart>start){
71049                                         appendText(tagStart);
71050                                 }
71051                                 switch(source.charAt(tagStart+1)){
71052                                 case '/':
71053                                         var end = source.indexOf('>',tagStart+3);
71054                                         var tagName = source.substring(tagStart+2,end);
71055                                         var config = parseStack.pop();
71056                                         if(end<0){
71057                                                 
71058                                         tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
71059                                         //console.error('#@@@@@@'+tagName)
71060                                         errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
71061                                         end = tagStart+1+tagName.length;
71062                                 }else if(tagName.match(/\s</)){
71063                                         tagName = tagName.replace(/[\s<].*/,'');
71064                                         errorHandler.error("end tag name: "+tagName+' maybe not complete');
71065                                         end = tagStart+1+tagName.length;
71066                                         }
71067                                         //console.error(parseStack.length,parseStack)
71068                                         //console.error(config);
71069                                         var localNSMap = config.localNSMap;
71070                                         var endMatch = config.tagName == tagName;
71071                                         var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase();
71072                                 if(endIgnoreCaseMach){
71073                                         domBuilder.endElement(config.uri,config.localName,tagName);
71074                                                 if(localNSMap){
71075                                                         for(var prefix in localNSMap){
71076                                                                 domBuilder.endPrefixMapping(prefix) ;
71077                                                         }
71078                                                 }
71079                                                 if(!endMatch){
71080                                         errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
71081                                                 }
71082                                 }else{
71083                                         parseStack.push(config);
71084                                 }
71085                                         
71086                                         end++;
71087                                         break;
71088                                         // end elment
71089                                 case '?':// <?...?>
71090                                         locator&&position(tagStart);
71091                                         end = parseInstruction(source,tagStart,domBuilder);
71092                                         break;
71093                                 case '!':// <!doctype,<![CDATA,<!--
71094                                         locator&&position(tagStart);
71095                                         end = parseDCC(source,tagStart,domBuilder,errorHandler);
71096                                         break;
71097                                 default:
71098                                         locator&&position(tagStart);
71099                                         var el = new ElementAttributes();
71100                                         var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
71101                                         //elStartEnd
71102                                         var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
71103                                         var len = el.length;
71104                                         
71105                                         
71106                                         if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
71107                                                 el.closed = true;
71108                                                 if(!entityMap.nbsp){
71109                                                         errorHandler.warning('unclosed xml attribute');
71110                                                 }
71111                                         }
71112                                         if(locator && len){
71113                                                 var locator2 = copyLocator(locator,{});
71114                                                 //try{//attribute position fixed
71115                                                 for(var i = 0;i<len;i++){
71116                                                         var a = el[i];
71117                                                         position(a.offset);
71118                                                         a.locator = copyLocator(locator,{});
71119                                                 }
71120                                                 //}catch(e){console.error('@@@@@'+e)}
71121                                                 domBuilder.locator = locator2;
71122                                                 if(appendElement(el,domBuilder,currentNSMap)){
71123                                                         parseStack.push(el);
71124                                                 }
71125                                                 domBuilder.locator = locator;
71126                                         }else{
71127                                                 if(appendElement(el,domBuilder,currentNSMap)){
71128                                                         parseStack.push(el);
71129                                                 }
71130                                         }
71131                                         
71132                                         
71133                                         
71134                                         if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
71135                                                 end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder);
71136                                         }else{
71137                                                 end++;
71138                                         }
71139                                 }
71140                         }catch(e){
71141                                 errorHandler.error('element parse error: '+e);
71142                                 //errorHandler.error('element parse error: '+e);
71143                                 end = -1;
71144                                 //throw e;
71145                         }
71146                         if(end>start){
71147                                 start = end;
71148                         }else{
71149                                 //TODO: 这里有可能sax回退,有位置错误风险
71150                                 appendText(Math.max(tagStart,start)+1);
71151                         }
71152                 }
71153         }
71154         function copyLocator(f,t){
71155                 t.lineNumber = f.lineNumber;
71156                 t.columnNumber = f.columnNumber;
71157                 return t;
71158         }
71159
71160         /**
71161          * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
71162          * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
71163          */
71164         function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
71165                 var attrName;
71166                 var value;
71167                 var p = ++start;
71168                 var s = S_TAG;//status
71169                 while(true){
71170                         var c = source.charAt(p);
71171                         switch(c){
71172                         case '=':
71173                                 if(s === S_ATTR){//attrName
71174                                         attrName = source.slice(start,p);
71175                                         s = S_EQ;
71176                                 }else if(s === S_ATTR_SPACE){
71177                                         s = S_EQ;
71178                                 }else{
71179                                         //fatalError: equal must after attrName or space after attrName
71180                                         throw new Error('attribute equal must after attrName');
71181                                 }
71182                                 break;
71183                         case '\'':
71184                         case '"':
71185                                 if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
71186                                         ){//equal
71187                                         if(s === S_ATTR){
71188                                                 errorHandler.warning('attribute value must after "="');
71189                                                 attrName = source.slice(start,p);
71190                                         }
71191                                         start = p+1;
71192                                         p = source.indexOf(c,start);
71193                                         if(p>0){
71194                                                 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
71195                                                 el.add(attrName,value,start-1);
71196                                                 s = S_ATTR_END;
71197                                         }else{
71198                                                 //fatalError: no end quot match
71199                                                 throw new Error('attribute value no end \''+c+'\' match');
71200                                         }
71201                                 }else if(s == S_ATTR_NOQUOT_VALUE){
71202                                         value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
71203                                         //console.log(attrName,value,start,p)
71204                                         el.add(attrName,value,start);
71205                                         //console.dir(el)
71206                                         errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
71207                                         start = p+1;
71208                                         s = S_ATTR_END;
71209                                 }else{
71210                                         //fatalError: no equal before
71211                                         throw new Error('attribute value must after "="');
71212                                 }
71213                                 break;
71214                         case '/':
71215                                 switch(s){
71216                                 case S_TAG:
71217                                         el.setTagName(source.slice(start,p));
71218                                 case S_ATTR_END:
71219                                 case S_TAG_SPACE:
71220                                 case S_TAG_CLOSE:
71221                                         s =S_TAG_CLOSE;
71222                                         el.closed = true;
71223                                 case S_ATTR_NOQUOT_VALUE:
71224                                 case S_ATTR:
71225                                 case S_ATTR_SPACE:
71226                                         break;
71227                                 //case S_EQ:
71228                                 default:
71229                                         throw new Error("attribute invalid close char('/')")
71230                                 }
71231                                 break;
71232                         case ''://end document
71233                                 //throw new Error('unexpected end of input')
71234                                 errorHandler.error('unexpected end of input');
71235                                 if(s == S_TAG){
71236                                         el.setTagName(source.slice(start,p));
71237                                 }
71238                                 return p;
71239                         case '>':
71240                                 switch(s){
71241                                 case S_TAG:
71242                                         el.setTagName(source.slice(start,p));
71243                                 case S_ATTR_END:
71244                                 case S_TAG_SPACE:
71245                                 case S_TAG_CLOSE:
71246                                         break;//normal
71247                                 case S_ATTR_NOQUOT_VALUE://Compatible state
71248                                 case S_ATTR:
71249                                         value = source.slice(start,p);
71250                                         if(value.slice(-1) === '/'){
71251                                                 el.closed  = true;
71252                                                 value = value.slice(0,-1);
71253                                         }
71254                                 case S_ATTR_SPACE:
71255                                         if(s === S_ATTR_SPACE){
71256                                                 value = attrName;
71257                                         }
71258                                         if(s == S_ATTR_NOQUOT_VALUE){
71259                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
71260                                                 el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start);
71261                                         }else{
71262                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){
71263                                                         errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!');
71264                                                 }
71265                                                 el.add(value,value,start);
71266                                         }
71267                                         break;
71268                                 case S_EQ:
71269                                         throw new Error('attribute value missed!!');
71270                                 }
71271         //                      console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
71272                                 return p;
71273                         /*xml space '\x20' | #x9 | #xD | #xA; */
71274                         case '\u0080':
71275                                 c = ' ';
71276                         default:
71277                                 if(c<= ' '){//space
71278                                         switch(s){
71279                                         case S_TAG:
71280                                                 el.setTagName(source.slice(start,p));//tagName
71281                                                 s = S_TAG_SPACE;
71282                                                 break;
71283                                         case S_ATTR:
71284                                                 attrName = source.slice(start,p);
71285                                                 s = S_ATTR_SPACE;
71286                                                 break;
71287                                         case S_ATTR_NOQUOT_VALUE:
71288                                                 var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
71289                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
71290                                                 el.add(attrName,value,start);
71291                                         case S_ATTR_END:
71292                                                 s = S_TAG_SPACE;
71293                                                 break;
71294                                         //case S_TAG_SPACE:
71295                                         //case S_EQ:
71296                                         //case S_ATTR_SPACE:
71297                                         //      void();break;
71298                                         //case S_TAG_CLOSE:
71299                                                 //ignore warning
71300                                         }
71301                                 }else{//not space
71302         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
71303         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
71304                                         switch(s){
71305                                         //case S_TAG:void();break;
71306                                         //case S_ATTR:void();break;
71307                                         //case S_ATTR_NOQUOT_VALUE:void();break;
71308                                         case S_ATTR_SPACE:
71309                                                 var tagName =  el.tagName;
71310                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){
71311                                                         errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!');
71312                                                 }
71313                                                 el.add(attrName,attrName,start);
71314                                                 start = p;
71315                                                 s = S_ATTR;
71316                                                 break;
71317                                         case S_ATTR_END:
71318                                                 errorHandler.warning('attribute space is required"'+attrName+'"!!');
71319                                         case S_TAG_SPACE:
71320                                                 s = S_ATTR;
71321                                                 start = p;
71322                                                 break;
71323                                         case S_EQ:
71324                                                 s = S_ATTR_NOQUOT_VALUE;
71325                                                 start = p;
71326                                                 break;
71327                                         case S_TAG_CLOSE:
71328                                                 throw new Error("elements closed character '/' and '>' must be connected to");
71329                                         }
71330                                 }
71331                         }//end outer switch
71332                         //console.log('p++',p)
71333                         p++;
71334                 }
71335         }
71336         /**
71337          * @return true if has new namespace define
71338          */
71339         function appendElement(el,domBuilder,currentNSMap){
71340                 var tagName = el.tagName;
71341                 var localNSMap = null;
71342                 //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
71343                 var i = el.length;
71344                 while(i--){
71345                         var a = el[i];
71346                         var qName = a.qName;
71347                         var value = a.value;
71348                         var nsp = qName.indexOf(':');
71349                         if(nsp>0){
71350                                 var prefix = a.prefix = qName.slice(0,nsp);
71351                                 var localName = qName.slice(nsp+1);
71352                                 var nsPrefix = prefix === 'xmlns' && localName;
71353                         }else{
71354                                 localName = qName;
71355                                 prefix = null;
71356                                 nsPrefix = qName === 'xmlns' && '';
71357                         }
71358                         //can not set prefix,because prefix !== ''
71359                         a.localName = localName ;
71360                         //prefix == null for no ns prefix attribute 
71361                         if(nsPrefix !== false){//hack!!
71362                                 if(localNSMap == null){
71363                                         localNSMap = {};
71364                                         //console.log(currentNSMap,0)
71365                                         _copy(currentNSMap,currentNSMap={});
71366                                         //console.log(currentNSMap,1)
71367                                 }
71368                                 currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
71369                                 a.uri = 'http://www.w3.org/2000/xmlns/';
71370                                 domBuilder.startPrefixMapping(nsPrefix, value); 
71371                         }
71372                 }
71373                 var i = el.length;
71374                 while(i--){
71375                         a = el[i];
71376                         var prefix = a.prefix;
71377                         if(prefix){//no prefix attribute has no namespace
71378                                 if(prefix === 'xml'){
71379                                         a.uri = 'http://www.w3.org/XML/1998/namespace';
71380                                 }if(prefix !== 'xmlns'){
71381                                         a.uri = currentNSMap[prefix || ''];
71382                                         
71383                                         //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
71384                                 }
71385                         }
71386                 }
71387                 var nsp = tagName.indexOf(':');
71388                 if(nsp>0){
71389                         prefix = el.prefix = tagName.slice(0,nsp);
71390                         localName = el.localName = tagName.slice(nsp+1);
71391                 }else{
71392                         prefix = null;//important!!
71393                         localName = el.localName = tagName;
71394                 }
71395                 //no prefix element has default namespace
71396                 var ns = el.uri = currentNSMap[prefix || ''];
71397                 domBuilder.startElement(ns,localName,tagName,el);
71398                 //endPrefixMapping and startPrefixMapping have not any help for dom builder
71399                 //localNSMap = null
71400                 if(el.closed){
71401                         domBuilder.endElement(ns,localName,tagName);
71402                         if(localNSMap){
71403                                 for(prefix in localNSMap){
71404                                         domBuilder.endPrefixMapping(prefix); 
71405                                 }
71406                         }
71407                 }else{
71408                         el.currentNSMap = currentNSMap;
71409                         el.localNSMap = localNSMap;
71410                         //parseStack.push(el);
71411                         return true;
71412                 }
71413         }
71414         function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
71415                 if(/^(?:script|textarea)$/i.test(tagName)){
71416                         var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
71417                         var text = source.substring(elStartEnd+1,elEndStart);
71418                         if(/[&<]/.test(text)){
71419                                 if(/^script$/i.test(tagName)){
71420                                         //if(!/\]\]>/.test(text)){
71421                                                 //lexHandler.startCDATA();
71422                                                 domBuilder.characters(text,0,text.length);
71423                                                 //lexHandler.endCDATA();
71424                                                 return elEndStart;
71425                                         //}
71426                                 }//}else{//text area
71427                                         text = text.replace(/&#?\w+;/g,entityReplacer);
71428                                         domBuilder.characters(text,0,text.length);
71429                                         return elEndStart;
71430                                 //}
71431                                 
71432                         }
71433                 }
71434                 return elStartEnd+1;
71435         }
71436         function fixSelfClosed(source,elStartEnd,tagName,closeMap){
71437                 //if(tagName in closeMap){
71438                 var pos = closeMap[tagName];
71439                 if(pos == null){
71440                         //console.log(tagName)
71441                         pos =  source.lastIndexOf('</'+tagName+'>');
71442                         if(pos<elStartEnd){//忘记闭合
71443                                 pos = source.lastIndexOf('</'+tagName);
71444                         }
71445                         closeMap[tagName] =pos;
71446                 }
71447                 return pos<elStartEnd;
71448                 //} 
71449         }
71450         function _copy(source,target){
71451                 for(var n in source){target[n] = source[n];}
71452         }
71453         function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
71454                 var next= source.charAt(start+2);
71455                 switch(next){
71456                 case '-':
71457                         if(source.charAt(start + 3) === '-'){
71458                                 var end = source.indexOf('-->',start+4);
71459                                 //append comment source.substring(4,end)//<!--
71460                                 if(end>start){
71461                                         domBuilder.comment(source,start+4,end-start-4);
71462                                         return end+3;
71463                                 }else{
71464                                         errorHandler.error("Unclosed comment");
71465                                         return -1;
71466                                 }
71467                         }else{
71468                                 //error
71469                                 return -1;
71470                         }
71471                 default:
71472                         if(source.substr(start+3,6) == 'CDATA['){
71473                                 var end = source.indexOf(']]>',start+9);
71474                                 domBuilder.startCDATA();
71475                                 domBuilder.characters(source,start+9,end-start-9);
71476                                 domBuilder.endCDATA(); 
71477                                 return end+3;
71478                         }
71479                         //<!DOCTYPE
71480                         //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
71481                         var matchs = split(source,start);
71482                         var len = matchs.length;
71483                         if(len>1 && /!doctype/i.test(matchs[0][0])){
71484                                 var name = matchs[1][0];
71485                                 var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0];
71486                                 var sysid = len>4 && matchs[4][0];
71487                                 var lastMatch = matchs[len-1];
71488                                 domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
71489                                                 sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
71490                                 domBuilder.endDTD();
71491                                 
71492                                 return lastMatch.index+lastMatch[0].length
71493                         }
71494                 }
71495                 return -1;
71496         }
71497
71498
71499
71500         function parseInstruction(source,start,domBuilder){
71501                 var end = source.indexOf('?>',start);
71502                 if(end){
71503                         var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
71504                         if(match){
71505                                 var len = match[0].length;
71506                                 domBuilder.processingInstruction(match[1], match[2]) ;
71507                                 return end+2;
71508                         }else{//error
71509                                 return -1;
71510                         }
71511                 }
71512                 return -1;
71513         }
71514
71515         /**
71516          * @param source
71517          */
71518         function ElementAttributes(source){
71519                 
71520         }
71521         ElementAttributes.prototype = {
71522                 setTagName:function(tagName){
71523                         if(!tagNamePattern.test(tagName)){
71524                                 throw new Error('invalid tagName:'+tagName)
71525                         }
71526                         this.tagName = tagName;
71527                 },
71528                 add:function(qName,value,offset){
71529                         if(!tagNamePattern.test(qName)){
71530                                 throw new Error('invalid attribute:'+qName)
71531                         }
71532                         this[this.length++] = {qName:qName,value:value,offset:offset};
71533                 },
71534                 length:0,
71535                 getLocalName:function(i){return this[i].localName},
71536                 getLocator:function(i){return this[i].locator},
71537                 getQName:function(i){return this[i].qName},
71538                 getURI:function(i){return this[i].uri},
71539                 getValue:function(i){return this[i].value}
71540         //      ,getIndex:function(uri, localName)){
71541         //              if(localName){
71542         //                      
71543         //              }else{
71544         //                      var qName = uri
71545         //              }
71546         //      },
71547         //      getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
71548         //      getType:function(uri,localName){}
71549         //      getType:function(i){},
71550         };
71551
71552
71553
71554
71555         function _set_proto_(thiz,parent){
71556                 thiz.__proto__ = parent;
71557                 return thiz;
71558         }
71559         if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
71560                 _set_proto_ = function(thiz,parent){
71561                         function p(){}          p.prototype = parent;
71562                         p = new p();
71563                         for(parent in thiz){
71564                                 p[parent] = thiz[parent];
71565                         }
71566                         return p;
71567                 };
71568         }
71569
71570         function split(source,start){
71571                 var match;
71572                 var buf = [];
71573                 var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
71574                 reg.lastIndex = start;
71575                 reg.exec(source);//skip <
71576                 while(match = reg.exec(source)){
71577                         buf.push(match);
71578                         if(match[1])return buf;
71579                 }
71580         }
71581
71582         var XMLReader_1 = XMLReader;
71583
71584         var sax = {
71585                 XMLReader: XMLReader_1
71586         };
71587
71588         /*
71589          * DOM Level 2
71590          * Object DOMException
71591          * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
71592          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
71593          */
71594
71595         function copy$3(src,dest){
71596                 for(var p in src){
71597                         dest[p] = src[p];
71598                 }
71599         }
71600         /**
71601         ^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
71602         ^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
71603          */
71604         function _extends(Class,Super){
71605                 var pt = Class.prototype;
71606                 if(Object.create){
71607                         var ppt = Object.create(Super.prototype);
71608                         pt.__proto__ = ppt;
71609                 }
71610                 if(!(pt instanceof Super)){
71611                         function t(){}          t.prototype = Super.prototype;
71612                         t = new t();
71613                         copy$3(pt,t);
71614                         Class.prototype = pt = t;
71615                 }
71616                 if(pt.constructor != Class){
71617                         if(typeof Class != 'function'){
71618                                 console.error("unknow Class:"+Class);
71619                         }
71620                         pt.constructor = Class;
71621                 }
71622         }
71623         var htmlns = 'http://www.w3.org/1999/xhtml' ;
71624         // Node Types
71625         var NodeType = {};
71626         var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
71627         var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
71628         var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
71629         var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
71630         var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
71631         var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
71632         var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
71633         var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
71634         var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
71635         var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
71636         var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
71637         var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
71638
71639         // ExceptionCode
71640         var ExceptionCode = {};
71641         var ExceptionMessage = {};
71642         var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
71643         var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
71644         var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
71645         var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
71646         var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
71647         var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
71648         var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
71649         var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
71650         var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
71651         var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
71652         //level2
71653         var INVALID_STATE_ERR           = ExceptionCode.INVALID_STATE_ERR               = ((ExceptionMessage[11]="Invalid state"),11);
71654         var SYNTAX_ERR                  = ExceptionCode.SYNTAX_ERR                      = ((ExceptionMessage[12]="Syntax error"),12);
71655         var INVALID_MODIFICATION_ERR    = ExceptionCode.INVALID_MODIFICATION_ERR        = ((ExceptionMessage[13]="Invalid modification"),13);
71656         var NAMESPACE_ERR               = ExceptionCode.NAMESPACE_ERR                   = ((ExceptionMessage[14]="Invalid namespace"),14);
71657         var INVALID_ACCESS_ERR          = ExceptionCode.INVALID_ACCESS_ERR              = ((ExceptionMessage[15]="Invalid access"),15);
71658
71659
71660         function DOMException$2(code, message) {
71661                 if(message instanceof Error){
71662                         var error = message;
71663                 }else{
71664                         error = this;
71665                         Error.call(this, ExceptionMessage[code]);
71666                         this.message = ExceptionMessage[code];
71667                         if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException$2);
71668                 }
71669                 error.code = code;
71670                 if(message) this.message = this.message + ": " + message;
71671                 return error;
71672         }DOMException$2.prototype = Error.prototype;
71673         copy$3(ExceptionCode,DOMException$2);
71674         /**
71675          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
71676          * 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.
71677          * The items in the NodeList are accessible via an integral index, starting from 0.
71678          */
71679         function NodeList() {
71680         }NodeList.prototype = {
71681                 /**
71682                  * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
71683                  * @standard level1
71684                  */
71685                 length:0, 
71686                 /**
71687                  * 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.
71688                  * @standard level1
71689                  * @param index  unsigned long 
71690                  *   Index into the collection.
71691                  * @return Node
71692                  *      The node at the indexth position in the NodeList, or null if that is not a valid index. 
71693                  */
71694                 item: function(index) {
71695                         return this[index] || null;
71696                 },
71697                 toString:function(isHTML,nodeFilter){
71698                         for(var buf = [], i = 0;i<this.length;i++){
71699                                 serializeToString(this[i],buf,isHTML,nodeFilter);
71700                         }
71701                         return buf.join('');
71702                 }
71703         };
71704         function LiveNodeList(node,refresh){
71705                 this._node = node;
71706                 this._refresh = refresh;
71707                 _updateLiveList(this);
71708         }
71709         function _updateLiveList(list){
71710                 var inc = list._node._inc || list._node.ownerDocument._inc;
71711                 if(list._inc != inc){
71712                         var ls = list._refresh(list._node);
71713                         //console.log(ls.length)
71714                         __set__(list,'length',ls.length);
71715                         copy$3(ls,list);
71716                         list._inc = inc;
71717                 }
71718         }
71719         LiveNodeList.prototype.item = function(i){
71720                 _updateLiveList(this);
71721                 return this[i];
71722         };
71723
71724         _extends(LiveNodeList,NodeList);
71725         /**
71726          * 
71727          * 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.
71728          * NamedNodeMap objects in the DOM are live.
71729          * used for attributes or DocumentType entities 
71730          */
71731         function NamedNodeMap() {
71732         }
71733         function _findNodeIndex(list,node){
71734                 var i = list.length;
71735                 while(i--){
71736                         if(list[i] === node){return i}
71737                 }
71738         }
71739
71740         function _addNamedNode(el,list,newAttr,oldAttr){
71741                 if(oldAttr){
71742                         list[_findNodeIndex(list,oldAttr)] = newAttr;
71743                 }else{
71744                         list[list.length++] = newAttr;
71745                 }
71746                 if(el){
71747                         newAttr.ownerElement = el;
71748                         var doc = el.ownerDocument;
71749                         if(doc){
71750                                 oldAttr && _onRemoveAttribute(doc,el,oldAttr);
71751                                 _onAddAttribute(doc,el,newAttr);
71752                         }
71753                 }
71754         }
71755         function _removeNamedNode(el,list,attr){
71756                 //console.log('remove attr:'+attr)
71757                 var i = _findNodeIndex(list,attr);
71758                 if(i>=0){
71759                         var lastIndex = list.length-1;
71760                         while(i<lastIndex){
71761                                 list[i] = list[++i];
71762                         }
71763                         list.length = lastIndex;
71764                         if(el){
71765                                 var doc = el.ownerDocument;
71766                                 if(doc){
71767                                         _onRemoveAttribute(doc,el,attr);
71768                                         attr.ownerElement = null;
71769                                 }
71770                         }
71771                 }else{
71772                         throw DOMException$2(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
71773                 }
71774         }
71775         NamedNodeMap.prototype = {
71776                 length:0,
71777                 item:NodeList.prototype.item,
71778                 getNamedItem: function(key) {
71779         //              if(key.indexOf(':')>0 || key == 'xmlns'){
71780         //                      return null;
71781         //              }
71782                         //console.log()
71783                         var i = this.length;
71784                         while(i--){
71785                                 var attr = this[i];
71786                                 //console.log(attr.nodeName,key)
71787                                 if(attr.nodeName == key){
71788                                         return attr;
71789                                 }
71790                         }
71791                 },
71792                 setNamedItem: function(attr) {
71793                         var el = attr.ownerElement;
71794                         if(el && el!=this._ownerElement){
71795                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
71796                         }
71797                         var oldAttr = this.getNamedItem(attr.nodeName);
71798                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
71799                         return oldAttr;
71800                 },
71801                 /* returns Node */
71802                 setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
71803                         var el = attr.ownerElement, oldAttr;
71804                         if(el && el!=this._ownerElement){
71805                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
71806                         }
71807                         oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
71808                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
71809                         return oldAttr;
71810                 },
71811
71812                 /* returns Node */
71813                 removeNamedItem: function(key) {
71814                         var attr = this.getNamedItem(key);
71815                         _removeNamedNode(this._ownerElement,this,attr);
71816                         return attr;
71817                         
71818                         
71819                 },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
71820                 
71821                 //for level2
71822                 removeNamedItemNS:function(namespaceURI,localName){
71823                         var attr = this.getNamedItemNS(namespaceURI,localName);
71824                         _removeNamedNode(this._ownerElement,this,attr);
71825                         return attr;
71826                 },
71827                 getNamedItemNS: function(namespaceURI, localName) {
71828                         var i = this.length;
71829                         while(i--){
71830                                 var node = this[i];
71831                                 if(node.localName == localName && node.namespaceURI == namespaceURI){
71832                                         return node;
71833                                 }
71834                         }
71835                         return null;
71836                 }
71837         };
71838         /**
71839          * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
71840          */
71841         function DOMImplementation(/* Object */ features) {
71842                 this._features = {};
71843                 if (features) {
71844                         for (var feature in features) {
71845                                  this._features = features[feature];
71846                         }
71847                 }
71848         }
71849         DOMImplementation.prototype = {
71850                 hasFeature: function(/* string */ feature, /* string */ version) {
71851                         var versions = this._features[feature.toLowerCase()];
71852                         if (versions && (!version || version in versions)) {
71853                                 return true;
71854                         } else {
71855                                 return false;
71856                         }
71857                 },
71858                 // Introduced in DOM Level 2:
71859                 createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
71860                         var doc = new Document();
71861                         doc.implementation = this;
71862                         doc.childNodes = new NodeList();
71863                         doc.doctype = doctype;
71864                         if(doctype){
71865                                 doc.appendChild(doctype);
71866                         }
71867                         if(qualifiedName){
71868                                 var root = doc.createElementNS(namespaceURI,qualifiedName);
71869                                 doc.appendChild(root);
71870                         }
71871                         return doc;
71872                 },
71873                 // Introduced in DOM Level 2:
71874                 createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
71875                         var node = new DocumentType();
71876                         node.name = qualifiedName;
71877                         node.nodeName = qualifiedName;
71878                         node.publicId = publicId;
71879                         node.systemId = systemId;
71880                         // Introduced in DOM Level 2:
71881                         //readonly attribute DOMString        internalSubset;
71882                         
71883                         //TODO:..
71884                         //  readonly attribute NamedNodeMap     entities;
71885                         //  readonly attribute NamedNodeMap     notations;
71886                         return node;
71887                 }
71888         };
71889
71890
71891         /**
71892          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
71893          */
71894
71895         function Node$2() {
71896         }
71897         Node$2.prototype = {
71898                 firstChild : null,
71899                 lastChild : null,
71900                 previousSibling : null,
71901                 nextSibling : null,
71902                 attributes : null,
71903                 parentNode : null,
71904                 childNodes : null,
71905                 ownerDocument : null,
71906                 nodeValue : null,
71907                 namespaceURI : null,
71908                 prefix : null,
71909                 localName : null,
71910                 // Modified in DOM Level 2:
71911                 insertBefore:function(newChild, refChild){//raises 
71912                         return _insertBefore(this,newChild,refChild);
71913                 },
71914                 replaceChild:function(newChild, oldChild){//raises 
71915                         this.insertBefore(newChild,oldChild);
71916                         if(oldChild){
71917                                 this.removeChild(oldChild);
71918                         }
71919                 },
71920                 removeChild:function(oldChild){
71921                         return _removeChild(this,oldChild);
71922                 },
71923                 appendChild:function(newChild){
71924                         return this.insertBefore(newChild,null);
71925                 },
71926                 hasChildNodes:function(){
71927                         return this.firstChild != null;
71928                 },
71929                 cloneNode:function(deep){
71930                         return cloneNode(this.ownerDocument||this,this,deep);
71931                 },
71932                 // Modified in DOM Level 2:
71933                 normalize:function(){
71934                         var child = this.firstChild;
71935                         while(child){
71936                                 var next = child.nextSibling;
71937                                 if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
71938                                         this.removeChild(next);
71939                                         child.appendData(next.data);
71940                                 }else{
71941                                         child.normalize();
71942                                         child = next;
71943                                 }
71944                         }
71945                 },
71946                 // Introduced in DOM Level 2:
71947                 isSupported:function(feature, version){
71948                         return this.ownerDocument.implementation.hasFeature(feature,version);
71949                 },
71950             // Introduced in DOM Level 2:
71951             hasAttributes:function(){
71952                 return this.attributes.length>0;
71953             },
71954             lookupPrefix:function(namespaceURI){
71955                 var el = this;
71956                 while(el){
71957                         var map = el._nsMap;
71958                         //console.dir(map)
71959                         if(map){
71960                                 for(var n in map){
71961                                         if(map[n] == namespaceURI){
71962                                                 return n;
71963                                         }
71964                                 }
71965                         }
71966                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
71967                 }
71968                 return null;
71969             },
71970             // Introduced in DOM Level 3:
71971             lookupNamespaceURI:function(prefix){
71972                 var el = this;
71973                 while(el){
71974                         var map = el._nsMap;
71975                         //console.dir(map)
71976                         if(map){
71977                                 if(prefix in map){
71978                                         return map[prefix] ;
71979                                 }
71980                         }
71981                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
71982                 }
71983                 return null;
71984             },
71985             // Introduced in DOM Level 3:
71986             isDefaultNamespace:function(namespaceURI){
71987                 var prefix = this.lookupPrefix(namespaceURI);
71988                 return prefix == null;
71989             }
71990         };
71991
71992
71993         function _xmlEncoder(c){
71994                 return c == '<' && '&lt;' ||
71995                  c == '>' && '&gt;' ||
71996                  c == '&' && '&amp;' ||
71997                  c == '"' && '&quot;' ||
71998                  '&#'+c.charCodeAt()+';'
71999         }
72000
72001
72002         copy$3(NodeType,Node$2);
72003         copy$3(NodeType,Node$2.prototype);
72004
72005         /**
72006          * @param callback return true for continue,false for break
72007          * @return boolean true: break visit;
72008          */
72009         function _visitNode(node,callback){
72010                 if(callback(node)){
72011                         return true;
72012                 }
72013                 if(node = node.firstChild){
72014                         do{
72015                                 if(_visitNode(node,callback)){return true}
72016                 }while(node=node.nextSibling)
72017             }
72018         }
72019
72020
72021
72022         function Document(){
72023         }
72024         function _onAddAttribute(doc,el,newAttr){
72025                 doc && doc._inc++;
72026                 var ns = newAttr.namespaceURI ;
72027                 if(ns == 'http://www.w3.org/2000/xmlns/'){
72028                         //update namespace
72029                         el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value;
72030                 }
72031         }
72032         function _onRemoveAttribute(doc,el,newAttr,remove){
72033                 doc && doc._inc++;
72034                 var ns = newAttr.namespaceURI ;
72035                 if(ns == 'http://www.w3.org/2000/xmlns/'){
72036                         //update namespace
72037                         delete el._nsMap[newAttr.prefix?newAttr.localName:''];
72038                 }
72039         }
72040         function _onUpdateChild(doc,el,newChild){
72041                 if(doc && doc._inc){
72042                         doc._inc++;
72043                         //update childNodes
72044                         var cs = el.childNodes;
72045                         if(newChild){
72046                                 cs[cs.length++] = newChild;
72047                         }else{
72048                                 //console.log(1)
72049                                 var child = el.firstChild;
72050                                 var i = 0;
72051                                 while(child){
72052                                         cs[i++] = child;
72053                                         child =child.nextSibling;
72054                                 }
72055                                 cs.length = i;
72056                         }
72057                 }
72058         }
72059
72060         /**
72061          * attributes;
72062          * children;
72063          * 
72064          * writeable properties:
72065          * nodeValue,Attr:value,CharacterData:data
72066          * prefix
72067          */
72068         function _removeChild(parentNode,child){
72069                 var previous = child.previousSibling;
72070                 var next = child.nextSibling;
72071                 if(previous){
72072                         previous.nextSibling = next;
72073                 }else{
72074                         parentNode.firstChild = next;
72075                 }
72076                 if(next){
72077                         next.previousSibling = previous;
72078                 }else{
72079                         parentNode.lastChild = previous;
72080                 }
72081                 _onUpdateChild(parentNode.ownerDocument,parentNode);
72082                 return child;
72083         }
72084         /**
72085          * preformance key(refChild == null)
72086          */
72087         function _insertBefore(parentNode,newChild,nextChild){
72088                 var cp = newChild.parentNode;
72089                 if(cp){
72090                         cp.removeChild(newChild);//remove and update
72091                 }
72092                 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
72093                         var newFirst = newChild.firstChild;
72094                         if (newFirst == null) {
72095                                 return newChild;
72096                         }
72097                         var newLast = newChild.lastChild;
72098                 }else{
72099                         newFirst = newLast = newChild;
72100                 }
72101                 var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
72102
72103                 newFirst.previousSibling = pre;
72104                 newLast.nextSibling = nextChild;
72105                 
72106                 
72107                 if(pre){
72108                         pre.nextSibling = newFirst;
72109                 }else{
72110                         parentNode.firstChild = newFirst;
72111                 }
72112                 if(nextChild == null){
72113                         parentNode.lastChild = newLast;
72114                 }else{
72115                         nextChild.previousSibling = newLast;
72116                 }
72117                 do{
72118                         newFirst.parentNode = parentNode;
72119                 }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
72120                 _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
72121                 //console.log(parentNode.lastChild.nextSibling == null)
72122                 if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
72123                         newChild.firstChild = newChild.lastChild = null;
72124                 }
72125                 return newChild;
72126         }
72127         function _appendSingleChild(parentNode,newChild){
72128                 var cp = newChild.parentNode;
72129                 if(cp){
72130                         var pre = parentNode.lastChild;
72131                         cp.removeChild(newChild);//remove and update
72132                         var pre = parentNode.lastChild;
72133                 }
72134                 var pre = parentNode.lastChild;
72135                 newChild.parentNode = parentNode;
72136                 newChild.previousSibling = pre;
72137                 newChild.nextSibling = null;
72138                 if(pre){
72139                         pre.nextSibling = newChild;
72140                 }else{
72141                         parentNode.firstChild = newChild;
72142                 }
72143                 parentNode.lastChild = newChild;
72144                 _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
72145                 return newChild;
72146                 //console.log("__aa",parentNode.lastChild.nextSibling == null)
72147         }
72148         Document.prototype = {
72149                 //implementation : null,
72150                 nodeName :  '#document',
72151                 nodeType :  DOCUMENT_NODE,
72152                 doctype :  null,
72153                 documentElement :  null,
72154                 _inc : 1,
72155                 
72156                 insertBefore :  function(newChild, refChild){//raises 
72157                         if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
72158                                 var child = newChild.firstChild;
72159                                 while(child){
72160                                         var next = child.nextSibling;
72161                                         this.insertBefore(child,refChild);
72162                                         child = next;
72163                                 }
72164                                 return newChild;
72165                         }
72166                         if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){
72167                                 this.documentElement = newChild;
72168                         }
72169                         
72170                         return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
72171                 },
72172                 removeChild :  function(oldChild){
72173                         if(this.documentElement == oldChild){
72174                                 this.documentElement = null;
72175                         }
72176                         return _removeChild(this,oldChild);
72177                 },
72178                 // Introduced in DOM Level 2:
72179                 importNode : function(importedNode,deep){
72180                         return importNode(this,importedNode,deep);
72181                 },
72182                 // Introduced in DOM Level 2:
72183                 getElementById :        function(id){
72184                         var rtv = null;
72185                         _visitNode(this.documentElement,function(node){
72186                                 if(node.nodeType == ELEMENT_NODE){
72187                                         if(node.getAttribute('id') == id){
72188                                                 rtv = node;
72189                                                 return true;
72190                                         }
72191                                 }
72192                         });
72193                         return rtv;
72194                 },
72195                 
72196                 //document factory method:
72197                 createElement : function(tagName){
72198                         var node = new Element();
72199                         node.ownerDocument = this;
72200                         node.nodeName = tagName;
72201                         node.tagName = tagName;
72202                         node.childNodes = new NodeList();
72203                         var attrs       = node.attributes = new NamedNodeMap();
72204                         attrs._ownerElement = node;
72205                         return node;
72206                 },
72207                 createDocumentFragment :        function(){
72208                         var node = new DocumentFragment();
72209                         node.ownerDocument = this;
72210                         node.childNodes = new NodeList();
72211                         return node;
72212                 },
72213                 createTextNode :        function(data){
72214                         var node = new Text();
72215                         node.ownerDocument = this;
72216                         node.appendData(data);
72217                         return node;
72218                 },
72219                 createComment : function(data){
72220                         var node = new Comment();
72221                         node.ownerDocument = this;
72222                         node.appendData(data);
72223                         return node;
72224                 },
72225                 createCDATASection :    function(data){
72226                         var node = new CDATASection();
72227                         node.ownerDocument = this;
72228                         node.appendData(data);
72229                         return node;
72230                 },
72231                 createProcessingInstruction :   function(target,data){
72232                         var node = new ProcessingInstruction();
72233                         node.ownerDocument = this;
72234                         node.tagName = node.target = target;
72235                         node.nodeValue= node.data = data;
72236                         return node;
72237                 },
72238                 createAttribute :       function(name){
72239                         var node = new Attr();
72240                         node.ownerDocument      = this;
72241                         node.name = name;
72242                         node.nodeName   = name;
72243                         node.localName = name;
72244                         node.specified = true;
72245                         return node;
72246                 },
72247                 createEntityReference : function(name){
72248                         var node = new EntityReference();
72249                         node.ownerDocument      = this;
72250                         node.nodeName   = name;
72251                         return node;
72252                 },
72253                 // Introduced in DOM Level 2:
72254                 createElementNS :       function(namespaceURI,qualifiedName){
72255                         var node = new Element();
72256                         var pl = qualifiedName.split(':');
72257                         var attrs       = node.attributes = new NamedNodeMap();
72258                         node.childNodes = new NodeList();
72259                         node.ownerDocument = this;
72260                         node.nodeName = qualifiedName;
72261                         node.tagName = qualifiedName;
72262                         node.namespaceURI = namespaceURI;
72263                         if(pl.length == 2){
72264                                 node.prefix = pl[0];
72265                                 node.localName = pl[1];
72266                         }else{
72267                                 //el.prefix = null;
72268                                 node.localName = qualifiedName;
72269                         }
72270                         attrs._ownerElement = node;
72271                         return node;
72272                 },
72273                 // Introduced in DOM Level 2:
72274                 createAttributeNS :     function(namespaceURI,qualifiedName){
72275                         var node = new Attr();
72276                         var pl = qualifiedName.split(':');
72277                         node.ownerDocument = this;
72278                         node.nodeName = qualifiedName;
72279                         node.name = qualifiedName;
72280                         node.namespaceURI = namespaceURI;
72281                         node.specified = true;
72282                         if(pl.length == 2){
72283                                 node.prefix = pl[0];
72284                                 node.localName = pl[1];
72285                         }else{
72286                                 //el.prefix = null;
72287                                 node.localName = qualifiedName;
72288                         }
72289                         return node;
72290                 }
72291         };
72292         _extends(Document,Node$2);
72293
72294
72295         function Element() {
72296                 this._nsMap = {};
72297         }Element.prototype = {
72298                 nodeType : ELEMENT_NODE,
72299                 hasAttribute : function(name){
72300                         return this.getAttributeNode(name)!=null;
72301                 },
72302                 getAttribute : function(name){
72303                         var attr = this.getAttributeNode(name);
72304                         return attr && attr.value || '';
72305                 },
72306                 getAttributeNode : function(name){
72307                         return this.attributes.getNamedItem(name);
72308                 },
72309                 setAttribute : function(name, value){
72310                         var attr = this.ownerDocument.createAttribute(name);
72311                         attr.value = attr.nodeValue = "" + value;
72312                         this.setAttributeNode(attr);
72313                 },
72314                 removeAttribute : function(name){
72315                         var attr = this.getAttributeNode(name);
72316                         attr && this.removeAttributeNode(attr);
72317                 },
72318                 
72319                 //four real opeartion method
72320                 appendChild:function(newChild){
72321                         if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
72322                                 return this.insertBefore(newChild,null);
72323                         }else{
72324                                 return _appendSingleChild(this,newChild);
72325                         }
72326                 },
72327                 setAttributeNode : function(newAttr){
72328                         return this.attributes.setNamedItem(newAttr);
72329                 },
72330                 setAttributeNodeNS : function(newAttr){
72331                         return this.attributes.setNamedItemNS(newAttr);
72332                 },
72333                 removeAttributeNode : function(oldAttr){
72334                         //console.log(this == oldAttr.ownerElement)
72335                         return this.attributes.removeNamedItem(oldAttr.nodeName);
72336                 },
72337                 //get real attribute name,and remove it by removeAttributeNode
72338                 removeAttributeNS : function(namespaceURI, localName){
72339                         var old = this.getAttributeNodeNS(namespaceURI, localName);
72340                         old && this.removeAttributeNode(old);
72341                 },
72342                 
72343                 hasAttributeNS : function(namespaceURI, localName){
72344                         return this.getAttributeNodeNS(namespaceURI, localName)!=null;
72345                 },
72346                 getAttributeNS : function(namespaceURI, localName){
72347                         var attr = this.getAttributeNodeNS(namespaceURI, localName);
72348                         return attr && attr.value || '';
72349                 },
72350                 setAttributeNS : function(namespaceURI, qualifiedName, value){
72351                         var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
72352                         attr.value = attr.nodeValue = "" + value;
72353                         this.setAttributeNode(attr);
72354                 },
72355                 getAttributeNodeNS : function(namespaceURI, localName){
72356                         return this.attributes.getNamedItemNS(namespaceURI, localName);
72357                 },
72358                 
72359                 getElementsByTagName : function(tagName){
72360                         return new LiveNodeList(this,function(base){
72361                                 var ls = [];
72362                                 _visitNode(base,function(node){
72363                                         if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
72364                                                 ls.push(node);
72365                                         }
72366                                 });
72367                                 return ls;
72368                         });
72369                 },
72370                 getElementsByTagNameNS : function(namespaceURI, localName){
72371                         return new LiveNodeList(this,function(base){
72372                                 var ls = [];
72373                                 _visitNode(base,function(node){
72374                                         if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
72375                                                 ls.push(node);
72376                                         }
72377                                 });
72378                                 return ls;
72379                                 
72380                         });
72381                 }
72382         };
72383         Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
72384         Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
72385
72386
72387         _extends(Element,Node$2);
72388         function Attr() {
72389         }Attr.prototype.nodeType = ATTRIBUTE_NODE;
72390         _extends(Attr,Node$2);
72391
72392
72393         function CharacterData() {
72394         }CharacterData.prototype = {
72395                 data : '',
72396                 substringData : function(offset, count) {
72397                         return this.data.substring(offset, offset+count);
72398                 },
72399                 appendData: function(text) {
72400                         text = this.data+text;
72401                         this.nodeValue = this.data = text;
72402                         this.length = text.length;
72403                 },
72404                 insertData: function(offset,text) {
72405                         this.replaceData(offset,0,text);
72406                 
72407                 },
72408                 appendChild:function(newChild){
72409                         throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
72410                 },
72411                 deleteData: function(offset, count) {
72412                         this.replaceData(offset,count,"");
72413                 },
72414                 replaceData: function(offset, count, text) {
72415                         var start = this.data.substring(0,offset);
72416                         var end = this.data.substring(offset+count);
72417                         text = start + text + end;
72418                         this.nodeValue = this.data = text;
72419                         this.length = text.length;
72420                 }
72421         };
72422         _extends(CharacterData,Node$2);
72423         function Text() {
72424         }Text.prototype = {
72425                 nodeName : "#text",
72426                 nodeType : TEXT_NODE,
72427                 splitText : function(offset) {
72428                         var text = this.data;
72429                         var newText = text.substring(offset);
72430                         text = text.substring(0, offset);
72431                         this.data = this.nodeValue = text;
72432                         this.length = text.length;
72433                         var newNode = this.ownerDocument.createTextNode(newText);
72434                         if(this.parentNode){
72435                                 this.parentNode.insertBefore(newNode, this.nextSibling);
72436                         }
72437                         return newNode;
72438                 }
72439         };
72440         _extends(Text,CharacterData);
72441         function Comment() {
72442         }Comment.prototype = {
72443                 nodeName : "#comment",
72444                 nodeType : COMMENT_NODE
72445         };
72446         _extends(Comment,CharacterData);
72447
72448         function CDATASection() {
72449         }CDATASection.prototype = {
72450                 nodeName : "#cdata-section",
72451                 nodeType : CDATA_SECTION_NODE
72452         };
72453         _extends(CDATASection,CharacterData);
72454
72455
72456         function DocumentType() {
72457         }DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
72458         _extends(DocumentType,Node$2);
72459
72460         function Notation() {
72461         }Notation.prototype.nodeType = NOTATION_NODE;
72462         _extends(Notation,Node$2);
72463
72464         function Entity() {
72465         }Entity.prototype.nodeType = ENTITY_NODE;
72466         _extends(Entity,Node$2);
72467
72468         function EntityReference() {
72469         }EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
72470         _extends(EntityReference,Node$2);
72471
72472         function DocumentFragment() {
72473         }DocumentFragment.prototype.nodeName =  "#document-fragment";
72474         DocumentFragment.prototype.nodeType =   DOCUMENT_FRAGMENT_NODE;
72475         _extends(DocumentFragment,Node$2);
72476
72477
72478         function ProcessingInstruction() {
72479         }
72480         ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
72481         _extends(ProcessingInstruction,Node$2);
72482         function XMLSerializer$1(){}
72483         XMLSerializer$1.prototype.serializeToString = function(node,isHtml,nodeFilter){
72484                 return nodeSerializeToString.call(node,isHtml,nodeFilter);
72485         };
72486         Node$2.prototype.toString = nodeSerializeToString;
72487         function nodeSerializeToString(isHtml,nodeFilter){
72488                 var buf = [];
72489                 var refNode = this.nodeType == 9?this.documentElement:this;
72490                 var prefix = refNode.prefix;
72491                 var uri = refNode.namespaceURI;
72492                 
72493                 if(uri && prefix == null){
72494                         //console.log(prefix)
72495                         var prefix = refNode.lookupPrefix(uri);
72496                         if(prefix == null){
72497                                 //isHTML = true;
72498                                 var visibleNamespaces=[
72499                                 {namespace:uri,prefix:null}
72500                                 //{namespace:uri,prefix:''}
72501                                 ];
72502                         }
72503                 }
72504                 serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
72505                 //console.log('###',this.nodeType,uri,prefix,buf.join(''))
72506                 return buf.join('');
72507         }
72508         function needNamespaceDefine(node,isHTML, visibleNamespaces) {
72509                 var prefix = node.prefix||'';
72510                 var uri = node.namespaceURI;
72511                 if (!prefix && !uri){
72512                         return false;
72513                 }
72514                 if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace" 
72515                         || uri == 'http://www.w3.org/2000/xmlns/'){
72516                         return false;
72517                 }
72518                 
72519                 var i = visibleNamespaces.length; 
72520                 //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)
72521                 while (i--) {
72522                         var ns = visibleNamespaces[i];
72523                         // get namespace prefix
72524                         //console.log(node.nodeType,node.tagName,ns.prefix,prefix)
72525                         if (ns.prefix == prefix){
72526                                 return ns.namespace != uri;
72527                         }
72528                 }
72529                 //console.log(isHTML,uri,prefix=='')
72530                 //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){
72531                 //      return false;
72532                 //}
72533                 //node.flag = '11111'
72534                 //console.error(3,true,node.flag,node.prefix,node.namespaceURI)
72535                 return true;
72536         }
72537         function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
72538                 if(nodeFilter){
72539                         node = nodeFilter(node);
72540                         if(node){
72541                                 if(typeof node == 'string'){
72542                                         buf.push(node);
72543                                         return;
72544                                 }
72545                         }else{
72546                                 return;
72547                         }
72548                         //buf.sort.apply(attrs, attributeSorter);
72549                 }
72550                 switch(node.nodeType){
72551                 case ELEMENT_NODE:
72552                         if (!visibleNamespaces) visibleNamespaces = [];
72553                         var startVisibleNamespaces = visibleNamespaces.length;
72554                         var attrs = node.attributes;
72555                         var len = attrs.length;
72556                         var child = node.firstChild;
72557                         var nodeName = node.tagName;
72558                         
72559                         isHTML =  (htmlns === node.namespaceURI) ||isHTML; 
72560                         buf.push('<',nodeName);
72561                         
72562                         
72563                         
72564                         for(var i=0;i<len;i++){
72565                                 // add namespaces for attributes
72566                                 var attr = attrs.item(i);
72567                                 if (attr.prefix == 'xmlns') {
72568                                         visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
72569                                 }else if(attr.nodeName == 'xmlns'){
72570                                         visibleNamespaces.push({ prefix: '', namespace: attr.value });
72571                                 }
72572                         }
72573                         for(var i=0;i<len;i++){
72574                                 var attr = attrs.item(i);
72575                                 if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
72576                                         var prefix = attr.prefix||'';
72577                                         var uri = attr.namespaceURI;
72578                                         var ns = prefix ? ' xmlns:' + prefix : " xmlns";
72579                                         buf.push(ns, '="' , uri , '"');
72580                                         visibleNamespaces.push({ prefix: prefix, namespace:uri });
72581                                 }
72582                                 serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
72583                         }
72584                         // add namespace for current node               
72585                         if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
72586                                 var prefix = node.prefix||'';
72587                                 var uri = node.namespaceURI;
72588                                 var ns = prefix ? ' xmlns:' + prefix : " xmlns";
72589                                 buf.push(ns, '="' , uri , '"');
72590                                 visibleNamespaces.push({ prefix: prefix, namespace:uri });
72591                         }
72592                         
72593                         if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
72594                                 buf.push('>');
72595                                 //if is cdata child node
72596                                 if(isHTML && /^script$/i.test(nodeName)){
72597                                         while(child){
72598                                                 if(child.data){
72599                                                         buf.push(child.data);
72600                                                 }else{
72601                                                         serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
72602                                                 }
72603                                                 child = child.nextSibling;
72604                                         }
72605                                 }else
72606                                 {
72607                                         while(child){
72608                                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
72609                                                 child = child.nextSibling;
72610                                         }
72611                                 }
72612                                 buf.push('</',nodeName,'>');
72613                         }else{
72614                                 buf.push('/>');
72615                         }
72616                         // remove added visible namespaces
72617                         //visibleNamespaces.length = startVisibleNamespaces;
72618                         return;
72619                 case DOCUMENT_NODE:
72620                 case DOCUMENT_FRAGMENT_NODE:
72621                         var child = node.firstChild;
72622                         while(child){
72623                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
72624                                 child = child.nextSibling;
72625                         }
72626                         return;
72627                 case ATTRIBUTE_NODE:
72628                         return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
72629                 case TEXT_NODE:
72630                         return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
72631                 case CDATA_SECTION_NODE:
72632                         return buf.push( '<![CDATA[',node.data,']]>');
72633                 case COMMENT_NODE:
72634                         return buf.push( "<!--",node.data,"-->");
72635                 case DOCUMENT_TYPE_NODE:
72636                         var pubid = node.publicId;
72637                         var sysid = node.systemId;
72638                         buf.push('<!DOCTYPE ',node.name);
72639                         if(pubid){
72640                                 buf.push(' PUBLIC "',pubid);
72641                                 if (sysid && sysid!='.') {
72642                                         buf.push( '" "',sysid);
72643                                 }
72644                                 buf.push('">');
72645                         }else if(sysid && sysid!='.'){
72646                                 buf.push(' SYSTEM "',sysid,'">');
72647                         }else{
72648                                 var sub = node.internalSubset;
72649                                 if(sub){
72650                                         buf.push(" [",sub,"]");
72651                                 }
72652                                 buf.push(">");
72653                         }
72654                         return;
72655                 case PROCESSING_INSTRUCTION_NODE:
72656                         return buf.push( "<?",node.target," ",node.data,"?>");
72657                 case ENTITY_REFERENCE_NODE:
72658                         return buf.push( '&',node.nodeName,';');
72659                 //case ENTITY_NODE:
72660                 //case NOTATION_NODE:
72661                 default:
72662                         buf.push('??',node.nodeName);
72663                 }
72664         }
72665         function importNode(doc,node,deep){
72666                 var node2;
72667                 switch (node.nodeType) {
72668                 case ELEMENT_NODE:
72669                         node2 = node.cloneNode(false);
72670                         node2.ownerDocument = doc;
72671                         //var attrs = node2.attributes;
72672                         //var len = attrs.length;
72673                         //for(var i=0;i<len;i++){
72674                                 //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
72675                         //}
72676                 case DOCUMENT_FRAGMENT_NODE:
72677                         break;
72678                 case ATTRIBUTE_NODE:
72679                         deep = true;
72680                         break;
72681                 //case ENTITY_REFERENCE_NODE:
72682                 //case PROCESSING_INSTRUCTION_NODE:
72683                 ////case TEXT_NODE:
72684                 //case CDATA_SECTION_NODE:
72685                 //case COMMENT_NODE:
72686                 //      deep = false;
72687                 //      break;
72688                 //case DOCUMENT_NODE:
72689                 //case DOCUMENT_TYPE_NODE:
72690                 //cannot be imported.
72691                 //case ENTITY_NODE:
72692                 //case NOTATION_NODE:
72693                 //can not hit in level3
72694                 //default:throw e;
72695                 }
72696                 if(!node2){
72697                         node2 = node.cloneNode(false);//false
72698                 }
72699                 node2.ownerDocument = doc;
72700                 node2.parentNode = null;
72701                 if(deep){
72702                         var child = node.firstChild;
72703                         while(child){
72704                                 node2.appendChild(importNode(doc,child,deep));
72705                                 child = child.nextSibling;
72706                         }
72707                 }
72708                 return node2;
72709         }
72710         //
72711         //var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
72712         //                                      attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
72713         function cloneNode(doc,node,deep){
72714                 var node2 = new node.constructor();
72715                 for(var n in node){
72716                         var v = node[n];
72717                         if(typeof v != 'object' ){
72718                                 if(v != node2[n]){
72719                                         node2[n] = v;
72720                                 }
72721                         }
72722                 }
72723                 if(node.childNodes){
72724                         node2.childNodes = new NodeList();
72725                 }
72726                 node2.ownerDocument = doc;
72727                 switch (node2.nodeType) {
72728                 case ELEMENT_NODE:
72729                         var attrs       = node.attributes;
72730                         var attrs2      = node2.attributes = new NamedNodeMap();
72731                         var len = attrs.length;
72732                         attrs2._ownerElement = node2;
72733                         for(var i=0;i<len;i++){
72734                                 node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
72735                         }
72736                         break;
72737                 case ATTRIBUTE_NODE:
72738                         deep = true;
72739                 }
72740                 if(deep){
72741                         var child = node.firstChild;
72742                         while(child){
72743                                 node2.appendChild(cloneNode(doc,child,deep));
72744                                 child = child.nextSibling;
72745                         }
72746                 }
72747                 return node2;
72748         }
72749
72750         function __set__(object,key,value){
72751                 object[key] = value;
72752         }
72753         //do dynamic
72754         try{
72755                 if(Object.defineProperty){
72756                         Object.defineProperty(LiveNodeList.prototype,'length',{
72757                                 get:function(){
72758                                         _updateLiveList(this);
72759                                         return this.$$length;
72760                                 }
72761                         });
72762                         Object.defineProperty(Node$2.prototype,'textContent',{
72763                                 get:function(){
72764                                         return getTextContent(this);
72765                                 },
72766                                 set:function(data){
72767                                         switch(this.nodeType){
72768                                         case ELEMENT_NODE:
72769                                         case DOCUMENT_FRAGMENT_NODE:
72770                                                 while(this.firstChild){
72771                                                         this.removeChild(this.firstChild);
72772                                                 }
72773                                                 if(data || String(data)){
72774                                                         this.appendChild(this.ownerDocument.createTextNode(data));
72775                                                 }
72776                                                 break;
72777                                         default:
72778                                                 //TODO:
72779                                                 this.data = data;
72780                                                 this.value = data;
72781                                                 this.nodeValue = data;
72782                                         }
72783                                 }
72784                         });
72785                         
72786                         function getTextContent(node){
72787                                 switch(node.nodeType){
72788                                 case ELEMENT_NODE:
72789                                 case DOCUMENT_FRAGMENT_NODE:
72790                                         var buf = [];
72791                                         node = node.firstChild;
72792                                         while(node){
72793                                                 if(node.nodeType!==7 && node.nodeType !==8){
72794                                                         buf.push(getTextContent(node));
72795                                                 }
72796                                                 node = node.nextSibling;
72797                                         }
72798                                         return buf.join('');
72799                                 default:
72800                                         return node.nodeValue;
72801                                 }
72802                         }
72803                         __set__ = function(object,key,value){
72804                                 //console.log(value)
72805                                 object['$$'+key] = value;
72806                         };
72807                 }
72808         }catch(e){//ie8
72809         }
72810
72811         //if(typeof require == 'function'){
72812                 var DOMImplementation_1 = DOMImplementation;
72813                 var XMLSerializer_1 = XMLSerializer$1;
72814         //}
72815
72816         var dom = {
72817                 DOMImplementation: DOMImplementation_1,
72818                 XMLSerializer: XMLSerializer_1
72819         };
72820
72821         var domParser = createCommonjsModule(function (module, exports) {
72822         function DOMParser(options){
72823                 this.options = options ||{locator:{}};
72824                 
72825         }
72826         DOMParser.prototype.parseFromString = function(source,mimeType){
72827                 var options = this.options;
72828                 var sax =  new XMLReader();
72829                 var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
72830                 var errorHandler = options.errorHandler;
72831                 var locator = options.locator;
72832                 var defaultNSMap = options.xmlns||{};
72833                 var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"};
72834                 if(locator){
72835                         domBuilder.setDocumentLocator(locator);
72836                 }
72837                 
72838                 sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
72839                 sax.domBuilder = options.domBuilder || domBuilder;
72840                 if(/\/x?html?$/.test(mimeType)){
72841                         entityMap.nbsp = '\xa0';
72842                         entityMap.copy = '\xa9';
72843                         defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
72844                 }
72845                 defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
72846                 if(source){
72847                         sax.parse(source,defaultNSMap,entityMap);
72848                 }else{
72849                         sax.errorHandler.error("invalid doc source");
72850                 }
72851                 return domBuilder.doc;
72852         };
72853         function buildErrorHandler(errorImpl,domBuilder,locator){
72854                 if(!errorImpl){
72855                         if(domBuilder instanceof DOMHandler){
72856                                 return domBuilder;
72857                         }
72858                         errorImpl = domBuilder ;
72859                 }
72860                 var errorHandler = {};
72861                 var isCallback = errorImpl instanceof Function;
72862                 locator = locator||{};
72863                 function build(key){
72864                         var fn = errorImpl[key];
72865                         if(!fn && isCallback){
72866                                 fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl;
72867                         }
72868                         errorHandler[key] = fn && function(msg){
72869                                 fn('[xmldom '+key+']\t'+msg+_locator(locator));
72870                         }||function(){};
72871                 }
72872                 build('warning');
72873                 build('error');
72874                 build('fatalError');
72875                 return errorHandler;
72876         }
72877
72878         //console.log('#\n\n\n\n\n\n\n####')
72879         /**
72880          * +ContentHandler+ErrorHandler
72881          * +LexicalHandler+EntityResolver2
72882          * -DeclHandler-DTDHandler 
72883          * 
72884          * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
72885          * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
72886          * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
72887          */
72888         function DOMHandler() {
72889             this.cdata = false;
72890         }
72891         function position(locator,node){
72892                 node.lineNumber = locator.lineNumber;
72893                 node.columnNumber = locator.columnNumber;
72894         }
72895         /**
72896          * @see org.xml.sax.ContentHandler#startDocument
72897          * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
72898          */ 
72899         DOMHandler.prototype = {
72900                 startDocument : function() {
72901                 this.doc = new DOMImplementation().createDocument(null, null, null);
72902                 if (this.locator) {
72903                         this.doc.documentURI = this.locator.systemId;
72904                 }
72905                 },
72906                 startElement:function(namespaceURI, localName, qName, attrs) {
72907                         var doc = this.doc;
72908                     var el = doc.createElementNS(namespaceURI, qName||localName);
72909                     var len = attrs.length;
72910                     appendElement(this, el);
72911                     this.currentElement = el;
72912                     
72913                         this.locator && position(this.locator,el);
72914                     for (var i = 0 ; i < len; i++) {
72915                         var namespaceURI = attrs.getURI(i);
72916                         var value = attrs.getValue(i);
72917                         var qName = attrs.getQName(i);
72918                                 var attr = doc.createAttributeNS(namespaceURI, qName);
72919                                 this.locator &&position(attrs.getLocator(i),attr);
72920                                 attr.value = attr.nodeValue = value;
72921                                 el.setAttributeNode(attr);
72922                     }
72923                 },
72924                 endElement:function(namespaceURI, localName, qName) {
72925                         var current = this.currentElement;
72926                         var tagName = current.tagName;
72927                         this.currentElement = current.parentNode;
72928                 },
72929                 startPrefixMapping:function(prefix, uri) {
72930                 },
72931                 endPrefixMapping:function(prefix) {
72932                 },
72933                 processingInstruction:function(target, data) {
72934                     var ins = this.doc.createProcessingInstruction(target, data);
72935                     this.locator && position(this.locator,ins);
72936                     appendElement(this, ins);
72937                 },
72938                 ignorableWhitespace:function(ch, start, length) {
72939                 },
72940                 characters:function(chars, start, length) {
72941                         chars = _toString.apply(this,arguments);
72942                         //console.log(chars)
72943                         if(chars){
72944                                 if (this.cdata) {
72945                                         var charNode = this.doc.createCDATASection(chars);
72946                                 } else {
72947                                         var charNode = this.doc.createTextNode(chars);
72948                                 }
72949                                 if(this.currentElement){
72950                                         this.currentElement.appendChild(charNode);
72951                                 }else if(/^\s*$/.test(chars)){
72952                                         this.doc.appendChild(charNode);
72953                                         //process xml
72954                                 }
72955                                 this.locator && position(this.locator,charNode);
72956                         }
72957                 },
72958                 skippedEntity:function(name) {
72959                 },
72960                 endDocument:function() {
72961                         this.doc.normalize();
72962                 },
72963                 setDocumentLocator:function (locator) {
72964                     if(this.locator = locator){// && !('lineNumber' in locator)){
72965                         locator.lineNumber = 0;
72966                     }
72967                 },
72968                 //LexicalHandler
72969                 comment:function(chars, start, length) {
72970                         chars = _toString.apply(this,arguments);
72971                     var comm = this.doc.createComment(chars);
72972                     this.locator && position(this.locator,comm);
72973                     appendElement(this, comm);
72974                 },
72975                 
72976                 startCDATA:function() {
72977                     //used in characters() methods
72978                     this.cdata = true;
72979                 },
72980                 endCDATA:function() {
72981                     this.cdata = false;
72982                 },
72983                 
72984                 startDTD:function(name, publicId, systemId) {
72985                         var impl = this.doc.implementation;
72986                     if (impl && impl.createDocumentType) {
72987                         var dt = impl.createDocumentType(name, publicId, systemId);
72988                         this.locator && position(this.locator,dt);
72989                         appendElement(this, dt);
72990                     }
72991                 },
72992                 /**
72993                  * @see org.xml.sax.ErrorHandler
72994                  * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
72995                  */
72996                 warning:function(error) {
72997                         console.warn('[xmldom warning]\t'+error,_locator(this.locator));
72998                 },
72999                 error:function(error) {
73000                         console.error('[xmldom error]\t'+error,_locator(this.locator));
73001                 },
73002                 fatalError:function(error) {
73003                         console.error('[xmldom fatalError]\t'+error,_locator(this.locator));
73004                     throw error;
73005                 }
73006         };
73007         function _locator(l){
73008                 if(l){
73009                         return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
73010                 }
73011         }
73012         function _toString(chars,start,length){
73013                 if(typeof chars == 'string'){
73014                         return chars.substr(start,length)
73015                 }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
73016                         if(chars.length >= start+length || start){
73017                                 return new java.lang.String(chars,start,length)+'';
73018                         }
73019                         return chars;
73020                 }
73021         }
73022
73023         /*
73024          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
73025          * used method of org.xml.sax.ext.LexicalHandler:
73026          *  #comment(chars, start, length)
73027          *  #startCDATA()
73028          *  #endCDATA()
73029          *  #startDTD(name, publicId, systemId)
73030          *
73031          *
73032          * IGNORED method of org.xml.sax.ext.LexicalHandler:
73033          *  #endDTD()
73034          *  #startEntity(name)
73035          *  #endEntity(name)
73036          *
73037          *
73038          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
73039          * IGNORED method of org.xml.sax.ext.DeclHandler
73040          *      #attributeDecl(eName, aName, type, mode, value)
73041          *  #elementDecl(name, model)
73042          *  #externalEntityDecl(name, publicId, systemId)
73043          *  #internalEntityDecl(name, value)
73044          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
73045          * IGNORED method of org.xml.sax.EntityResolver2
73046          *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
73047          *  #resolveEntity(publicId, systemId)
73048          *  #getExternalSubset(name, baseURI)
73049          * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
73050          * IGNORED method of org.xml.sax.DTDHandler
73051          *  #notationDecl(name, publicId, systemId) {};
73052          *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
73053          */
73054         "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
73055                 DOMHandler.prototype[key] = function(){return null};
73056         });
73057
73058         /* 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 */
73059         function appendElement (hander,node) {
73060             if (!hander.currentElement) {
73061                 hander.doc.appendChild(node);
73062             } else {
73063                 hander.currentElement.appendChild(node);
73064             }
73065         }//appendChild and setAttributeNS are preformance key
73066
73067         //if(typeof require == 'function'){
73068                 var XMLReader = sax.XMLReader;
73069                 var DOMImplementation = exports.DOMImplementation = dom.DOMImplementation;
73070                 exports.XMLSerializer = dom.XMLSerializer ;
73071                 exports.DOMParser = DOMParser;
73072         //}
73073         });
73074         var domParser_1 = domParser.DOMImplementation;
73075         var domParser_2 = domParser.XMLSerializer;
73076         var domParser_3 = domParser.DOMParser;
73077
73078         var togeojson = createCommonjsModule(function (module, exports) {
73079         var toGeoJSON = (function() {
73080
73081             var removeSpace = /\s*/g,
73082                 trimSpace = /^\s*|\s*$/g,
73083                 splitSpace = /\s+/;
73084             // generate a short, numeric hash of a string
73085             function okhash(x) {
73086                 if (!x || !x.length) return 0;
73087                 for (var i = 0, h = 0; i < x.length; i++) {
73088                     h = ((h << 5) - h) + x.charCodeAt(i) | 0;
73089                 } return h;
73090             }
73091             // all Y children of X
73092             function get(x, y) { return x.getElementsByTagName(y); }
73093             function attr(x, y) { return x.getAttribute(y); }
73094             function attrf(x, y) { return parseFloat(attr(x, y)); }
73095             // one Y child of X, if any, otherwise null
73096             function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; }
73097             // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize
73098             function norm(el) { if (el.normalize) { el.normalize(); } return el; }
73099             // cast array x into numbers
73100             function numarray(x) {
73101                 for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); }
73102                 return o;
73103             }
73104             // get the content of a text node, if any
73105             function nodeVal(x) {
73106                 if (x) { norm(x); }
73107                 return (x && x.textContent) || '';
73108             }
73109             // get the contents of multiple text nodes, if present
73110             function getMulti(x, ys) {
73111                 var o = {}, n, k;
73112                 for (k = 0; k < ys.length; k++) {
73113                     n = get1(x, ys[k]);
73114                     if (n) o[ys[k]] = nodeVal(n);
73115                 }
73116                 return o;
73117             }
73118             // add properties of Y to X, overwriting if present in both
73119             function extend(x, y) { for (var k in y) x[k] = y[k]; }
73120             // get one coordinate from a coordinate array, if any
73121             function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); }
73122             // get all coordinates from a coordinate array as [[],[]]
73123             function coord(v) {
73124                 var coords = v.replace(trimSpace, '').split(splitSpace),
73125                     o = [];
73126                 for (var i = 0; i < coords.length; i++) {
73127                     o.push(coord1(coords[i]));
73128                 }
73129                 return o;
73130             }
73131             function coordPair(x) {
73132                 var ll = [attrf(x, 'lon'), attrf(x, 'lat')],
73133                     ele = get1(x, 'ele'),
73134                     // handle namespaced attribute in browser
73135                     heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'),
73136                     time = get1(x, 'time'),
73137                     e;
73138                 if (ele) {
73139                     e = parseFloat(nodeVal(ele));
73140                     if (!isNaN(e)) {
73141                         ll.push(e);
73142                     }
73143                 }
73144                 return {
73145                     coordinates: ll,
73146                     time: time ? nodeVal(time) : null,
73147                     heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null
73148                 };
73149             }
73150
73151             // create a new feature collection parent object
73152             function fc() {
73153                 return {
73154                     type: 'FeatureCollection',
73155                     features: []
73156                 };
73157             }
73158
73159             var serializer;
73160             if (typeof XMLSerializer !== 'undefined') {
73161                 /* istanbul ignore next */
73162                 serializer = new XMLSerializer();
73163             // only require xmldom in a node environment
73164             } else if ( typeof process === 'object' && !process.browser) {
73165                 serializer = new (domParser.XMLSerializer)();
73166             }
73167             function xml2str(str) {
73168                 // IE9 will create a new XMLSerializer but it'll crash immediately.
73169                 // This line is ignored because we don't run coverage tests in IE9
73170                 /* istanbul ignore next */
73171                 if (str.xml !== undefined) return str.xml;
73172                 return serializer.serializeToString(str);
73173             }
73174
73175             var t = {
73176                 kml: function(doc) {
73177
73178                     var gj = fc(),
73179                         // styleindex keeps track of hashed styles in order to match features
73180                         styleIndex = {}, styleByHash = {},
73181                         // stylemapindex keeps track of style maps to expose in properties
73182                         styleMapIndex = {},
73183                         // atomic geospatial types supported by KML - MultiGeometry is
73184                         // handled separately
73185                         geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'],
73186                         // all root placemarks in the file
73187                         placemarks = get(doc, 'Placemark'),
73188                         styles = get(doc, 'Style'),
73189                         styleMaps = get(doc, 'StyleMap');
73190
73191                     for (var k = 0; k < styles.length; k++) {
73192                         var hash = okhash(xml2str(styles[k])).toString(16);
73193                         styleIndex['#' + attr(styles[k], 'id')] = hash;
73194                         styleByHash[hash] = styles[k];
73195                     }
73196                     for (var l = 0; l < styleMaps.length; l++) {
73197                         styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16);
73198                         var pairs = get(styleMaps[l], 'Pair');
73199                         var pairsMap = {};
73200                         for (var m = 0; m < pairs.length; m++) {
73201                             pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl'));
73202                         }
73203                         styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap;
73204
73205                     }
73206                     for (var j = 0; j < placemarks.length; j++) {
73207                         gj.features = gj.features.concat(getPlacemark(placemarks[j]));
73208                     }
73209                     function kmlColor(v) {
73210                         var color, opacity;
73211                         v = v || '';
73212                         if (v.substr(0, 1) === '#') { v = v.substr(1); }
73213                         if (v.length === 6 || v.length === 3) { color = v; }
73214                         if (v.length === 8) {
73215                             opacity = parseInt(v.substr(0, 2), 16) / 255;
73216                             color = '#' + v.substr(6, 2) +
73217                                 v.substr(4, 2) +
73218                                 v.substr(2, 2);
73219                         }
73220                         return [color, isNaN(opacity) ? undefined : opacity];
73221                     }
73222                     function gxCoord(v) { return numarray(v.split(' ')); }
73223                     function gxCoords(root) {
73224                         var elems = get(root, 'coord'), coords = [], times = [];
73225                         if (elems.length === 0) elems = get(root, 'gx:coord');
73226                         for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i])));
73227                         var timeElems = get(root, 'when');
73228                         for (var j = 0; j < timeElems.length; j++) times.push(nodeVal(timeElems[j]));
73229                         return {
73230                             coords: coords,
73231                             times: times
73232                         };
73233                     }
73234                     function getGeometry(root) {
73235                         var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = [];
73236                         if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); }
73237                         if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); }
73238                         if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); }
73239                         for (i = 0; i < geotypes.length; i++) {
73240                             geomNodes = get(root, geotypes[i]);
73241                             if (geomNodes) {
73242                                 for (j = 0; j < geomNodes.length; j++) {
73243                                     geomNode = geomNodes[j];
73244                                     if (geotypes[i] === 'Point') {
73245                                         geoms.push({
73246                                             type: 'Point',
73247                                             coordinates: coord1(nodeVal(get1(geomNode, 'coordinates')))
73248                                         });
73249                                     } else if (geotypes[i] === 'LineString') {
73250                                         geoms.push({
73251                                             type: 'LineString',
73252                                             coordinates: coord(nodeVal(get1(geomNode, 'coordinates')))
73253                                         });
73254                                     } else if (geotypes[i] === 'Polygon') {
73255                                         var rings = get(geomNode, 'LinearRing'),
73256                                             coords = [];
73257                                         for (k = 0; k < rings.length; k++) {
73258                                             coords.push(coord(nodeVal(get1(rings[k], 'coordinates'))));
73259                                         }
73260                                         geoms.push({
73261                                             type: 'Polygon',
73262                                             coordinates: coords
73263                                         });
73264                                     } else if (geotypes[i] === 'Track' ||
73265                                         geotypes[i] === 'gx:Track') {
73266                                         var track = gxCoords(geomNode);
73267                                         geoms.push({
73268                                             type: 'LineString',
73269                                             coordinates: track.coords
73270                                         });
73271                                         if (track.times.length) coordTimes.push(track.times);
73272                                     }
73273                                 }
73274                             }
73275                         }
73276                         return {
73277                             geoms: geoms,
73278                             coordTimes: coordTimes
73279                         };
73280                     }
73281                     function getPlacemark(root) {
73282                         var geomsAndTimes = getGeometry(root), i, properties = {},
73283                             name = nodeVal(get1(root, 'name')),
73284                             address = nodeVal(get1(root, 'address')),
73285                             styleUrl = nodeVal(get1(root, 'styleUrl')),
73286                             description = nodeVal(get1(root, 'description')),
73287                             timeSpan = get1(root, 'TimeSpan'),
73288                             timeStamp = get1(root, 'TimeStamp'),
73289                             extendedData = get1(root, 'ExtendedData'),
73290                             lineStyle = get1(root, 'LineStyle'),
73291                             polyStyle = get1(root, 'PolyStyle'),
73292                             visibility = get1(root, 'visibility');
73293
73294                         if (!geomsAndTimes.geoms.length) return [];
73295                         if (name) properties.name = name;
73296                         if (address) properties.address = address;
73297                         if (styleUrl) {
73298                             if (styleUrl[0] !== '#') {
73299                                 styleUrl = '#' + styleUrl;
73300                             }
73301
73302                             properties.styleUrl = styleUrl;
73303                             if (styleIndex[styleUrl]) {
73304                                 properties.styleHash = styleIndex[styleUrl];
73305                             }
73306                             if (styleMapIndex[styleUrl]) {
73307                                 properties.styleMapHash = styleMapIndex[styleUrl];
73308                                 properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal];
73309                             }
73310                             // Try to populate the lineStyle or polyStyle since we got the style hash
73311                             var style = styleByHash[properties.styleHash];
73312                             if (style) {
73313                                 if (!lineStyle) lineStyle = get1(style, 'LineStyle');
73314                                 if (!polyStyle) polyStyle = get1(style, 'PolyStyle');
73315                             }
73316                         }
73317                         if (description) properties.description = description;
73318                         if (timeSpan) {
73319                             var begin = nodeVal(get1(timeSpan, 'begin'));
73320                             var end = nodeVal(get1(timeSpan, 'end'));
73321                             properties.timespan = { begin: begin, end: end };
73322                         }
73323                         if (timeStamp) {
73324                             properties.timestamp = nodeVal(get1(timeStamp, 'when'));
73325                         }
73326                         if (lineStyle) {
73327                             var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))),
73328                                 color = linestyles[0],
73329                                 opacity = linestyles[1],
73330                                 width = parseFloat(nodeVal(get1(lineStyle, 'width')));
73331                             if (color) properties.stroke = color;
73332                             if (!isNaN(opacity)) properties['stroke-opacity'] = opacity;
73333                             if (!isNaN(width)) properties['stroke-width'] = width;
73334                         }
73335                         if (polyStyle) {
73336                             var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))),
73337                                 pcolor = polystyles[0],
73338                                 popacity = polystyles[1],
73339                                 fill = nodeVal(get1(polyStyle, 'fill')),
73340                                 outline = nodeVal(get1(polyStyle, 'outline'));
73341                             if (pcolor) properties.fill = pcolor;
73342                             if (!isNaN(popacity)) properties['fill-opacity'] = popacity;
73343                             if (fill) properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0;
73344                             if (outline) properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0;
73345                         }
73346                         if (extendedData) {
73347                             var datas = get(extendedData, 'Data'),
73348                                 simpleDatas = get(extendedData, 'SimpleData');
73349
73350                             for (i = 0; i < datas.length; i++) {
73351                                 properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value'));
73352                             }
73353                             for (i = 0; i < simpleDatas.length; i++) {
73354                                 properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]);
73355                             }
73356                         }
73357                         if (visibility) {
73358                             properties.visibility = nodeVal(visibility);
73359                         }
73360                         if (geomsAndTimes.coordTimes.length) {
73361                             properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ?
73362                                 geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes;
73363                         }
73364                         var feature = {
73365                             type: 'Feature',
73366                             geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : {
73367                                 type: 'GeometryCollection',
73368                                 geometries: geomsAndTimes.geoms
73369                             },
73370                             properties: properties
73371                         };
73372                         if (attr(root, 'id')) feature.id = attr(root, 'id');
73373                         return [feature];
73374                     }
73375                     return gj;
73376                 },
73377                 gpx: function(doc) {
73378                     var i,
73379                         tracks = get(doc, 'trk'),
73380                         routes = get(doc, 'rte'),
73381                         waypoints = get(doc, 'wpt'),
73382                         // a feature collection
73383                         gj = fc(),
73384                         feature;
73385                     for (i = 0; i < tracks.length; i++) {
73386                         feature = getTrack(tracks[i]);
73387                         if (feature) gj.features.push(feature);
73388                     }
73389                     for (i = 0; i < routes.length; i++) {
73390                         feature = getRoute(routes[i]);
73391                         if (feature) gj.features.push(feature);
73392                     }
73393                     for (i = 0; i < waypoints.length; i++) {
73394                         gj.features.push(getPoint(waypoints[i]));
73395                     }
73396                     function getPoints(node, pointname) {
73397                         var pts = get(node, pointname),
73398                             line = [],
73399                             times = [],
73400                             heartRates = [],
73401                             l = pts.length;
73402                         if (l < 2) return {};  // Invalid line in GeoJSON
73403                         for (var i = 0; i < l; i++) {
73404                             var c = coordPair(pts[i]);
73405                             line.push(c.coordinates);
73406                             if (c.time) times.push(c.time);
73407                             if (c.heartRate) heartRates.push(c.heartRate);
73408                         }
73409                         return {
73410                             line: line,
73411                             times: times,
73412                             heartRates: heartRates
73413                         };
73414                     }
73415                     function getTrack(node) {
73416                         var segments = get(node, 'trkseg'),
73417                             track = [],
73418                             times = [],
73419                             heartRates = [],
73420                             line;
73421                         for (var i = 0; i < segments.length; i++) {
73422                             line = getPoints(segments[i], 'trkpt');
73423                             if (line) {
73424                                 if (line.line) track.push(line.line);
73425                                 if (line.times && line.times.length) times.push(line.times);
73426                                 if (line.heartRates && line.heartRates.length) heartRates.push(line.heartRates);
73427                             }
73428                         }
73429                         if (track.length === 0) return;
73430                         var properties = getProperties(node);
73431                         extend(properties, getLineStyle(get1(node, 'extensions')));
73432                         if (times.length) properties.coordTimes = track.length === 1 ? times[0] : times;
73433                         if (heartRates.length) properties.heartRates = track.length === 1 ? heartRates[0] : heartRates;
73434                         return {
73435                             type: 'Feature',
73436                             properties: properties,
73437                             geometry: {
73438                                 type: track.length === 1 ? 'LineString' : 'MultiLineString',
73439                                 coordinates: track.length === 1 ? track[0] : track
73440                             }
73441                         };
73442                     }
73443                     function getRoute(node) {
73444                         var line = getPoints(node, 'rtept');
73445                         if (!line.line) return;
73446                         var prop = getProperties(node);
73447                         extend(prop, getLineStyle(get1(node, 'extensions')));
73448                         var routeObj = {
73449                             type: 'Feature',
73450                             properties: prop,
73451                             geometry: {
73452                                 type: 'LineString',
73453                                 coordinates: line.line
73454                             }
73455                         };
73456                         return routeObj;
73457                     }
73458                     function getPoint(node) {
73459                         var prop = getProperties(node);
73460                         extend(prop, getMulti(node, ['sym']));
73461                         return {
73462                             type: 'Feature',
73463                             properties: prop,
73464                             geometry: {
73465                                 type: 'Point',
73466                                 coordinates: coordPair(node).coordinates
73467                             }
73468                         };
73469                     }
73470                     function getLineStyle(extensions) {
73471                         var style = {};
73472                         if (extensions) {
73473                             var lineStyle = get1(extensions, 'line');
73474                             if (lineStyle) {
73475                                 var color = nodeVal(get1(lineStyle, 'color')),
73476                                     opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))),
73477                                     width = parseFloat(nodeVal(get1(lineStyle, 'width')));
73478                                 if (color) style.stroke = color;
73479                                 if (!isNaN(opacity)) style['stroke-opacity'] = opacity;
73480                                 // GPX width is in mm, convert to px with 96 px per inch
73481                                 if (!isNaN(width)) style['stroke-width'] = width * 96 / 25.4;
73482                             }
73483                         }
73484                         return style;
73485                     }
73486                     function getProperties(node) {
73487                         var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']),
73488                             links = get(node, 'link');
73489                         if (links.length) prop.links = [];
73490                         for (var i = 0, link; i < links.length; i++) {
73491                             link = { href: attr(links[i], 'href') };
73492                             extend(link, getMulti(links[i], ['text', 'type']));
73493                             prop.links.push(link);
73494                         }
73495                         return prop;
73496                     }
73497                     return gj;
73498                 }
73499             };
73500             return t;
73501         })();
73502
73503         module.exports = toGeoJSON;
73504         });
73505
73506         var _initialized = false;
73507         var _enabled = false;
73508         var _geojson;
73509
73510
73511         function svgData(projection, context, dispatch) {
73512             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
73513             var _showLabels = true;
73514             var detected = utilDetect();
73515             var layer = d3_select(null);
73516             var _vtService;
73517             var _fileList;
73518             var _template;
73519             var _src;
73520
73521
73522             function init() {
73523                 if (_initialized) return;  // run once
73524
73525                 _geojson = {};
73526                 _enabled = true;
73527
73528                 function over() {
73529                     event.stopPropagation();
73530                     event.preventDefault();
73531                     event.dataTransfer.dropEffect = 'copy';
73532                 }
73533
73534                 d3_select('body')
73535                     .attr('dropzone', 'copy')
73536                     .on('drop.svgData', function() {
73537                         event.stopPropagation();
73538                         event.preventDefault();
73539                         if (!detected.filedrop) return;
73540                         drawData.fileList(event.dataTransfer.files);
73541                     })
73542                     .on('dragenter.svgData', over)
73543                     .on('dragexit.svgData', over)
73544                     .on('dragover.svgData', over);
73545
73546                 _initialized = true;
73547             }
73548
73549
73550             function getService() {
73551                 if (services$1.vectorTile && !_vtService) {
73552                     _vtService = services$1.vectorTile;
73553                     _vtService.event.on('loadedData', throttledRedraw);
73554                 } else if (!services$1.vectorTile && _vtService) {
73555                     _vtService = null;
73556                 }
73557
73558                 return _vtService;
73559             }
73560
73561
73562             function showLayer() {
73563                 layerOn();
73564
73565                 layer
73566                     .style('opacity', 0)
73567                     .transition()
73568                     .duration(250)
73569                     .style('opacity', 1)
73570                     .on('end', function () { dispatch.call('change'); });
73571             }
73572
73573
73574             function hideLayer() {
73575                 throttledRedraw.cancel();
73576
73577                 layer
73578                     .transition()
73579                     .duration(250)
73580                     .style('opacity', 0)
73581                     .on('end', layerOff);
73582             }
73583
73584
73585             function layerOn() {
73586                 layer.style('display', 'block');
73587             }
73588
73589
73590             function layerOff() {
73591                 layer.selectAll('.viewfield-group').remove();
73592                 layer.style('display', 'none');
73593             }
73594
73595
73596             // ensure that all geojson features in a collection have IDs
73597             function ensureIDs(gj) {
73598                 if (!gj) return null;
73599
73600                 if (gj.type === 'FeatureCollection') {
73601                     for (var i = 0; i < gj.features.length; i++) {
73602                         ensureFeatureID(gj.features[i]);
73603                     }
73604                 } else {
73605                     ensureFeatureID(gj);
73606                 }
73607                 return gj;
73608             }
73609
73610
73611             // ensure that each single Feature object has a unique ID
73612             function ensureFeatureID(feature) {
73613                 if (!feature) return;
73614                 feature.__featurehash__ = utilHashcode(fastJsonStableStringify(feature));
73615                 return feature;
73616             }
73617
73618
73619             // Prefer an array of Features instead of a FeatureCollection
73620             function getFeatures(gj) {
73621                 if (!gj) return [];
73622
73623                 if (gj.type === 'FeatureCollection') {
73624                     return gj.features;
73625                 } else {
73626                     return [gj];
73627                 }
73628             }
73629
73630
73631             function featureKey(d) {
73632                 return d.__featurehash__;
73633             }
73634
73635
73636             function isPolygon(d) {
73637                 return d.geometry.type === 'Polygon' || d.geometry.type === 'MultiPolygon';
73638             }
73639
73640
73641             function clipPathID(d) {
73642                 return 'data-' + d.__featurehash__ + '-clippath';
73643             }
73644
73645
73646             function featureClasses(d) {
73647                 return [
73648                     'data' + d.__featurehash__,
73649                     d.geometry.type,
73650                     isPolygon(d) ? 'area' : '',
73651                     d.__layerID__ || ''
73652                 ].filter(Boolean).join(' ');
73653             }
73654
73655
73656             function drawData(selection) {
73657                 var vtService = getService();
73658                 var getPath = svgPath(projection).geojson;
73659                 var getAreaPath = svgPath(projection, null, true).geojson;
73660                 var hasData = drawData.hasData();
73661
73662                 layer = selection.selectAll('.layer-mapdata')
73663                     .data(_enabled && hasData ? [0] : []);
73664
73665                 layer.exit()
73666                     .remove();
73667
73668                 layer = layer.enter()
73669                     .append('g')
73670                     .attr('class', 'layer-mapdata')
73671                     .merge(layer);
73672
73673                 var surface = context.surface();
73674                 if (!surface || surface.empty()) return;  // not ready to draw yet, starting up
73675
73676
73677                 // Gather data
73678                 var geoData, polygonData;
73679                 if (_template && vtService) {   // fetch data from vector tile service
73680                     var sourceID = _template;
73681                     vtService.loadTiles(sourceID, _template, projection);
73682                     geoData = vtService.data(sourceID, projection);
73683                 } else {
73684                     geoData = getFeatures(_geojson);
73685                 }
73686                 geoData = geoData.filter(getPath);
73687                 polygonData = geoData.filter(isPolygon);
73688
73689
73690                 // Draw clip paths for polygons
73691                 var clipPaths = surface.selectAll('defs').selectAll('.clipPath-data')
73692                    .data(polygonData, featureKey);
73693
73694                 clipPaths.exit()
73695                    .remove();
73696
73697                 var clipPathsEnter = clipPaths.enter()
73698                    .append('clipPath')
73699                    .attr('class', 'clipPath-data')
73700                    .attr('id', clipPathID);
73701
73702                 clipPathsEnter
73703                    .append('path');
73704
73705                 clipPaths.merge(clipPathsEnter)
73706                    .selectAll('path')
73707                    .attr('d', getAreaPath);
73708
73709
73710                 // Draw fill, shadow, stroke layers
73711                 var datagroups = layer
73712                     .selectAll('g.datagroup')
73713                     .data(['fill', 'shadow', 'stroke']);
73714
73715                 datagroups = datagroups.enter()
73716                     .append('g')
73717                     .attr('class', function(d) { return 'datagroup datagroup-' + d; })
73718                     .merge(datagroups);
73719
73720
73721                 // Draw paths
73722                 var pathData = {
73723                     fill: polygonData,
73724                     shadow: geoData,
73725                     stroke: geoData
73726                 };
73727
73728                 var paths = datagroups
73729                     .selectAll('path')
73730                     .data(function(layer) { return pathData[layer]; }, featureKey);
73731
73732                 // exit
73733                 paths.exit()
73734                     .remove();
73735
73736                 // enter/update
73737                 paths = paths.enter()
73738                     .append('path')
73739                     .attr('class', function(d) {
73740                         var datagroup = this.parentNode.__data__;
73741                         return 'pathdata ' + datagroup + ' ' + featureClasses(d);
73742                     })
73743                     .attr('clip-path', function(d) {
73744                         var datagroup = this.parentNode.__data__;
73745                         return datagroup === 'fill' ? ('url(#' + clipPathID(d) + ')') : null;
73746                     })
73747                     .merge(paths)
73748                     .attr('d', function(d) {
73749                         var datagroup = this.parentNode.__data__;
73750                         return datagroup === 'fill' ? getAreaPath(d) : getPath(d);
73751                     });
73752
73753
73754                 // Draw labels
73755                 layer
73756                     .call(drawLabels, 'label-halo', geoData)
73757                     .call(drawLabels, 'label', geoData);
73758
73759
73760                 function drawLabels(selection, textClass, data) {
73761                     var labelPath = d3_geoPath(projection);
73762                     var labelData = data.filter(function(d) {
73763                         return _showLabels && d.properties && (d.properties.desc || d.properties.name);
73764                     });
73765
73766                     var labels = selection.selectAll('text.' + textClass)
73767                         .data(labelData, featureKey);
73768
73769                     // exit
73770                     labels.exit()
73771                         .remove();
73772
73773                     // enter/update
73774                     labels = labels.enter()
73775                         .append('text')
73776                         .attr('class', function(d) { return textClass + ' ' + featureClasses(d); })
73777                         .merge(labels)
73778                         .text(function(d) {
73779                             return d.properties.desc || d.properties.name;
73780                         })
73781                         .attr('x', function(d) {
73782                             var centroid = labelPath.centroid(d);
73783                             return centroid[0] + 11;
73784                         })
73785                         .attr('y', function(d) {
73786                             var centroid = labelPath.centroid(d);
73787                             return centroid[1];
73788                         });
73789                 }
73790             }
73791
73792
73793             function getExtension(fileName) {
73794                 if (!fileName) return;
73795
73796                 var re = /\.(gpx|kml|(geo)?json)$/i;
73797                 var match = fileName.toLowerCase().match(re);
73798                 return match && match.length && match[0];
73799             }
73800
73801
73802             function xmlToDom(textdata) {
73803                 return (new DOMParser()).parseFromString(textdata, 'text/xml');
73804             }
73805
73806
73807             drawData.setFile = function(extension, data) {
73808                 _template = null;
73809                 _fileList = null;
73810                 _geojson = null;
73811                 _src = null;
73812
73813                 var gj;
73814                 switch (extension) {
73815                     case '.gpx':
73816                         gj = togeojson.gpx(xmlToDom(data));
73817                         break;
73818                     case '.kml':
73819                         gj = togeojson.kml(xmlToDom(data));
73820                         break;
73821                     case '.geojson':
73822                     case '.json':
73823                         gj = JSON.parse(data);
73824                         break;
73825                 }
73826
73827                 gj = gj || {};
73828                 if (Object.keys(gj).length) {
73829                     _geojson = ensureIDs(gj);
73830                     _src = extension + ' data file';
73831                     this.fitZoom();
73832                 }
73833
73834                 dispatch.call('change');
73835                 return this;
73836             };
73837
73838
73839             drawData.showLabels = function(val) {
73840                 if (!arguments.length) return _showLabels;
73841
73842                 _showLabels = val;
73843                 return this;
73844             };
73845
73846
73847             drawData.enabled = function(val) {
73848                 if (!arguments.length) return _enabled;
73849
73850                 _enabled = val;
73851                 if (_enabled) {
73852                     showLayer();
73853                 } else {
73854                     hideLayer();
73855                 }
73856
73857                 dispatch.call('change');
73858                 return this;
73859             };
73860
73861
73862             drawData.hasData = function() {
73863                 var gj = _geojson || {};
73864                 return !!(_template || Object.keys(gj).length);
73865             };
73866
73867
73868             drawData.template = function(val, src) {
73869                 if (!arguments.length) return _template;
73870
73871                 // test source against OSM imagery blacklists..
73872                 var osm = context.connection();
73873                 if (osm) {
73874                     var blacklists = osm.imageryBlacklists();
73875                     var fail = false;
73876                     var tested = 0;
73877                     var regex;
73878
73879                     for (var i = 0; i < blacklists.length; i++) {
73880                         try {
73881                             regex = new RegExp(blacklists[i]);
73882                             fail = regex.test(val);
73883                             tested++;
73884                             if (fail) break;
73885                         } catch (e) {
73886                             /* noop */
73887                         }
73888                     }
73889
73890                     // ensure at least one test was run.
73891                     if (!tested) {
73892                         regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
73893                         fail = regex.test(val);
73894                     }
73895                 }
73896
73897                 _template = val;
73898                 _fileList = null;
73899                 _geojson = null;
73900
73901                 // strip off the querystring/hash from the template,
73902                 // it often includes the access token
73903                 _src = src || ('vectortile:' + val.split(/[?#]/)[0]);
73904
73905                 dispatch.call('change');
73906                 return this;
73907             };
73908
73909
73910             drawData.geojson = function(gj, src) {
73911                 if (!arguments.length) return _geojson;
73912
73913                 _template = null;
73914                 _fileList = null;
73915                 _geojson = null;
73916                 _src = null;
73917
73918                 gj = gj || {};
73919                 if (Object.keys(gj).length) {
73920                     _geojson = ensureIDs(gj);
73921                     _src = src || 'unknown.geojson';
73922                 }
73923
73924                 dispatch.call('change');
73925                 return this;
73926             };
73927
73928
73929             drawData.fileList = function(fileList) {
73930                 if (!arguments.length) return _fileList;
73931
73932                 _template = null;
73933                 _fileList = fileList;
73934                 _geojson = null;
73935                 _src = null;
73936
73937                 if (!fileList || !fileList.length) return this;
73938                 var f = fileList[0];
73939                 var extension = getExtension(f.name);
73940                 var reader = new FileReader();
73941                 reader.onload = (function() {
73942                     return function(e) {
73943                         drawData.setFile(extension, e.target.result);
73944                     };
73945                 })();
73946
73947                 reader.readAsText(f);
73948
73949                 return this;
73950             };
73951
73952
73953             drawData.url = function(url, defaultExtension) {
73954                 _template = null;
73955                 _fileList = null;
73956                 _geojson = null;
73957                 _src = null;
73958
73959                 // strip off any querystring/hash from the url before checking extension
73960                 var testUrl = url.split(/[?#]/)[0];
73961                 var extension = getExtension(testUrl) || defaultExtension;
73962                 if (extension) {
73963                     _template = null;
73964                     d3_text(url)
73965                         .then(function(data) {
73966                             drawData.setFile(extension, data);
73967                         })
73968                         .catch(function() {
73969                             /* ignore */
73970                         });
73971
73972                 } else {
73973                     drawData.template(url);
73974                 }
73975
73976                 return this;
73977             };
73978
73979
73980             drawData.getSrc = function() {
73981                 return _src || '';
73982             };
73983
73984
73985             drawData.fitZoom = function() {
73986                 var features = getFeatures(_geojson);
73987                 if (!features.length) return;
73988
73989                 var map = context.map();
73990                 var viewport = map.trimmedExtent().polygon();
73991                 var coords = features.reduce(function(coords, feature) {
73992                     var c = feature.geometry.coordinates;
73993
73994                     /* eslint-disable no-fallthrough */
73995                     switch (feature.geometry.type) {
73996                         case 'Point':
73997                             c = [c];
73998                         case 'MultiPoint':
73999                         case 'LineString':
74000                             break;
74001
74002                         case 'MultiPolygon':
74003                             c = utilArrayFlatten(c);
74004                         case 'Polygon':
74005                         case 'MultiLineString':
74006                             c = utilArrayFlatten(c);
74007                             break;
74008                     }
74009                     /* eslint-enable no-fallthrough */
74010
74011                     return utilArrayUnion(coords, c);
74012                 }, []);
74013
74014                 if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
74015                     var extent = geoExtent(d3_geoBounds({ type: 'LineString', coordinates: coords }));
74016                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
74017                 }
74018
74019                 return this;
74020             };
74021
74022
74023             init();
74024             return drawData;
74025         }
74026
74027         function svgDebug(projection, context) {
74028
74029             function drawDebug(selection) {
74030                 var showsTile = context.getDebug('tile');
74031                 var showsCollision = context.getDebug('collision');
74032                 var showsImagery = context.getDebug('imagery');
74033                 var showsCommunity = context.getDebug('community');
74034                 var showsImperial = context.getDebug('imperial');
74035                 var showsDriveLeft = context.getDebug('driveLeft');
74036                 var showsTouchTargets = context.getDebug('target');
74037                 var showsDownloaded = context.getDebug('downloaded');
74038
74039                 var debugData = [];
74040                 if (showsTile) {
74041                     debugData.push({ class: 'red', label: 'tile' });
74042                 }
74043                 if (showsCollision) {
74044                     debugData.push({ class: 'yellow', label: 'collision' });
74045                 }
74046                 if (showsImagery) {
74047                     debugData.push({ class: 'orange', label: 'imagery' });
74048                 }
74049                 if (showsCommunity) {
74050                     debugData.push({ class: 'blue', label: 'community' });
74051                 }
74052                 if (showsImperial) {
74053                     debugData.push({ class: 'cyan', label: 'imperial' });
74054                 }
74055                 if (showsDriveLeft) {
74056                     debugData.push({ class: 'green', label: 'driveLeft' });
74057                 }
74058                 if (showsTouchTargets) {
74059                     debugData.push({ class: 'pink', label: 'touchTargets' });
74060                 }
74061                 if (showsDownloaded) {
74062                     debugData.push({ class: 'purple', label: 'downloaded' });
74063                 }
74064
74065
74066                 var legend = d3_select('#content')
74067                     .selectAll('.debug-legend')
74068                     .data(debugData.length ? [0] : []);
74069
74070                 legend.exit()
74071                     .remove();
74072
74073                 legend = legend.enter()
74074                     .append('div')
74075                     .attr('class', 'fillD debug-legend')
74076                     .merge(legend);
74077
74078
74079                 var legendItems = legend.selectAll('.debug-legend-item')
74080                     .data(debugData, function(d) { return d.label; });
74081
74082                 legendItems.exit()
74083                     .remove();
74084
74085                 legendItems.enter()
74086                     .append('span')
74087                     .attr('class', function(d) { return 'debug-legend-item ' + d.class; })
74088                     .text(function(d) { return d.label; });
74089
74090
74091                 var layer = selection.selectAll('.layer-debug')
74092                     .data(showsImagery || showsCommunity || showsImperial || showsDriveLeft || showsDownloaded ? [0] : []);
74093
74094                 layer.exit()
74095                     .remove();
74096
74097                 layer = layer.enter()
74098                     .append('g')
74099                     .attr('class', 'layer-debug')
74100                     .merge(layer);
74101
74102
74103                 // imagery
74104                 var extent = context.map().extent();
74105                 var matchImagery = (showsImagery && data.imagery.query.bbox(extent.rectangle(), true)) || [];
74106                 var features = matchImagery.map(function(d) { return data.imagery.features[d.id]; });
74107
74108                 var imagery = layer.selectAll('path.debug-imagery')
74109                     .data(features);
74110
74111                 imagery.exit()
74112                     .remove();
74113
74114                 imagery.enter()
74115                     .append('path')
74116                     .attr('class', 'debug-imagery debug orange');
74117
74118
74119                 // community index
74120                 var community = layer.selectAll('path.debug-community')
74121                     .data(showsCommunity ? Object.values(data.community.features) : []);
74122
74123                 community.exit()
74124                     .remove();
74125
74126                 community.enter()
74127                     .append('path')
74128                     .attr('class', 'debug-community debug blue');
74129
74130
74131                 // imperial
74132                 var imperial = layer
74133                     .selectAll('path.debug-imperial')
74134                     .data(showsImperial ? [dataImperial] : []);
74135
74136                 imperial.exit()
74137                     .remove();
74138
74139                 imperial.enter()
74140                     .append('path')
74141                     .attr('class', 'debug-imperial debug cyan');
74142
74143
74144                 // driveleft
74145                 var driveLeft = layer
74146                     .selectAll('path.debug-drive-left')
74147                     .data(showsDriveLeft ? [dataDriveLeft] : []);
74148
74149                 driveLeft.exit()
74150                     .remove();
74151
74152                 driveLeft.enter()
74153                     .append('path')
74154                     .attr('class', 'debug-drive-left debug green');
74155
74156
74157                 // downloaded
74158                 var osm = context.connection();
74159                 var dataDownloaded = [];
74160
74161                 if (osm) {
74162                     var rtree = osm.caches('get').tile.rtree;
74163                     dataDownloaded = rtree.all().map(function(bbox) {
74164                         return {
74165                             type: 'Feature',
74166                             properties: { id: bbox.id },
74167                             geometry: {
74168                                 type: 'Polygon',
74169                                 coordinates: [[
74170                                     [ bbox.minX, bbox.minY ],
74171                                     [ bbox.minX, bbox.maxY ],
74172                                     [ bbox.maxX, bbox.maxY ],
74173                                     [ bbox.maxX, bbox.minY ],
74174                                     [ bbox.minX, bbox.minY ]
74175                                 ]]
74176                             }
74177                         };
74178                     });
74179                 }
74180
74181
74182                 var downloaded = layer
74183                     .selectAll('path.debug-downloaded')
74184                     .data(showsDownloaded ? dataDownloaded : []);
74185
74186                 downloaded.exit()
74187                     .remove();
74188
74189                 downloaded.enter()
74190                     .append('path')
74191                     .attr('class', 'debug-downloaded debug purple');
74192
74193
74194                 // update
74195                 layer.selectAll('path')
74196                     .attr('d', svgPath(projection).geojson);
74197             }
74198
74199
74200             // This looks strange because `enabled` methods on other layers are
74201             // chainable getter/setters, and this one is just a getter.
74202             drawDebug.enabled = function() {
74203                 if (!arguments.length) {
74204                     return context.getDebug('tile') ||
74205                         context.getDebug('collision') ||
74206                         context.getDebug('imagery') ||
74207                         context.getDebug('imperial') ||
74208                         context.getDebug('driveLeft') ||
74209                         context.getDebug('target') ||
74210                         context.getDebug('downloaded');
74211                 } else {
74212                     return this;
74213                 }
74214             };
74215
74216
74217             return drawDebug;
74218         }
74219
74220         var _keepRightEnabled = false;
74221         var _keepRightService;
74222
74223
74224         function svgKeepRight(projection, context, dispatch) {
74225             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
74226             var minZoom = 12;
74227             var touchLayer = d3_select(null);
74228             var drawLayer = d3_select(null);
74229             var _keepRightVisible = false;
74230
74231
74232             function markerPath(selection, klass) {
74233                 selection
74234                     .attr('class', klass)
74235                     .attr('transform', 'translate(-4, -24)')
74236                     .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');
74237             }
74238
74239
74240             // Loosely-coupled keepRight service for fetching errors.
74241             function getService() {
74242                 if (services$1.keepRight && !_keepRightService) {
74243                     _keepRightService = services$1.keepRight;
74244                     _keepRightService.on('loaded', throttledRedraw);
74245                 } else if (!services$1.keepRight && _keepRightService) {
74246                     _keepRightService = null;
74247                 }
74248
74249                 return _keepRightService;
74250             }
74251
74252
74253             // Show the errors
74254             function editOn() {
74255                 if (!_keepRightVisible) {
74256                     _keepRightVisible = true;
74257                     drawLayer
74258                         .style('display', 'block');
74259                 }
74260             }
74261
74262
74263             // Immediately remove the errors and their touch targets
74264             function editOff() {
74265                 if (_keepRightVisible) {
74266                     _keepRightVisible = false;
74267                     drawLayer
74268                         .style('display', 'none');
74269                     drawLayer.selectAll('.qa_error.keepRight')
74270                         .remove();
74271                     touchLayer.selectAll('.qa_error.keepRight')
74272                         .remove();
74273                 }
74274             }
74275
74276
74277             // Enable the layer.  This shows the errors and transitions them to visible.
74278             function layerOn() {
74279                 editOn();
74280
74281                 drawLayer
74282                     .style('opacity', 0)
74283                     .transition()
74284                     .duration(250)
74285                     .style('opacity', 1)
74286                     .on('end interrupt', function () {
74287                         dispatch.call('change');
74288                     });
74289             }
74290
74291
74292             // Disable the layer.  This transitions the layer invisible and then hides the errors.
74293             function layerOff() {
74294                 throttledRedraw.cancel();
74295                 drawLayer.interrupt();
74296                 touchLayer.selectAll('.qa_error.keepRight')
74297                     .remove();
74298
74299                 drawLayer
74300                     .transition()
74301                     .duration(250)
74302                     .style('opacity', 0)
74303                     .on('end interrupt', function () {
74304                         editOff();
74305                         dispatch.call('change');
74306                     });
74307             }
74308
74309
74310             // Update the error markers
74311             function updateMarkers() {
74312                 if (!_keepRightVisible || !_keepRightEnabled) return;
74313
74314                 var service = getService();
74315                 var selectedID = context.selectedErrorID();
74316                 var data = (service ? service.getErrors(projection) : []);
74317                 var getTransform = svgPointTransform(projection);
74318
74319                 // Draw markers..
74320                 var markers = drawLayer.selectAll('.qa_error.keepRight')
74321                     .data(data, function(d) { return d.id; });
74322
74323                 // exit
74324                 markers.exit()
74325                     .remove();
74326
74327                 // enter
74328                 var markersEnter = markers.enter()
74329                     .append('g')
74330                     .attr('class', function(d) {
74331                         return [
74332                             'qa_error',
74333                             d.service,
74334                             'error_id-' + d.id,
74335                             'error_type-' + d.parent_error_type
74336                         ].join(' ');
74337                     });
74338
74339                 markersEnter
74340                     .append('ellipse')
74341                     .attr('cx', 0.5)
74342                     .attr('cy', 1)
74343                     .attr('rx', 6.5)
74344                     .attr('ry', 3)
74345                     .attr('class', 'stroke');
74346
74347                 markersEnter
74348                     .append('path')
74349                     .call(markerPath, 'shadow');
74350
74351                 markersEnter
74352                     .append('use')
74353                     .attr('class', 'qa_error-fill')
74354                     .attr('width', '20px')
74355                     .attr('height', '20px')
74356                     .attr('x', '-8px')
74357                     .attr('y', '-22px')
74358                     .attr('xlink:href', '#iD-icon-bolt');
74359
74360                 // update
74361                 markers
74362                     .merge(markersEnter)
74363                     .sort(sortY)
74364                     .classed('selected', function(d) { return d.id === selectedID; })
74365                     .attr('transform', getTransform);
74366
74367
74368                 // Draw targets..
74369                 if (touchLayer.empty()) return;
74370                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
74371
74372                 var targets = touchLayer.selectAll('.qa_error.keepRight')
74373                     .data(data, function(d) { return d.id; });
74374
74375                 // exit
74376                 targets.exit()
74377                     .remove();
74378
74379                 // enter/update
74380                 targets.enter()
74381                     .append('rect')
74382                     .attr('width', '20px')
74383                     .attr('height', '20px')
74384                     .attr('x', '-8px')
74385                     .attr('y', '-22px')
74386                     .merge(targets)
74387                     .sort(sortY)
74388                     .attr('class', function(d) {
74389                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
74390                     })
74391                     .attr('transform', getTransform);
74392
74393
74394                 function sortY(a, b) {
74395                     return (a.id === selectedID) ? 1
74396                         : (b.id === selectedID) ? -1
74397                         : (a.severity === 'error' && b.severity !== 'error') ? 1
74398                         : (b.severity === 'error' && a.severity !== 'error') ? -1
74399                         : b.loc[1] - a.loc[1];
74400                 }
74401             }
74402
74403
74404             // Draw the keepRight layer and schedule loading errors and updating markers.
74405             function drawKeepRight(selection) {
74406                 var service = getService();
74407
74408                 var surface = context.surface();
74409                 if (surface && !surface.empty()) {
74410                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
74411                 }
74412
74413                 drawLayer = selection.selectAll('.layer-keepRight')
74414                     .data(service ? [0] : []);
74415
74416                 drawLayer.exit()
74417                     .remove();
74418
74419                 drawLayer = drawLayer.enter()
74420                     .append('g')
74421                     .attr('class', 'layer-keepRight')
74422                     .style('display', _keepRightEnabled ? 'block' : 'none')
74423                     .merge(drawLayer);
74424
74425                 if (_keepRightEnabled) {
74426                     if (service && ~~context.map().zoom() >= minZoom) {
74427                         editOn();
74428                         service.loadErrors(projection);
74429                         updateMarkers();
74430                     } else {
74431                         editOff();
74432                     }
74433                 }
74434             }
74435
74436
74437             // Toggles the layer on and off
74438             drawKeepRight.enabled = function(val) {
74439                 if (!arguments.length) return _keepRightEnabled;
74440
74441                 _keepRightEnabled = val;
74442                 if (_keepRightEnabled) {
74443                     layerOn();
74444                 } else {
74445                     layerOff();
74446                     if (context.selectedErrorID()) {
74447                         context.enter(modeBrowse(context));
74448                     }
74449                 }
74450
74451                 dispatch.call('change');
74452                 return this;
74453             };
74454
74455
74456             drawKeepRight.supported = function() {
74457                 return !!getService();
74458             };
74459
74460
74461             return drawKeepRight;
74462         }
74463
74464         function svgGeolocate(projection) {
74465             var layer = d3_select(null);
74466             var _position;
74467
74468
74469             function init() {
74470                 if (svgGeolocate.initialized) return;  // run once
74471                 svgGeolocate.enabled = false;
74472                 svgGeolocate.initialized = true;
74473             }
74474
74475             function showLayer() {
74476                 layer.style('display', 'block');
74477             }
74478
74479
74480             function hideLayer() {
74481                 layer
74482                     .transition()
74483                     .duration(250)
74484                     .style('opacity', 0);
74485             }
74486
74487             function layerOn() {
74488                 layer
74489                     .style('opacity', 0)
74490                     .transition()
74491                     .duration(250)
74492                     .style('opacity', 1);
74493
74494             }
74495
74496             function layerOff() {
74497                 layer.style('display', 'none');
74498             }
74499
74500             function transform(d) {
74501                 return svgPointTransform(projection)(d);
74502             }
74503
74504             function accuracy(accuracy, loc) { // converts accuracy to pixels...
74505                 var degreesRadius = geoMetersToLat(accuracy),
74506                     tangentLoc = [loc[0], loc[1] + degreesRadius],
74507                     projectedTangent = projection(tangentLoc),
74508                     projectedLoc = projection([loc[0], loc[1]]);
74509
74510                 // southern most point will have higher pixel value...
74511                return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
74512             }
74513
74514             function update() {
74515                 var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
74516
74517                 var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
74518                     .data([geolocation]);
74519
74520                 groups.exit()
74521                     .remove();
74522
74523                 var pointsEnter = groups.enter()
74524                     .append('g')
74525                     .attr('class', 'geolocation');
74526
74527                 pointsEnter
74528                     .append('circle')
74529                     .attr('id', 'geolocate-radius')
74530                     .attr('dx', '0')
74531                     .attr('dy', '0')
74532                     .attr('fill', 'rgb(15,128,225)')
74533                     .attr('fill-opacity', '0.3')
74534                     .attr('r', '0');
74535
74536                 pointsEnter
74537                     .append('circle')
74538                     .attr('dx', '0')
74539                     .attr('dy', '0')
74540                     .attr('fill', 'rgb(15,128,225)')
74541                     .attr('stroke', 'white')
74542                     .attr('stroke-width', '1.5')
74543                     .attr('r', '6');
74544
74545                 groups.merge(pointsEnter)
74546                     .attr('transform', transform);
74547
74548                 d3_select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
74549             }
74550
74551             function drawLocation(selection) {
74552                 var enabled = svgGeolocate.enabled;
74553
74554                 layer = selection.selectAll('.layer-geolocate')
74555                     .data([0]);
74556
74557                 layer.exit()
74558                     .remove();
74559
74560                 var layerEnter = layer.enter()
74561                     .append('g')
74562                     .attr('class', 'layer-geolocate')
74563                     .style('display', enabled ? 'block' : 'none');
74564
74565                 layerEnter
74566                     .append('g')
74567                     .attr('class', 'geolocations');
74568
74569                 layer = layerEnter
74570                     .merge(layer);
74571
74572                 if (enabled) {
74573                     update();
74574                 } else {
74575                     layerOff();
74576                 }
74577             }
74578
74579             drawLocation.enabled = function (position, enabled) {
74580                 if (!arguments.length) return svgGeolocate.enabled;
74581                 _position = position;
74582                 svgGeolocate.enabled = enabled;
74583                 if (svgGeolocate.enabled) {
74584                     showLayer();
74585                     layerOn();
74586                 } else {
74587                     hideLayer();
74588                 }
74589                 return this;
74590             };
74591
74592             init();
74593             return drawLocation;
74594         }
74595
74596         function svgLabels(projection, context) {
74597             var path = d3_geoPath(projection);
74598             var detected = utilDetect();
74599             var baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge');
74600             var _rdrawn = rbush_1();
74601             var _rskipped = rbush_1();
74602             var _textWidthCache = {};
74603             var _entitybboxes = {};
74604
74605             // Listed from highest to lowest priority
74606             var labelStack = [
74607                 ['line', 'aeroway', '*', 12],
74608                 ['line', 'highway', 'motorway', 12],
74609                 ['line', 'highway', 'trunk', 12],
74610                 ['line', 'highway', 'primary', 12],
74611                 ['line', 'highway', 'secondary', 12],
74612                 ['line', 'highway', 'tertiary', 12],
74613                 ['line', 'highway', '*', 12],
74614                 ['line', 'railway', '*', 12],
74615                 ['line', 'waterway', '*', 12],
74616                 ['area', 'aeroway', '*', 12],
74617                 ['area', 'amenity', '*', 12],
74618                 ['area', 'building', '*', 12],
74619                 ['area', 'historic', '*', 12],
74620                 ['area', 'leisure', '*', 12],
74621                 ['area', 'man_made', '*', 12],
74622                 ['area', 'natural', '*', 12],
74623                 ['area', 'shop', '*', 12],
74624                 ['area', 'tourism', '*', 12],
74625                 ['area', 'camp_site', '*', 12],
74626                 ['point', 'aeroway', '*', 10],
74627                 ['point', 'amenity', '*', 10],
74628                 ['point', 'building', '*', 10],
74629                 ['point', 'historic', '*', 10],
74630                 ['point', 'leisure', '*', 10],
74631                 ['point', 'man_made', '*', 10],
74632                 ['point', 'natural', '*', 10],
74633                 ['point', 'shop', '*', 10],
74634                 ['point', 'tourism', '*', 10],
74635                 ['point', 'camp_site', '*', 10],
74636                 ['line', 'name', '*', 12],
74637                 ['area', 'name', '*', 12],
74638                 ['point', 'name', '*', 10]
74639             ];
74640
74641
74642             function blacklisted(preset) {
74643                 var noIcons = ['building', 'landuse', 'natural'];
74644                 return noIcons.some(function(s) {
74645                     return preset.id.indexOf(s) >= 0;
74646                 });
74647             }
74648
74649
74650             function get(array, prop) {
74651                 return function(d, i) { return array[i][prop]; };
74652             }
74653
74654
74655             function textWidth(text, size, elem) {
74656                 var c = _textWidthCache[size];
74657                 if (!c) c = _textWidthCache[size] = {};
74658
74659                 if (c[text]) {
74660                     return c[text];
74661
74662                 } else if (elem) {
74663                     c[text] = elem.getComputedTextLength();
74664                     return c[text];
74665
74666                 } else {
74667                     var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
74668                     if (str === null) {
74669                         return size / 3 * 2 * text.length;
74670                     } else {
74671                         return size / 3 * (2 * text.length + str.length);
74672                     }
74673                 }
74674             }
74675
74676
74677             function drawLinePaths(selection, entities, filter, classes, labels) {
74678                 var paths = selection.selectAll('path')
74679                     .filter(filter)
74680                     .data(entities, osmEntity.key);
74681
74682                 // exit
74683                 paths.exit()
74684                     .remove();
74685
74686                 // enter/update
74687                 paths.enter()
74688                     .append('path')
74689                     .style('stroke-width', get(labels, 'font-size'))
74690                     .attr('id', function(d) { return 'labelpath-' + d.id; })
74691                     .attr('class', classes)
74692                     .merge(paths)
74693                     .attr('d', get(labels, 'lineString'));
74694             }
74695
74696
74697             function drawLineLabels(selection, entities, filter, classes, labels) {
74698                 var texts = selection.selectAll('text.' + classes)
74699                     .filter(filter)
74700                     .data(entities, osmEntity.key);
74701
74702                 // exit
74703                 texts.exit()
74704                     .remove();
74705
74706                 // enter
74707                 texts.enter()
74708                     .append('text')
74709                     .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
74710                     .attr('dy', baselineHack ? '0.35em' : null)
74711                     .append('textPath')
74712                     .attr('class', 'textpath');
74713
74714                 // update
74715                 selection.selectAll('text.' + classes).selectAll('.textpath')
74716                     .filter(filter)
74717                     .data(entities, osmEntity.key)
74718                     .attr('startOffset', '50%')
74719                     .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
74720                     .text(utilDisplayNameForPath);
74721             }
74722
74723
74724             function drawPointLabels(selection, entities, filter, classes, labels) {
74725                 var texts = selection.selectAll('text.' + classes)
74726                     .filter(filter)
74727                     .data(entities, osmEntity.key);
74728
74729                 // exit
74730                 texts.exit()
74731                     .remove();
74732
74733                 // enter/update
74734                 texts.enter()
74735                     .append('text')
74736                     .attr('class', function(d, i) {
74737                         return classes + ' ' + labels[i].classes + ' ' + d.id;
74738                     })
74739                     .merge(texts)
74740                     .attr('x', get(labels, 'x'))
74741                     .attr('y', get(labels, 'y'))
74742                     .style('text-anchor', get(labels, 'textAnchor'))
74743                     .text(utilDisplayName)
74744                     .each(function(d, i) {
74745                         textWidth(utilDisplayName(d), labels[i].height, this);
74746                     });
74747             }
74748
74749
74750             function drawAreaLabels(selection, entities, filter, classes, labels) {
74751                 entities = entities.filter(hasText);
74752                 labels = labels.filter(hasText);
74753                 drawPointLabels(selection, entities, filter, classes, labels);
74754
74755                 function hasText(d, i) {
74756                     return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
74757                 }
74758             }
74759
74760
74761             function drawAreaIcons(selection, entities, filter, classes, labels) {
74762                 var icons = selection.selectAll('use.' + classes)
74763                     .filter(filter)
74764                     .data(entities, osmEntity.key);
74765
74766                 // exit
74767                 icons.exit()
74768                     .remove();
74769
74770                 // enter/update
74771                 icons.enter()
74772                     .append('use')
74773                     .attr('class', 'icon ' + classes)
74774                     .attr('width', '17px')
74775                     .attr('height', '17px')
74776                     .merge(icons)
74777                     .attr('transform', get(labels, 'transform'))
74778                     .attr('xlink:href', function(d) {
74779                         var preset = context.presets().match(d, context.graph());
74780                         var picon = preset && preset.icon;
74781
74782                         if (!picon) {
74783                             return '';
74784                         } else {
74785                             var isMaki = /^maki-/.test(picon);
74786                             return '#' + picon + (isMaki ? '-15' : '');
74787                         }
74788                     });
74789             }
74790
74791
74792             function drawCollisionBoxes(selection, rtree, which) {
74793                 var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
74794
74795                 var gj = [];
74796                 if (context.getDebug('collision')) {
74797                     gj = rtree.all().map(function(d) {
74798                         return { type: 'Polygon', coordinates: [[
74799                             [d.minX, d.minY],
74800                             [d.maxX, d.minY],
74801                             [d.maxX, d.maxY],
74802                             [d.minX, d.maxY],
74803                             [d.minX, d.minY]
74804                         ]]};
74805                     });
74806                 }
74807
74808                 var boxes = selection.selectAll('.' + which)
74809                     .data(gj);
74810
74811                 // exit
74812                 boxes.exit()
74813                     .remove();
74814
74815                 // enter/update
74816                 boxes.enter()
74817                     .append('path')
74818                     .attr('class', classes)
74819                     .merge(boxes)
74820                     .attr('d', d3_geoPath());
74821             }
74822
74823
74824             function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
74825                 var wireframe = context.surface().classed('fill-wireframe');
74826                 var zoom = geoScaleToZoom(projection.scale());
74827
74828                 var labelable = [];
74829                 var renderNodeAs = {};
74830                 var i, j, k, entity, geometry;
74831
74832                 for (i = 0; i < labelStack.length; i++) {
74833                     labelable.push([]);
74834                 }
74835
74836                 if (fullRedraw) {
74837                     _rdrawn.clear();
74838                     _rskipped.clear();
74839                     _entitybboxes = {};
74840
74841                 } else {
74842                     for (i = 0; i < entities.length; i++) {
74843                         entity = entities[i];
74844                         var toRemove = []
74845                             .concat(_entitybboxes[entity.id] || [])
74846                             .concat(_entitybboxes[entity.id + 'I'] || []);
74847
74848                         for (j = 0; j < toRemove.length; j++) {
74849                             _rdrawn.remove(toRemove[j]);
74850                             _rskipped.remove(toRemove[j]);
74851                         }
74852                     }
74853                 }
74854
74855                 // Loop through all the entities to do some preprocessing
74856                 for (i = 0; i < entities.length; i++) {
74857                     entity = entities[i];
74858                     geometry = entity.geometry(graph);
74859
74860                     // Insert collision boxes around interesting points/vertices
74861                     if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
74862                         var hasDirections = entity.directions(graph, projection).length;
74863                         var markerPadding;
74864
74865                         if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
74866                             renderNodeAs[entity.id] = 'point';
74867                             markerPadding = 20;   // extra y for marker height
74868                         } else {
74869                             renderNodeAs[entity.id] = 'vertex';
74870                             markerPadding = 0;
74871                         }
74872
74873                         var coord = projection(entity.loc);
74874                         var nodePadding = 10;
74875                         var bbox = {
74876                             minX: coord[0] - nodePadding,
74877                             minY: coord[1] - nodePadding - markerPadding,
74878                             maxX: coord[0] + nodePadding,
74879                             maxY: coord[1] + nodePadding
74880                         };
74881
74882                         doInsert(bbox, entity.id + 'P');
74883                     }
74884
74885                     // From here on, treat vertices like points
74886                     if (geometry === 'vertex') {
74887                         geometry = 'point';
74888                     }
74889
74890                     // Determine which entities are label-able
74891                     var preset = geometry === 'area' && context.presets().match(entity, graph);
74892                     var icon = preset && !blacklisted(preset) && preset.icon;
74893
74894                     if (!icon && !utilDisplayName(entity))
74895                         continue;
74896
74897                     for (k = 0; k < labelStack.length; k++) {
74898                         var matchGeom = labelStack[k][0];
74899                         var matchKey = labelStack[k][1];
74900                         var matchVal = labelStack[k][2];
74901                         var hasVal = entity.tags[matchKey];
74902
74903                         if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
74904                             labelable[k].push(entity);
74905                             break;
74906                         }
74907                     }
74908                 }
74909
74910                 var positions = {
74911                     point: [],
74912                     line: [],
74913                     area: []
74914                 };
74915
74916                 var labelled = {
74917                     point: [],
74918                     line: [],
74919                     area: []
74920                 };
74921
74922                 // Try and find a valid label for labellable entities
74923                 for (k = 0; k < labelable.length; k++) {
74924                     var fontSize = labelStack[k][3];
74925
74926                     for (i = 0; i < labelable[k].length; i++) {
74927                         entity = labelable[k][i];
74928                         geometry = entity.geometry(graph);
74929
74930                         var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
74931                         var name = getName(entity);
74932                         var width = name && textWidth(name, fontSize);
74933                         var p = null;
74934
74935                         if (geometry === 'point' || geometry === 'vertex') {
74936                             // no point or vertex labels in wireframe mode
74937                             // no vertex labels at low zooms (vertices have no icons)
74938                             if (wireframe) continue;
74939                             var renderAs = renderNodeAs[entity.id];
74940                             if (renderAs === 'vertex' && zoom < 17) continue;
74941
74942                             p = getPointLabel(entity, width, fontSize, renderAs);
74943
74944                         } else if (geometry === 'line') {
74945                             p = getLineLabel(entity, width, fontSize);
74946
74947                         } else if (geometry === 'area') {
74948                             p = getAreaLabel(entity, width, fontSize);
74949                         }
74950
74951                         if (p) {
74952                             if (geometry === 'vertex') { geometry = 'point'; }  // treat vertex like point
74953                             p.classes = geometry + ' tag-' + labelStack[k][1];
74954                             positions[geometry].push(p);
74955                             labelled[geometry].push(entity);
74956                         }
74957                     }
74958                 }
74959
74960
74961                 function isInterestingVertex(entity) {
74962                     var selectedIDs = context.selectedIDs();
74963
74964                     return entity.hasInterestingTags() ||
74965                         entity.isEndpoint(graph) ||
74966                         entity.isConnected(graph) ||
74967                         selectedIDs.indexOf(entity.id) !== -1 ||
74968                         graph.parentWays(entity).some(function(parent) {
74969                             return selectedIDs.indexOf(parent.id) !== -1;
74970                         });
74971                 }
74972
74973
74974                 function getPointLabel(entity, width, height, geometry) {
74975                     var y = (geometry === 'point' ? -12 : 0);
74976                     var pointOffsets = {
74977                         ltr: [15, y, 'start'],
74978                         rtl: [-15, y, 'end']
74979                     };
74980
74981                     var coord = projection(entity.loc);
74982                     var textPadding = 2;
74983                     var offset = pointOffsets[textDirection];
74984                     var p = {
74985                         height: height,
74986                         width: width,
74987                         x: coord[0] + offset[0],
74988                         y: coord[1] + offset[1],
74989                         textAnchor: offset[2]
74990                     };
74991
74992                     // insert a collision box for the text label..
74993                     var bbox;
74994                     if (textDirection === 'rtl') {
74995                         bbox = {
74996                             minX: p.x - width - textPadding,
74997                             minY: p.y - (height / 2) - textPadding,
74998                             maxX: p.x + textPadding,
74999                             maxY: p.y + (height / 2) + textPadding
75000                         };
75001                     } else {
75002                         bbox = {
75003                             minX: p.x - textPadding,
75004                             minY: p.y - (height / 2) - textPadding,
75005                             maxX: p.x + width + textPadding,
75006                             maxY: p.y + (height / 2) + textPadding
75007                         };
75008                     }
75009
75010                     if (tryInsert([bbox], entity.id, true)) {
75011                         return p;
75012                     }
75013                 }
75014
75015
75016                 function getLineLabel(entity, width, height) {
75017                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
75018                     var points = graph.childNodes(entity)
75019                         .map(function(node) { return projection(node.loc); });
75020                     var length = geoPathLength(points);
75021
75022                     if (length < width + 20) return;
75023
75024                     // todo: properly clip points to viewport
75025
75026                     // % along the line to attempt to place the label
75027                     var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
75028                                        25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
75029                     var padding = 3;
75030
75031                     for (var i = 0; i < lineOffsets.length; i++) {
75032                         var offset = lineOffsets[i];
75033                         var middle = offset / 100 * length;
75034                         var start = middle - width / 2;
75035
75036                         if (start < 0 || start + width > length) continue;
75037
75038                         // generate subpath and ignore paths that are invalid or don't cross viewport.
75039                         var sub = subpath(points, start, start + width);
75040                         if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
75041                             continue;
75042                         }
75043
75044                         var isReverse = reverse(sub);
75045                         if (isReverse) {
75046                             sub = sub.reverse();
75047                         }
75048
75049                         var bboxes = [];
75050                         var boxsize = (height + 2) / 2;
75051
75052                         for (var j = 0; j < sub.length - 1; j++) {
75053                             var a = sub[j];
75054                             var b = sub[j + 1];
75055
75056                             // split up the text into small collision boxes
75057                             var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
75058
75059                             for (var box = 0; box < num; box++) {
75060                                 var p = geoVecInterp(a, b, box / num);
75061                                 var x0 = p[0] - boxsize - padding;
75062                                 var y0 = p[1] - boxsize - padding;
75063                                 var x1 = p[0] + boxsize + padding;
75064                                 var y1 = p[1] + boxsize + padding;
75065
75066                                 bboxes.push({
75067                                     minX: Math.min(x0, x1),
75068                                     minY: Math.min(y0, y1),
75069                                     maxX: Math.max(x0, x1),
75070                                     maxY: Math.max(y0, y1)
75071                                 });
75072                             }
75073                         }
75074
75075                         if (tryInsert(bboxes, entity.id, false)) {   // accept this one
75076                             return {
75077                                 'font-size': height + 2,
75078                                 lineString: lineString(sub),
75079                                 startOffset: offset + '%'
75080                             };
75081                         }
75082                     }
75083
75084                     function reverse(p) {
75085                         var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
75086                         return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
75087                     }
75088
75089                     function lineString(points) {
75090                         return 'M' + points.join('L');
75091                     }
75092
75093                     function subpath(points, from, to) {
75094                         var sofar = 0;
75095                         var start, end, i0, i1;
75096
75097                         for (var i = 0; i < points.length - 1; i++) {
75098                             var a = points[i];
75099                             var b = points[i + 1];
75100                             var current = geoVecLength(a, b);
75101                             var portion;
75102                             if (!start && sofar + current >= from) {
75103                                 portion = (from - sofar) / current;
75104                                 start = [
75105                                     a[0] + portion * (b[0] - a[0]),
75106                                     a[1] + portion * (b[1] - a[1])
75107                                 ];
75108                                 i0 = i + 1;
75109                             }
75110                             if (!end && sofar + current >= to) {
75111                                 portion = (to - sofar) / current;
75112                                 end = [
75113                                     a[0] + portion * (b[0] - a[0]),
75114                                     a[1] + portion * (b[1] - a[1])
75115                                 ];
75116                                 i1 = i + 1;
75117                             }
75118                             sofar += current;
75119                         }
75120
75121                         var result = points.slice(i0, i1);
75122                         result.unshift(start);
75123                         result.push(end);
75124                         return result;
75125                     }
75126                 }
75127
75128
75129                 function getAreaLabel(entity, width, height) {
75130                     var centroid = path.centroid(entity.asGeoJSON(graph, true));
75131                     var extent = entity.extent(graph);
75132                     var areaWidth = projection(extent[1])[0] - projection(extent[0])[0];
75133
75134                     if (isNaN(centroid[0]) || areaWidth < 20) return;
75135
75136                     var preset = context.presets().match(entity, context.graph());
75137                     var picon = preset && preset.icon;
75138                     var iconSize = 17;
75139                     var padding = 2;
75140                     var p = {};
75141
75142                     if (picon) {  // icon and label..
75143                         if (addIcon()) {
75144                             addLabel(iconSize + padding);
75145                             return p;
75146                         }
75147                     } else {   // label only..
75148                         if (addLabel(0)) {
75149                             return p;
75150                         }
75151                     }
75152
75153
75154                     function addIcon() {
75155                         var iconX = centroid[0] - (iconSize / 2);
75156                         var iconY = centroid[1] - (iconSize / 2);
75157                         var bbox = {
75158                             minX: iconX,
75159                             minY: iconY,
75160                             maxX: iconX + iconSize,
75161                             maxY: iconY + iconSize
75162                         };
75163
75164                         if (tryInsert([bbox], entity.id + 'I', true)) {
75165                             p.transform = 'translate(' + iconX + ',' + iconY + ')';
75166                             return true;
75167                         }
75168                         return false;
75169                     }
75170
75171                     function addLabel(yOffset) {
75172                         if (width && areaWidth >= width + 20) {
75173                             var labelX = centroid[0];
75174                             var labelY = centroid[1] + yOffset;
75175                             var bbox = {
75176                                 minX: labelX - (width / 2) - padding,
75177                                 minY: labelY - (height / 2) - padding,
75178                                 maxX: labelX + (width / 2) + padding,
75179                                 maxY: labelY + (height / 2) + padding
75180                             };
75181
75182                             if (tryInsert([bbox], entity.id, true)) {
75183                                 p.x = labelX;
75184                                 p.y = labelY;
75185                                 p.textAnchor = 'middle';
75186                                 p.height = height;
75187                                 return true;
75188                             }
75189                         }
75190                         return false;
75191                     }
75192                 }
75193
75194
75195                 // force insert a singular bounding box
75196                 // singular box only, no array, id better be unique
75197                 function doInsert(bbox, id) {
75198                     bbox.id = id;
75199
75200                     var oldbox = _entitybboxes[id];
75201                     if (oldbox) {
75202                         _rdrawn.remove(oldbox);
75203                     }
75204                     _entitybboxes[id] = bbox;
75205                     _rdrawn.insert(bbox);
75206                 }
75207
75208
75209                 function tryInsert(bboxes, id, saveSkipped) {
75210                     var skipped = false;
75211
75212                     for (var i = 0; i < bboxes.length; i++) {
75213                         var bbox = bboxes[i];
75214                         bbox.id = id;
75215
75216                         // Check that label is visible
75217                         if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
75218                             skipped = true;
75219                             break;
75220                         }
75221                         if (_rdrawn.collides(bbox)) {
75222                             skipped = true;
75223                             break;
75224                         }
75225                     }
75226
75227                     _entitybboxes[id] = bboxes;
75228
75229                     if (skipped) {
75230                         if (saveSkipped) {
75231                             _rskipped.load(bboxes);
75232                         }
75233                     } else {
75234                         _rdrawn.load(bboxes);
75235                     }
75236
75237                     return !skipped;
75238                 }
75239
75240
75241                 var layer = selection.selectAll('.layer-osm.labels');
75242                 layer.selectAll('.labels-group')
75243                     .data(['halo', 'label', 'debug'])
75244                     .enter()
75245                     .append('g')
75246                     .attr('class', function(d) { return 'labels-group ' + d; });
75247
75248                 var halo = layer.selectAll('.labels-group.halo');
75249                 var label = layer.selectAll('.labels-group.label');
75250                 var debug = layer.selectAll('.labels-group.debug');
75251
75252                 // points
75253                 drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
75254                 drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
75255
75256                 // lines
75257                 drawLinePaths(layer, labelled.line, filter, '', positions.line);
75258                 drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
75259                 drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
75260
75261                 // areas
75262                 drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
75263                 drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
75264                 drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
75265                 drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
75266
75267                 // debug
75268                 drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
75269                 drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
75270
75271                 layer.call(filterLabels);
75272             }
75273
75274
75275             function filterLabels(selection) {
75276                 var drawLayer = selection.selectAll('.layer-osm.labels');
75277                 var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
75278
75279                 layers.selectAll('.nolabel')
75280                     .classed('nolabel', false);
75281
75282                 var mouse = context.mouse();
75283                 var graph = context.graph();
75284                 var selectedIDs = context.selectedIDs();
75285                 var ids = [];
75286                 var pad, bbox;
75287
75288                 // hide labels near the mouse
75289                 if (mouse) {
75290                     pad = 20;
75291                     bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
75292                     var nearMouse = _rdrawn.search(bbox).map(function(entity) { return entity.id; });
75293                     ids.push.apply(ids, nearMouse);
75294                 }
75295
75296                 // hide labels on selected nodes (they look weird when dragging / haloed)
75297                 for (var i = 0; i < selectedIDs.length; i++) {
75298                     var entity = graph.hasEntity(selectedIDs[i]);
75299                     if (entity && entity.type === 'node') {
75300                         ids.push(selectedIDs[i]);
75301                     }
75302                 }
75303
75304                 layers.selectAll(utilEntitySelector(ids))
75305                     .classed('nolabel', true);
75306
75307
75308                 // draw the mouse bbox if debugging is on..
75309                 var debug = selection.selectAll('.labels-group.debug');
75310                 var gj = [];
75311                 if (context.getDebug('collision')) {
75312                     gj = bbox ? [{
75313                         type: 'Polygon',
75314                         coordinates: [[
75315                             [bbox.minX, bbox.minY],
75316                             [bbox.maxX, bbox.minY],
75317                             [bbox.maxX, bbox.maxY],
75318                             [bbox.minX, bbox.maxY],
75319                             [bbox.minX, bbox.minY]
75320                         ]]
75321                     }] : [];
75322                 }
75323
75324                 var box = debug.selectAll('.debug-mouse')
75325                     .data(gj);
75326
75327                 // exit
75328                 box.exit()
75329                     .remove();
75330
75331                 // enter/update
75332                 box.enter()
75333                     .append('path')
75334                     .attr('class', 'debug debug-mouse yellow')
75335                     .merge(box)
75336                     .attr('d', d3_geoPath());
75337             }
75338
75339
75340             var throttleFilterLabels = throttle(filterLabels, 100);
75341
75342
75343             drawLabels.observe = function(selection) {
75344                 var listener = function() { throttleFilterLabels(selection); };
75345                 selection.on('mousemove.hidelabels', listener);
75346                 context.on('enter.hidelabels', listener);
75347             };
75348
75349
75350             drawLabels.off = function(selection) {
75351                 throttleFilterLabels.cancel();
75352                 selection.on('mousemove.hidelabels', null);
75353                 context.on('enter.hidelabels', null);
75354             };
75355
75356
75357             return drawLabels;
75358         }
75359
75360         var _improveOsmEnabled = false;
75361         var _errorService;
75362
75363
75364         function svgImproveOSM(projection, context, dispatch) {
75365             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75366             var minZoom = 12;
75367             var touchLayer = d3_select(null);
75368             var drawLayer = d3_select(null);
75369             var _improveOsmVisible = false;
75370
75371             function markerPath(selection, klass) {
75372                 selection
75373                     .attr('class', klass)
75374                     .attr('transform', 'translate(-10, -28)')
75375                     .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');
75376             }
75377
75378
75379             // Loosely-coupled improveOSM service for fetching errors.
75380             function getService() {
75381                 if (services$1.improveOSM && !_errorService) {
75382                     _errorService = services$1.improveOSM;
75383                     _errorService.on('loaded', throttledRedraw);
75384                 } else if (!services$1.improveOSM && _errorService) {
75385                     _errorService = null;
75386                 }
75387
75388                 return _errorService;
75389             }
75390
75391
75392             // Show the errors
75393             function editOn() {
75394                 if (!_improveOsmVisible) {
75395                     _improveOsmVisible = true;
75396                     drawLayer
75397                         .style('display', 'block');
75398                 }
75399             }
75400
75401
75402             // Immediately remove the errors and their touch targets
75403             function editOff() {
75404                 if (_improveOsmVisible) {
75405                     _improveOsmVisible = false;
75406                     drawLayer
75407                         .style('display', 'none');
75408                     drawLayer.selectAll('.qa_error.improveOSM')
75409                         .remove();
75410                     touchLayer.selectAll('.qa_error.improveOSM')
75411                         .remove();
75412                 }
75413             }
75414
75415
75416             // Enable the layer.  This shows the errors and transitions them to visible.
75417             function layerOn() {
75418                 editOn();
75419
75420                 drawLayer
75421                     .style('opacity', 0)
75422                     .transition()
75423                     .duration(250)
75424                     .style('opacity', 1)
75425                     .on('end interrupt', function () {
75426                         dispatch.call('change');
75427                     });
75428             }
75429
75430
75431             // Disable the layer.  This transitions the layer invisible and then hides the errors.
75432             function layerOff() {
75433                 throttledRedraw.cancel();
75434                 drawLayer.interrupt();
75435                 touchLayer.selectAll('.qa_error.improveOSM')
75436                     .remove();
75437
75438                 drawLayer
75439                     .transition()
75440                     .duration(250)
75441                     .style('opacity', 0)
75442                     .on('end interrupt', function () {
75443                         editOff();
75444                         dispatch.call('change');
75445                     });
75446             }
75447
75448
75449             // Update the error markers
75450             function updateMarkers() {
75451                 if (!_improveOsmVisible || !_improveOsmEnabled) return;
75452
75453                 var service = getService();
75454                 var selectedID = context.selectedErrorID();
75455                 var data = (service ? service.getErrors(projection) : []);
75456                 var getTransform = svgPointTransform(projection);
75457
75458                 // Draw markers..
75459                 var markers = drawLayer.selectAll('.qa_error.improveOSM')
75460                     .data(data, function(d) { return d.id; });
75461
75462                 // exit
75463                 markers.exit()
75464                     .remove();
75465
75466                 // enter
75467                 var markersEnter = markers.enter()
75468                     .append('g')
75469                     .attr('class', function(d) {
75470                         return [
75471                             'qa_error',
75472                             d.service,
75473                             'error_id-' + d.id,
75474                             'error_type-' + d.error_type,
75475                             'category-' + d.category
75476                         ].join(' ');
75477                     });
75478
75479                 markersEnter
75480                     .append('polygon')
75481                     .call(markerPath, 'shadow');
75482
75483                 markersEnter
75484                     .append('ellipse')
75485                     .attr('cx', 0)
75486                     .attr('cy', 0)
75487                     .attr('rx', 4.5)
75488                     .attr('ry', 2)
75489                     .attr('class', 'stroke');
75490
75491                 markersEnter
75492                     .append('polygon')
75493                     .attr('fill', 'currentColor')
75494                     .call(markerPath, 'qa_error-fill');
75495
75496                 markersEnter
75497                     .append('use')
75498                     .attr('transform', 'translate(-5.5, -21)')
75499                     .attr('class', 'icon-annotation')
75500                     .attr('width', '11px')
75501                     .attr('height', '11px')
75502                     .attr('xlink:href', function(d) {
75503                         var picon = d.icon;
75504
75505                         if (!picon) {
75506                             return '';
75507                         } else {
75508                             var isMaki = /^maki-/.test(picon);
75509                             return '#' + picon + (isMaki ? '-11' : '');
75510                         }
75511                     });
75512
75513                 // update
75514                 markers
75515                     .merge(markersEnter)
75516                     .sort(sortY)
75517                     .classed('selected', function(d) { return d.id === selectedID; })
75518                     .attr('transform', getTransform);
75519
75520
75521                 // Draw targets..
75522                 if (touchLayer.empty()) return;
75523                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
75524
75525                 var targets = touchLayer.selectAll('.qa_error.improveOSM')
75526                     .data(data, function(d) { return d.id; });
75527
75528                 // exit
75529                 targets.exit()
75530                     .remove();
75531
75532                 // enter/update
75533                 targets.enter()
75534                     .append('rect')
75535                     .attr('width', '20px')
75536                     .attr('height', '30px')
75537                     .attr('x', '-10px')
75538                     .attr('y', '-28px')
75539                     .merge(targets)
75540                     .sort(sortY)
75541                     .attr('class', function(d) {
75542                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
75543                     })
75544                     .attr('transform', getTransform);
75545
75546
75547                 function sortY(a, b) {
75548                     return (a.id === selectedID) ? 1
75549                         : (b.id === selectedID) ? -1
75550                         : b.loc[1] - a.loc[1];
75551                 }
75552             }
75553
75554
75555             // Draw the ImproveOSM layer and schedule loading errors and updating markers.
75556             function drawImproveOSM(selection) {
75557                 var service = getService();
75558
75559                 var surface = context.surface();
75560                 if (surface && !surface.empty()) {
75561                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
75562                 }
75563
75564                 drawLayer = selection.selectAll('.layer-improveOSM')
75565                     .data(service ? [0] : []);
75566
75567                 drawLayer.exit()
75568                     .remove();
75569
75570                 drawLayer = drawLayer.enter()
75571                     .append('g')
75572                     .attr('class', 'layer-improveOSM')
75573                     .style('display', _improveOsmEnabled ? 'block' : 'none')
75574                     .merge(drawLayer);
75575
75576                 if (_improveOsmEnabled) {
75577                     if (service && ~~context.map().zoom() >= minZoom) {
75578                         editOn();
75579                         service.loadErrors(projection);
75580                         updateMarkers();
75581                     } else {
75582                         editOff();
75583                     }
75584                 }
75585             }
75586
75587
75588             // Toggles the layer on and off
75589             drawImproveOSM.enabled = function(val) {
75590                 if (!arguments.length) return _improveOsmEnabled;
75591
75592                 _improveOsmEnabled = val;
75593                 if (_improveOsmEnabled) {
75594                     layerOn();
75595                 } else {
75596                     layerOff();
75597                     if (context.selectedErrorID()) {
75598                         context.enter(modeBrowse(context));
75599                     }
75600                 }
75601
75602                 dispatch.call('change');
75603                 return this;
75604             };
75605
75606
75607             drawImproveOSM.supported = function() {
75608                 return !!getService();
75609             };
75610
75611
75612             return drawImproveOSM;
75613         }
75614
75615         function svgStreetside(projection, context, dispatch) {
75616             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75617             var minZoom = 14;
75618             var minMarkerZoom = 16;
75619             var minViewfieldZoom = 18;
75620             var layer = d3_select(null);
75621             var _viewerYaw = 0;
75622             var _selectedSequence = null;
75623             var _streetside;
75624
75625             /**
75626              * init().
75627              */
75628             function init() {
75629                 if (svgStreetside.initialized) return;  // run once
75630                 svgStreetside.enabled = false;
75631                 svgStreetside.initialized = true;
75632             }
75633
75634             /**
75635              * getService().
75636              */
75637             function getService() {
75638                 if (services$1.streetside && !_streetside) {
75639                     _streetside = services$1.streetside;
75640                     _streetside.event
75641                         .on('viewerChanged', viewerChanged)
75642                         .on('loadedBubbles', throttledRedraw);
75643                 } else if (!services$1.streetside && _streetside) {
75644                     _streetside = null;
75645                 }
75646
75647                 return _streetside;
75648             }
75649
75650             /**
75651              * showLayer().
75652              */
75653             function showLayer() {
75654                 var service = getService();
75655                 if (!service) return;
75656
75657                 editOn();
75658
75659                 layer
75660                     .style('opacity', 0)
75661                     .transition()
75662                     .duration(250)
75663                     .style('opacity', 1)
75664                     .on('end', function () { dispatch.call('change'); });
75665             }
75666
75667             /**
75668              * hideLayer().
75669              */
75670             function hideLayer() {
75671                 throttledRedraw.cancel();
75672
75673                 layer
75674                     .transition()
75675                     .duration(250)
75676                     .style('opacity', 0)
75677                     .on('end', editOff);
75678             }
75679
75680             /**
75681              * editOn().
75682              */
75683             function editOn() {
75684                 layer.style('display', 'block');
75685             }
75686
75687             /**
75688              * editOff().
75689              */
75690             function editOff() {
75691                 layer.selectAll('.viewfield-group').remove();
75692                 layer.style('display', 'none');
75693             }
75694
75695             /**
75696              * click() Handles 'bubble' point click event.
75697              */
75698             function click(d) {
75699                 var service = getService();
75700                 if (!service) return;
75701
75702                 // try to preserve the viewer rotation when staying on the same sequence
75703                 if (d.sequenceKey !== _selectedSequence) {
75704                     _viewerYaw = 0;  // reset
75705                 }
75706                 _selectedSequence = d.sequenceKey;
75707
75708                 service
75709                     .selectImage(d)
75710                     .then(function(r) {
75711                         if (r.status === 'ok'){
75712                             service.showViewer(_viewerYaw);
75713                         }
75714                     });
75715
75716
75717                 context.map().centerEase(d.loc);
75718             }
75719
75720             /**
75721              * mouseover().
75722              */
75723             function mouseover(d) {
75724                 var service = getService();
75725                 if (service) service.setStyles(d);
75726             }
75727
75728             /**
75729              * mouseout().
75730              */
75731             function mouseout() {
75732                 var service = getService();
75733                 if (service) service.setStyles(null);
75734             }
75735
75736             /**
75737              * transform().
75738              */
75739             function transform(d) {
75740                 var t = svgPointTransform(projection)(d);
75741                 var rot = d.ca + _viewerYaw;
75742                 if (rot) {
75743                     t += ' rotate(' + Math.floor(rot) + ',0,0)';
75744                 }
75745                 return t;
75746             }
75747
75748
75749             function viewerChanged() {
75750                 var service = getService();
75751                 if (!service) return;
75752
75753                 var viewer = service.viewer();
75754                 if (!viewer) return;
75755
75756                 // update viewfield rotation
75757                 _viewerYaw = viewer.getYaw();
75758
75759                 // avoid updating if the map is currently transformed
75760                 // e.g. during drags or easing.
75761                 if (context.map().isTransformed()) return;
75762
75763                 layer.selectAll('.viewfield-group.currentView')
75764                     .attr('transform', transform);
75765             }
75766
75767
75768             context.photos().on('change.streetside', update);
75769
75770             /**
75771              * update().
75772              */
75773             function update() {
75774                 var viewer = d3_select('#photoviewer');
75775                 var selected = viewer.empty() ? undefined : viewer.datum();
75776                 var z = ~~context.map().zoom();
75777                 var showMarkers = (z >= minMarkerZoom);
75778                 var showViewfields = (z >= minViewfieldZoom);
75779                 var service = getService();
75780
75781                 var sequences = [];
75782                 var bubbles = [];
75783
75784                 if (context.photos().showsPanoramic()) {
75785                     sequences = (service ? service.sequences(projection) : []);
75786                     bubbles = (service && showMarkers ? service.bubbles(projection) : []);
75787                 }
75788
75789                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
75790                     .data(sequences, function(d) { return d.properties.key; });
75791
75792                 // exit
75793                 traces.exit()
75794                     .remove();
75795
75796                 // enter/update
75797                 traces = traces.enter()
75798                     .append('path')
75799                     .attr('class', 'sequence')
75800                     .merge(traces)
75801                     .attr('d', svgPath(projection).geojson);
75802
75803
75804                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
75805                     .data(bubbles, function(d) {
75806                         // force reenter once bubbles are attached to a sequence
75807                         return d.key + (d.sequenceKey ? 'v1' : 'v0');
75808                     });
75809
75810                 // exit
75811                 groups.exit()
75812                     .remove();
75813
75814                 // enter
75815                 var groupsEnter = groups.enter()
75816                     .append('g')
75817                     .attr('class', 'viewfield-group')
75818                     .on('mouseenter', mouseover)
75819                     .on('mouseleave', mouseout)
75820                     .on('click', click);
75821
75822                 groupsEnter
75823                     .append('g')
75824                     .attr('class', 'viewfield-scale');
75825
75826                 // update
75827                 var markers = groups
75828                     .merge(groupsEnter)
75829                     .sort(function(a, b) {
75830                         return (a === selected) ? 1
75831                             : (b === selected) ? -1
75832                             : b.loc[1] - a.loc[1];
75833                     })
75834                     .attr('transform', transform)
75835                     .select('.viewfield-scale');
75836
75837
75838                 markers.selectAll('circle')
75839                     .data([0])
75840                     .enter()
75841                     .append('circle')
75842                     .attr('dx', '0')
75843                     .attr('dy', '0')
75844                     .attr('r', '6');
75845
75846                 var viewfields = markers.selectAll('.viewfield')
75847                     .data(showViewfields ? [0] : []);
75848
75849                 viewfields.exit()
75850                     .remove();
75851
75852                 // viewfields may or may not be drawn...
75853                 // but if they are, draw below the circles
75854                 viewfields.enter()
75855                     .insert('path', 'circle')
75856                     .attr('class', 'viewfield')
75857                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
75858                     .attr('d', viewfieldPath);
75859
75860                 function viewfieldPath() {
75861                     var d = this.parentNode.__data__;
75862                     if (d.pano) {
75863                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
75864                     } else {
75865                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
75866                     }
75867                 }
75868
75869             }
75870
75871             /**
75872              * drawImages()
75873              * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
75874              * 'svgStreetside()' is called from index.js
75875              */
75876             function drawImages(selection) {
75877                 var enabled = svgStreetside.enabled;
75878                 var service = getService();
75879
75880                 layer = selection.selectAll('.layer-streetside-images')
75881                     .data(service ? [0] : []);
75882
75883                 layer.exit()
75884                     .remove();
75885
75886                 var layerEnter = layer.enter()
75887                     .append('g')
75888                     .attr('class', 'layer-streetside-images')
75889                     .style('display', enabled ? 'block' : 'none');
75890
75891                 layerEnter
75892                     .append('g')
75893                     .attr('class', 'sequences');
75894
75895                 layerEnter
75896                     .append('g')
75897                     .attr('class', 'markers');
75898
75899                 layer = layerEnter
75900                     .merge(layer);
75901
75902                 if (enabled) {
75903                     if (service && ~~context.map().zoom() >= minZoom) {
75904                         editOn();
75905                         update();
75906                         service.loadBubbles(projection);
75907                     } else {
75908                         editOff();
75909                     }
75910                 }
75911             }
75912
75913
75914             /**
75915              * drawImages.enabled().
75916              */
75917             drawImages.enabled = function(_) {
75918                 if (!arguments.length) return svgStreetside.enabled;
75919                 svgStreetside.enabled = _;
75920                 if (svgStreetside.enabled) {
75921                     showLayer();
75922                 } else {
75923                     hideLayer();
75924                 }
75925                 dispatch.call('change');
75926                 return this;
75927             };
75928
75929             /**
75930              * drawImages.supported().
75931              */
75932             drawImages.supported = function() {
75933                 return !!getService();
75934             };
75935
75936             init();
75937
75938             return drawImages;
75939         }
75940
75941         function svgMapillaryImages(projection, context, dispatch) {
75942             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75943             var minZoom = 12;
75944             var minMarkerZoom = 16;
75945             var minViewfieldZoom = 18;
75946             var layer = d3_select(null);
75947             var _mapillary;
75948             var viewerCompassAngle;
75949
75950
75951             function init() {
75952                 if (svgMapillaryImages.initialized) return;  // run once
75953                 svgMapillaryImages.enabled = false;
75954                 svgMapillaryImages.initialized = true;
75955             }
75956
75957
75958             function getService() {
75959                 if (services$1.mapillary && !_mapillary) {
75960                     _mapillary = services$1.mapillary;
75961                     _mapillary.event.on('loadedImages', throttledRedraw);
75962                     _mapillary.event.on('bearingChanged', function(e) {
75963                         viewerCompassAngle = e;
75964
75965                         // avoid updating if the map is currently transformed
75966                         // e.g. during drags or easing.
75967                         if (context.map().isTransformed()) return;
75968
75969                         layer.selectAll('.viewfield-group.currentView')
75970                             .filter(function(d) {
75971                                 return d.pano;
75972                             })
75973                             .attr('transform', transform);
75974                     });
75975                 } else if (!services$1.mapillary && _mapillary) {
75976                     _mapillary = null;
75977                 }
75978
75979                 return _mapillary;
75980             }
75981
75982
75983             function showLayer() {
75984                 var service = getService();
75985                 if (!service) return;
75986
75987                 editOn();
75988
75989                 layer
75990                     .style('opacity', 0)
75991                     .transition()
75992                     .duration(250)
75993                     .style('opacity', 1)
75994                     .on('end', function () { dispatch.call('change'); });
75995             }
75996
75997
75998             function hideLayer() {
75999                 throttledRedraw.cancel();
76000
76001                 layer
76002                     .transition()
76003                     .duration(250)
76004                     .style('opacity', 0)
76005                     .on('end', editOff);
76006             }
76007
76008
76009             function editOn() {
76010                 layer.style('display', 'block');
76011             }
76012
76013
76014             function editOff() {
76015                 layer.selectAll('.viewfield-group').remove();
76016                 layer.style('display', 'none');
76017             }
76018
76019
76020             function click(d) {
76021                 var service = getService();
76022                 if (!service) return;
76023
76024                 service
76025                     .selectImage(d)
76026                     .updateViewer(d.key, context)
76027                     .showViewer();
76028
76029                 context.map().centerEase(d.loc);
76030             }
76031
76032
76033             function mouseover(d) {
76034                 var service = getService();
76035                 if (service) service.setStyles(d);
76036             }
76037
76038
76039             function mouseout() {
76040                 var service = getService();
76041                 if (service) service.setStyles(null);
76042             }
76043
76044
76045             function transform(d) {
76046                 var t = svgPointTransform(projection)(d);
76047                 if (d.pano && viewerCompassAngle !== null && isFinite(viewerCompassAngle)) {
76048                     t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
76049                 } else if (d.ca) {
76050                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
76051                 }
76052                 return t;
76053             }
76054
76055             context.photos().on('change.mapillary_images', update);
76056
76057             function filterImages(images) {
76058                 var showsPano = context.photos().showsPanoramic();
76059                 var showsFlat = context.photos().showsFlat();
76060                 if (!showsPano || !showsFlat) {
76061                     images = images.filter(function(image) {
76062                         if (image.pano) return showsPano;
76063                         return showsFlat;
76064                     });
76065                 }
76066                 return images;
76067             }
76068
76069             function filterSequences(sequences, service) {
76070                 var showsPano = context.photos().showsPanoramic();
76071                 var showsFlat = context.photos().showsFlat();
76072                 if (!showsPano || !showsFlat) {
76073                     sequences = sequences.filter(function(sequence) {
76074                         if (sequence.properties.hasOwnProperty('pano')) {
76075                             if (sequence.properties.pano) return showsPano;
76076                             return showsFlat;
76077                         } else {
76078                             // if the sequence doesn't specify pano or not, search its images
76079                             var cProps = sequence.properties.coordinateProperties;
76080                             if (cProps && cProps.image_keys && cProps.image_keys.length > 0) {
76081                                 for (var index in cProps.image_keys) {
76082                                     var imageKey = cProps.image_keys[index];
76083                                     var image = service.cachedImage(imageKey);
76084                                     if (image && image.hasOwnProperty('pano')) {
76085                                         if (image.pano) return showsPano;
76086                                         return showsFlat;
76087                                     }
76088                                 }
76089                             }
76090                         }
76091                     });
76092                 }
76093                 return sequences;
76094             }
76095
76096             function update() {
76097                 var viewer = d3_select('#photoviewer');
76098                 var selected = viewer.empty() ? undefined : viewer.datum();
76099
76100                 var z = ~~context.map().zoom();
76101                 var showMarkers = (z >= minMarkerZoom);
76102                 var showViewfields = (z >= minViewfieldZoom);
76103
76104                 var service = getService();
76105                 var sequences = (service ? service.sequences(projection) : []);
76106                 var images = (service && showMarkers ? service.images(projection) : []);
76107
76108                 images = filterImages(images);
76109                 sequences = filterSequences(sequences, service);
76110
76111                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
76112                     .data(sequences, function(d) { return d.properties.key; });
76113
76114                 // exit
76115                 traces.exit()
76116                     .remove();
76117
76118                 // enter/update
76119                 traces = traces.enter()
76120                     .append('path')
76121                     .attr('class', 'sequence')
76122                     .merge(traces)
76123                     .attr('d', svgPath(projection).geojson);
76124
76125
76126                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
76127                     .data(images, function(d) { return d.key; });
76128
76129                 // exit
76130                 groups.exit()
76131                     .remove();
76132
76133                 // enter
76134                 var groupsEnter = groups.enter()
76135                     .append('g')
76136                     .attr('class', 'viewfield-group')
76137                     .on('mouseenter', mouseover)
76138                     .on('mouseleave', mouseout)
76139                     .on('click', click);
76140
76141                 groupsEnter
76142                     .append('g')
76143                     .attr('class', 'viewfield-scale');
76144
76145                 // update
76146                 var markers = groups
76147                     .merge(groupsEnter)
76148                     .sort(function(a, b) {
76149                         return (a === selected) ? 1
76150                             : (b === selected) ? -1
76151                             : b.loc[1] - a.loc[1];  // sort Y
76152                     })
76153                     .attr('transform', transform)
76154                     .select('.viewfield-scale');
76155
76156
76157                 markers.selectAll('circle')
76158                     .data([0])
76159                     .enter()
76160                     .append('circle')
76161                     .attr('dx', '0')
76162                     .attr('dy', '0')
76163                     .attr('r', '6');
76164
76165                 var viewfields = markers.selectAll('.viewfield')
76166                     .data(showViewfields ? [0] : []);
76167
76168                 viewfields.exit()
76169                     .remove();
76170
76171                 viewfields.enter()               // viewfields may or may not be drawn...
76172                     .insert('path', 'circle')    // but if they are, draw below the circles
76173                     .attr('class', 'viewfield')
76174                     .classed('pano', function() { return this.parentNode.__data__.pano; })
76175                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
76176                     .attr('d', viewfieldPath);
76177
76178                 function viewfieldPath() {
76179                     var d = this.parentNode.__data__;
76180                     if (d.pano) {
76181                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
76182                     } else {
76183                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
76184                     }
76185                 }
76186             }
76187
76188
76189             function drawImages(selection) {
76190                 var enabled = svgMapillaryImages.enabled;
76191                 var service = getService();
76192
76193                 layer = selection.selectAll('.layer-mapillary')
76194                     .data(service ? [0] : []);
76195
76196                 layer.exit()
76197                     .remove();
76198
76199                 var layerEnter = layer.enter()
76200                     .append('g')
76201                     .attr('class', 'layer-mapillary')
76202                     .style('display', enabled ? 'block' : 'none');
76203
76204                 layerEnter
76205                     .append('g')
76206                     .attr('class', 'sequences');
76207
76208                 layerEnter
76209                     .append('g')
76210                     .attr('class', 'markers');
76211
76212                 layer = layerEnter
76213                     .merge(layer);
76214
76215                 if (enabled) {
76216                     if (service && ~~context.map().zoom() >= minZoom) {
76217                         editOn();
76218                         update();
76219                         service.loadImages(projection);
76220                     } else {
76221                         editOff();
76222                     }
76223                 }
76224             }
76225
76226
76227             drawImages.enabled = function(_) {
76228                 if (!arguments.length) return svgMapillaryImages.enabled;
76229                 svgMapillaryImages.enabled = _;
76230                 if (svgMapillaryImages.enabled) {
76231                     showLayer();
76232                 } else {
76233                     hideLayer();
76234                 }
76235                 dispatch.call('change');
76236                 return this;
76237             };
76238
76239
76240             drawImages.supported = function() {
76241                 return !!getService();
76242             };
76243
76244
76245             init();
76246             return drawImages;
76247         }
76248
76249         function svgMapillarySigns(projection, context, dispatch) {
76250             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
76251             var minZoom = 12;
76252             var layer = d3_select(null);
76253             var _mapillary;
76254
76255
76256             function init() {
76257                 if (svgMapillarySigns.initialized) return;  // run once
76258                 svgMapillarySigns.enabled = false;
76259                 svgMapillarySigns.initialized = true;
76260             }
76261
76262
76263             function getService() {
76264                 if (services$1.mapillary && !_mapillary) {
76265                     _mapillary = services$1.mapillary;
76266                     _mapillary.event.on('loadedSigns', throttledRedraw);
76267                 } else if (!services$1.mapillary && _mapillary) {
76268                     _mapillary = null;
76269                 }
76270                 return _mapillary;
76271             }
76272
76273
76274             function showLayer() {
76275                 var service = getService();
76276                 if (!service) return;
76277
76278                 editOn();
76279             }
76280
76281
76282             function hideLayer() {
76283                 throttledRedraw.cancel();
76284                 editOff();
76285             }
76286
76287
76288             function editOn() {
76289                 layer.style('display', 'block');
76290             }
76291
76292
76293             function editOff() {
76294                 layer.selectAll('.icon-sign').remove();
76295                 layer.style('display', 'none');
76296             }
76297
76298
76299             function click(d) {
76300                 var service = getService();
76301                 if (!service) return;
76302
76303                 context.map().centerEase(d.loc);
76304
76305                 var selected = service.getSelectedImage();
76306                 var selectedImageKey = selected && selected.key;
76307                 var imageKey;
76308
76309                 // Pick one of the images the sign was detected in,
76310                 // preference given to an image already selected.
76311                 d.detections.forEach(function(detection) {
76312                     if (!imageKey || selectedImageKey === detection.image_key) {
76313                         imageKey = detection.image_key;
76314                     }
76315                 });
76316
76317                 service
76318                     .selectImage(null, imageKey)
76319                     .updateViewer(imageKey, context)
76320                     .showViewer();
76321             }
76322
76323
76324             function update() {
76325                 var service = getService();
76326                 var data = (service ? service.signs(projection) : []);
76327                 var viewer = d3_select('#photoviewer');
76328                 var selected = viewer.empty() ? undefined : viewer.datum();
76329                 var selectedImageKey = selected && selected.key;
76330                 var transform = svgPointTransform(projection);
76331
76332                 var signs = layer.selectAll('.icon-sign')
76333                     .data(data, function(d) { return d.key; });
76334
76335                 // exit
76336                 signs.exit()
76337                     .remove();
76338
76339                 // enter
76340                 var enter = signs.enter()
76341                     .append('use')
76342                     .attr('class', 'icon-sign')
76343                     .attr('width', '24px')
76344                     .attr('height', '24px')
76345                     .attr('x', '-12px')
76346                     .attr('y', '-12px')
76347                     .attr('xlink:href', function(d) { return '#' + d.value; })
76348                     .classed('currentView', function(d) {
76349                         return d.detections.some(function(detection) {
76350                             return detection.image_key === selectedImageKey;
76351                         });
76352                     })
76353                     .on('click', click);
76354
76355                 // update
76356                 signs
76357                     .merge(enter)
76358                     .sort(function(a, b) {
76359                         return (a === selected) ? 1
76360                             : (b === selected) ? -1
76361                             : b.loc[1] - a.loc[1];  // sort Y
76362                     })
76363                     .attr('transform', transform);
76364             }
76365
76366
76367             function drawSigns(selection) {
76368                 var enabled = svgMapillarySigns.enabled;
76369                 var service = getService();
76370
76371                 layer = selection.selectAll('.layer-mapillary-signs')
76372                     .data(service ? [0] : []);
76373
76374                 layer.exit()
76375                     .remove();
76376
76377                 layer = layer.enter()
76378                     .append('g')
76379                     .attr('class', 'layer-mapillary-signs')
76380                     .style('display', enabled ? 'block' : 'none')
76381                     .merge(layer);
76382
76383                 if (enabled) {
76384                     if (service && ~~context.map().zoom() >= minZoom) {
76385                         editOn();
76386                         update();
76387                         service.loadSigns(projection);
76388                     } else {
76389                         editOff();
76390                     }
76391                 }
76392             }
76393
76394
76395             drawSigns.enabled = function(_) {
76396                 if (!arguments.length) return svgMapillarySigns.enabled;
76397                 svgMapillarySigns.enabled = _;
76398                 if (svgMapillarySigns.enabled) {
76399                     showLayer();
76400                 } else {
76401                     hideLayer();
76402                 }
76403                 dispatch.call('change');
76404                 return this;
76405             };
76406
76407
76408             drawSigns.supported = function() {
76409                 return !!getService();
76410             };
76411
76412
76413             init();
76414             return drawSigns;
76415         }
76416
76417         function svgOpenstreetcamImages(projection, context, dispatch) {
76418             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
76419             var minZoom = 12;
76420             var minMarkerZoom = 16;
76421             var minViewfieldZoom = 18;
76422             var layer = d3_select(null);
76423             var _openstreetcam;
76424
76425
76426             function init() {
76427                 if (svgOpenstreetcamImages.initialized) return;  // run once
76428                 svgOpenstreetcamImages.enabled = false;
76429                 svgOpenstreetcamImages.initialized = true;
76430             }
76431
76432
76433             function getService() {
76434                 if (services$1.openstreetcam && !_openstreetcam) {
76435                     _openstreetcam = services$1.openstreetcam;
76436                     _openstreetcam.event.on('loadedImages', throttledRedraw);
76437                 } else if (!services$1.openstreetcam && _openstreetcam) {
76438                     _openstreetcam = null;
76439                 }
76440
76441                 return _openstreetcam;
76442             }
76443
76444
76445             function showLayer() {
76446                 var service = getService();
76447                 if (!service) return;
76448
76449                 editOn();
76450
76451                 layer
76452                     .style('opacity', 0)
76453                     .transition()
76454                     .duration(250)
76455                     .style('opacity', 1)
76456                     .on('end', function () { dispatch.call('change'); });
76457             }
76458
76459
76460             function hideLayer() {
76461                 throttledRedraw.cancel();
76462
76463                 layer
76464                     .transition()
76465                     .duration(250)
76466                     .style('opacity', 0)
76467                     .on('end', editOff);
76468             }
76469
76470
76471             function editOn() {
76472                 layer.style('display', 'block');
76473             }
76474
76475
76476             function editOff() {
76477                 layer.selectAll('.viewfield-group').remove();
76478                 layer.style('display', 'none');
76479             }
76480
76481
76482             function click(d) {
76483                 var service = getService();
76484                 if (!service) return;
76485
76486                 service
76487                     .selectImage(d)
76488                     .updateViewer(d)
76489                     .showViewer();
76490
76491                 context.map().centerEase(d.loc);
76492             }
76493
76494
76495             function mouseover(d) {
76496                 var service = getService();
76497                 if (service) service.setStyles(d);
76498             }
76499
76500
76501             function mouseout() {
76502                 var service = getService();
76503                 if (service) service.setStyles(null);
76504             }
76505
76506
76507             function transform(d) {
76508                 var t = svgPointTransform(projection)(d);
76509                 if (d.ca) {
76510                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
76511                 }
76512                 return t;
76513             }
76514
76515
76516             context.photos().on('change.openstreetcam_images', update);
76517
76518             function update() {
76519                 var viewer = d3_select('#photoviewer');
76520                 var selected = viewer.empty() ? undefined : viewer.datum();
76521
76522                 var z = ~~context.map().zoom();
76523                 var showMarkers = (z >= minMarkerZoom);
76524                 var showViewfields = (z >= minViewfieldZoom);
76525
76526                 var service = getService();
76527                 var sequences = [];
76528                 var images = [];
76529
76530                 if (context.photos().showsFlat()) {
76531                     sequences = (service ? service.sequences(projection) : []);
76532                     images = (service && showMarkers ? service.images(projection) : []);
76533                 }
76534
76535                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
76536                     .data(sequences, function(d) { return d.properties.key; });
76537
76538                 // exit
76539                 traces.exit()
76540                     .remove();
76541
76542                 // enter/update
76543                 traces = traces.enter()
76544                     .append('path')
76545                     .attr('class', 'sequence')
76546                     .merge(traces)
76547                     .attr('d', svgPath(projection).geojson);
76548
76549
76550                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
76551                     .data(images, function(d) { return d.key; });
76552
76553                 // exit
76554                 groups.exit()
76555                     .remove();
76556
76557                 // enter
76558                 var groupsEnter = groups.enter()
76559                     .append('g')
76560                     .attr('class', 'viewfield-group')
76561                     .on('mouseenter', mouseover)
76562                     .on('mouseleave', mouseout)
76563                     .on('click', click);
76564
76565                 groupsEnter
76566                     .append('g')
76567                     .attr('class', 'viewfield-scale');
76568
76569                 // update
76570                 var markers = groups
76571                     .merge(groupsEnter)
76572                     .sort(function(a, b) {
76573                         return (a === selected) ? 1
76574                             : (b === selected) ? -1
76575                             : b.loc[1] - a.loc[1];  // sort Y
76576                     })
76577                     .attr('transform', transform)
76578                     .select('.viewfield-scale');
76579
76580
76581                 markers.selectAll('circle')
76582                     .data([0])
76583                     .enter()
76584                     .append('circle')
76585                     .attr('dx', '0')
76586                     .attr('dy', '0')
76587                     .attr('r', '6');
76588
76589                 var viewfields = markers.selectAll('.viewfield')
76590                     .data(showViewfields ? [0] : []);
76591
76592                 viewfields.exit()
76593                     .remove();
76594
76595                 viewfields.enter()               // viewfields may or may not be drawn...
76596                     .insert('path', 'circle')    // but if they are, draw below the circles
76597                     .attr('class', 'viewfield')
76598                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
76599                     .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');
76600             }
76601
76602
76603             function drawImages(selection) {
76604                 var enabled = svgOpenstreetcamImages.enabled,
76605                     service = getService();
76606
76607                 layer = selection.selectAll('.layer-openstreetcam')
76608                     .data(service ? [0] : []);
76609
76610                 layer.exit()
76611                     .remove();
76612
76613                 var layerEnter = layer.enter()
76614                     .append('g')
76615                     .attr('class', 'layer-openstreetcam')
76616                     .style('display', enabled ? 'block' : 'none');
76617
76618                 layerEnter
76619                     .append('g')
76620                     .attr('class', 'sequences');
76621
76622                 layerEnter
76623                     .append('g')
76624                     .attr('class', 'markers');
76625
76626                 layer = layerEnter
76627                     .merge(layer);
76628
76629                 if (enabled) {
76630                     if (service && ~~context.map().zoom() >= minZoom) {
76631                         editOn();
76632                         update();
76633                         service.loadImages(projection);
76634                     } else {
76635                         editOff();
76636                     }
76637                 }
76638             }
76639
76640
76641             drawImages.enabled = function(_) {
76642                 if (!arguments.length) return svgOpenstreetcamImages.enabled;
76643                 svgOpenstreetcamImages.enabled = _;
76644                 if (svgOpenstreetcamImages.enabled) {
76645                     showLayer();
76646                 } else {
76647                     hideLayer();
76648                 }
76649                 dispatch.call('change');
76650                 return this;
76651             };
76652
76653
76654             drawImages.supported = function() {
76655                 return !!getService();
76656             };
76657
76658
76659             init();
76660             return drawImages;
76661         }
76662
76663         function svgOsm(projection, context, dispatch) {
76664             var enabled = true;
76665
76666
76667             function drawOsm(selection) {
76668                 selection.selectAll('.layer-osm')
76669                     .data(['covered', 'areas', 'lines', 'points', 'labels'])
76670                     .enter()
76671                     .append('g')
76672                     .attr('class', function(d) { return 'layer-osm ' + d; });
76673
76674                 selection.selectAll('.layer-osm.points').selectAll('.points-group')
76675                     .data(['points', 'midpoints', 'vertices', 'turns'])
76676                     .enter()
76677                     .append('g')
76678                     .attr('class', function(d) { return 'points-group ' + d; });
76679             }
76680
76681
76682             function showLayer() {
76683                 var layer = context.surface().selectAll('.data-layer.osm');
76684                 layer.interrupt();
76685
76686                 layer
76687                     .classed('disabled', false)
76688                     .style('opacity', 0)
76689                     .transition()
76690                     .duration(250)
76691                     .style('opacity', 1)
76692                     .on('end interrupt', function () {
76693                         dispatch.call('change');
76694                     });
76695             }
76696
76697
76698             function hideLayer() {
76699                 var layer = context.surface().selectAll('.data-layer.osm');
76700                 layer.interrupt();
76701
76702                 layer
76703                     .transition()
76704                     .duration(250)
76705                     .style('opacity', 0)
76706                     .on('end interrupt', function () {
76707                         layer.classed('disabled', true);
76708                         dispatch.call('change');
76709                     });
76710             }
76711
76712
76713             drawOsm.enabled = function(val) {
76714                 if (!arguments.length) return enabled;
76715                 enabled = val;
76716
76717                 if (enabled) {
76718                     showLayer();
76719                 } else {
76720                     hideLayer();
76721                 }
76722
76723                 dispatch.call('change');
76724                 return this;
76725             };
76726
76727
76728             return drawOsm;
76729         }
76730
76731         var _notesEnabled = false;
76732         var _osmService;
76733
76734
76735         function svgNotes(projection, context, dispatch$1) {
76736             if (!dispatch$1) { dispatch$1 = dispatch('change'); }
76737             var throttledRedraw = throttle(function () { dispatch$1.call('change'); }, 1000);
76738             var minZoom = 12;
76739             var touchLayer = d3_select(null);
76740             var drawLayer = d3_select(null);
76741             var _notesVisible = false;
76742
76743
76744             function markerPath(selection, klass) {
76745                 selection
76746                     .attr('class', klass)
76747                     .attr('transform', 'translate(-8, -22)')
76748                     .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');
76749             }
76750
76751
76752             // Loosely-coupled osm service for fetching notes.
76753             function getService() {
76754                 if (services$1.osm && !_osmService) {
76755                     _osmService = services$1.osm;
76756                     _osmService.on('loadedNotes', throttledRedraw);
76757                 } else if (!services$1.osm && _osmService) {
76758                     _osmService = null;
76759                 }
76760
76761                 return _osmService;
76762             }
76763
76764
76765             // Show the notes
76766             function editOn() {
76767                 if (!_notesVisible) {
76768                     _notesVisible = true;
76769                     drawLayer
76770                         .style('display', 'block');
76771                 }
76772             }
76773
76774
76775             // Immediately remove the notes and their touch targets
76776             function editOff() {
76777                 if (_notesVisible) {
76778                     _notesVisible = false;
76779                     drawLayer
76780                         .style('display', 'none');
76781                     drawLayer.selectAll('.note')
76782                         .remove();
76783                     touchLayer.selectAll('.note')
76784                         .remove();
76785                 }
76786             }
76787
76788
76789             // Enable the layer.  This shows the notes and transitions them to visible.
76790             function layerOn() {
76791                 editOn();
76792
76793                 drawLayer
76794                     .style('opacity', 0)
76795                     .transition()
76796                     .duration(250)
76797                     .style('opacity', 1)
76798                     .on('end interrupt', function () {
76799                         dispatch$1.call('change');
76800                     });
76801             }
76802
76803
76804             // Disable the layer.  This transitions the layer invisible and then hides the notes.
76805             function layerOff() {
76806                 throttledRedraw.cancel();
76807                 drawLayer.interrupt();
76808                 touchLayer.selectAll('.note')
76809                     .remove();
76810
76811                 drawLayer
76812                     .transition()
76813                     .duration(250)
76814                     .style('opacity', 0)
76815                     .on('end interrupt', function () {
76816                         editOff();
76817                         dispatch$1.call('change');
76818                     });
76819             }
76820
76821
76822             // Update the note markers
76823             function updateMarkers() {
76824                 if (!_notesVisible || !_notesEnabled) return;
76825
76826                 var service = getService();
76827                 var selectedID = context.selectedNoteID();
76828                 var data = (service ? service.notes(projection) : []);
76829                 var getTransform = svgPointTransform(projection);
76830
76831                 // Draw markers..
76832                 var notes = drawLayer.selectAll('.note')
76833                     .data(data, function(d) { return d.status + d.id; });
76834
76835                 // exit
76836                 notes.exit()
76837                     .remove();
76838
76839                 // enter
76840                 var notesEnter = notes.enter()
76841                     .append('g')
76842                     .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
76843                     .classed('new', function(d) { return d.id < 0; });
76844
76845                 notesEnter
76846                     .append('ellipse')
76847                     .attr('cx', 0.5)
76848                     .attr('cy', 1)
76849                     .attr('rx', 6.5)
76850                     .attr('ry', 3)
76851                     .attr('class', 'stroke');
76852
76853                 notesEnter
76854                     .append('path')
76855                     .call(markerPath, 'shadow');
76856
76857                 notesEnter
76858                     .append('use')
76859                     .attr('class', 'note-fill')
76860                     .attr('width', '20px')
76861                     .attr('height', '20px')
76862                     .attr('x', '-8px')
76863                     .attr('y', '-22px')
76864                     .attr('xlink:href', '#iD-icon-note');
76865
76866                 notesEnter.selectAll('.icon-annotation')
76867                     .data(function(d) { return [d]; })
76868                     .enter()
76869                     .append('use')
76870                     .attr('class', 'icon-annotation')
76871                     .attr('width', '10px')
76872                     .attr('height', '10px')
76873                     .attr('x', '-3px')
76874                     .attr('y', '-19px')
76875                     .attr('xlink:href', function(d) {
76876                         return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
76877                     });
76878
76879                 // update
76880                 notes
76881                     .merge(notesEnter)
76882                     .sort(sortY)
76883                     .classed('selected', function(d) {
76884                         var mode = context.mode();
76885                         var isMoving = mode && mode.id === 'drag-note';  // no shadows when dragging
76886                         return !isMoving && d.id === selectedID;
76887                     })
76888                     .attr('transform', getTransform);
76889
76890
76891                 // Draw targets..
76892                 if (touchLayer.empty()) return;
76893                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
76894
76895                 var targets = touchLayer.selectAll('.note')
76896                     .data(data, function(d) { return d.id; });
76897
76898                 // exit
76899                 targets.exit()
76900                     .remove();
76901
76902                 // enter/update
76903                 targets.enter()
76904                     .append('rect')
76905                     .attr('width', '20px')
76906                     .attr('height', '20px')
76907                     .attr('x', '-8px')
76908                     .attr('y', '-22px')
76909                     .merge(targets)
76910                     .sort(sortY)
76911                     .attr('class', function(d) {
76912                         var newClass = (d.id < 0 ? 'new' : '');
76913                         return 'note target note-' + d.id + ' ' + fillClass + newClass;
76914                     })
76915                     .attr('transform', getTransform);
76916
76917
76918                 function sortY(a, b) {
76919                     return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
76920                 }
76921             }
76922
76923
76924             // Draw the notes layer and schedule loading notes and updating markers.
76925             function drawNotes(selection) {
76926                 var service = getService();
76927
76928                 var surface = context.surface();
76929                 if (surface && !surface.empty()) {
76930                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
76931                 }
76932
76933                 drawLayer = selection.selectAll('.layer-notes')
76934                     .data(service ? [0] : []);
76935
76936                 drawLayer.exit()
76937                     .remove();
76938
76939                 drawLayer = drawLayer.enter()
76940                     .append('g')
76941                     .attr('class', 'layer-notes')
76942                     .style('display', _notesEnabled ? 'block' : 'none')
76943                     .merge(drawLayer);
76944
76945                 if (_notesEnabled) {
76946                     if (service && ~~context.map().zoom() >= minZoom) {
76947                         editOn();
76948                         service.loadNotes(projection);
76949                         updateMarkers();
76950                     } else {
76951                         editOff();
76952                     }
76953                 }
76954             }
76955
76956
76957             // Toggles the layer on and off
76958             drawNotes.enabled = function(val) {
76959                 if (!arguments.length) return _notesEnabled;
76960
76961                 _notesEnabled = val;
76962                 if (_notesEnabled) {
76963                     layerOn();
76964                 } else {
76965                     layerOff();
76966                     if (context.selectedNoteID()) {
76967                         context.enter(modeBrowse(context));
76968                     }
76969                 }
76970
76971                 dispatch$1.call('change');
76972                 return this;
76973             };
76974
76975
76976             return drawNotes;
76977         }
76978
76979         function svgTouch() {
76980
76981             function drawTouch(selection) {
76982                 selection.selectAll('.layer-touch')
76983                     .data(['areas', 'lines', 'points', 'turns', 'markers'])
76984                     .enter()
76985                     .append('g')
76986                     .attr('class', function(d) { return 'layer-touch ' + d; });
76987             }
76988
76989             return drawTouch;
76990         }
76991
76992         function svgLayers(projection, context) {
76993             var dispatch$1 = dispatch('change');
76994             var svg = d3_select(null);
76995             var _layers = [
76996                 { id: 'osm', layer: svgOsm(projection, context, dispatch$1) },
76997                 { id: 'notes', layer: svgNotes(projection, context, dispatch$1) },
76998                 { id: 'data', layer: svgData(projection, context, dispatch$1) },
76999                 { id: 'keepRight', layer: svgKeepRight(projection, context, dispatch$1) },
77000                 { id: 'improveOSM', layer: svgImproveOSM(projection, context, dispatch$1) },
77001                 { id: 'streetside', layer: svgStreetside(projection, context, dispatch$1)},
77002                 { id: 'mapillary', layer: svgMapillaryImages(projection, context, dispatch$1) },
77003                 { id: 'mapillary-signs',  layer: svgMapillarySigns(projection, context, dispatch$1) },
77004                 { id: 'openstreetcam', layer: svgOpenstreetcamImages(projection, context, dispatch$1) },
77005                 { id: 'debug', layer: svgDebug(projection, context) },
77006                 { id: 'geolocate', layer: svgGeolocate(projection) },
77007                 { id: 'touch', layer: svgTouch() }
77008             ];
77009
77010
77011             function drawLayers(selection) {
77012                 svg = selection.selectAll('.surface')
77013                     .data([0]);
77014
77015                 svg = svg.enter()
77016                     .append('svg')
77017                     .attr('class', 'surface')
77018                     .merge(svg);
77019
77020                 var defs = svg.selectAll('.surface-defs')
77021                     .data([0]);
77022
77023                 defs.enter()
77024                     .append('defs')
77025                     .attr('class', 'surface-defs');
77026
77027                 var groups = svg.selectAll('.data-layer')
77028                     .data(_layers);
77029
77030                 groups.exit()
77031                     .remove();
77032
77033                 groups.enter()
77034                     .append('g')
77035                     .attr('class', function(d) { return 'data-layer ' + d.id; })
77036                     .merge(groups)
77037                     .each(function(d) { d3_select(this).call(d.layer); });
77038             }
77039
77040
77041             drawLayers.all = function() {
77042                 return _layers;
77043             };
77044
77045
77046             drawLayers.layer = function(id) {
77047                 var obj = _layers.find(function(o) { return o.id === id; });
77048                 return obj && obj.layer;
77049             };
77050
77051
77052             drawLayers.only = function(what) {
77053                 var arr = [].concat(what);
77054                 var all = _layers.map(function(layer) { return layer.id; });
77055                 return drawLayers.remove(utilArrayDifference(all, arr));
77056             };
77057
77058
77059             drawLayers.remove = function(what) {
77060                 var arr = [].concat(what);
77061                 arr.forEach(function(id) {
77062                     _layers = _layers.filter(function(o) { return o.id !== id; });
77063                 });
77064                 dispatch$1.call('change');
77065                 return this;
77066             };
77067
77068
77069             drawLayers.add = function(what) {
77070                 var arr = [].concat(what);
77071                 arr.forEach(function(obj) {
77072                     if ('id' in obj && 'layer' in obj) {
77073                         _layers.push(obj);
77074                     }
77075                 });
77076                 dispatch$1.call('change');
77077                 return this;
77078             };
77079
77080
77081             drawLayers.dimensions = function(val) {
77082                 if (!arguments.length) return utilGetDimensions(svg);
77083                 utilSetDimensions(svg, val);
77084                 return this;
77085             };
77086
77087
77088             return utilRebind(drawLayers, dispatch$1, 'on');
77089         }
77090
77091         function svgLines(projection, context) {
77092             var detected = utilDetect();
77093
77094             var highway_stack = {
77095                 motorway: 0,
77096                 motorway_link: 1,
77097                 trunk: 2,
77098                 trunk_link: 3,
77099                 primary: 4,
77100                 primary_link: 5,
77101                 secondary: 6,
77102                 tertiary: 7,
77103                 unclassified: 8,
77104                 residential: 9,
77105                 service: 10,
77106                 footway: 11
77107             };
77108
77109
77110             function drawTargets(selection, graph, entities, filter) {
77111                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77112                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
77113                 var getPath = svgPath(projection).geojson;
77114                 var activeID = context.activeID();
77115
77116                 // The targets and nopes will be MultiLineString sub-segments of the ways
77117                 var data = { targets: [], nopes: [] };
77118
77119                 entities.forEach(function(way) {
77120                     var features = svgSegmentWay(way, graph, activeID);
77121                     data.targets.push.apply(data.targets, features.passive);
77122                     data.nopes.push.apply(data.nopes, features.active);
77123                 });
77124
77125
77126                 // Targets allow hover and vertex snapping
77127                 var targetData = data.targets.filter(getPath);
77128                 var targets = selection.selectAll('.line.target-allowed')
77129                     .filter(function(d) { return filter(d.properties.entity); })
77130                     .data(targetData, function key(d) { return d.id; });
77131
77132                 // exit
77133                 targets.exit()
77134                     .remove();
77135
77136                 // enter/update
77137                 targets.enter()
77138                     .append('path')
77139                     .merge(targets)
77140                     .attr('d', getPath)
77141                     .attr('class', function(d) { return 'way line target target-allowed ' + targetClass + d.id; });
77142
77143
77144                 // NOPE
77145                 var nopeData = data.nopes.filter(getPath);
77146                 var nopes = selection.selectAll('.line.target-nope')
77147                     .filter(function(d) { return filter(d.properties.entity); })
77148                     .data(nopeData, function key(d) { return d.id; });
77149
77150                 // exit
77151                 nopes.exit()
77152                     .remove();
77153
77154                 // enter/update
77155                 nopes.enter()
77156                     .append('path')
77157                     .merge(nopes)
77158                     .attr('d', getPath)
77159                     .attr('class', function(d) { return 'way line target target-nope ' + nopeClass + d.id; });
77160             }
77161
77162
77163             function drawLines(selection, graph, entities, filter) {
77164
77165                 function waystack(a, b) {
77166                     var selected = context.selectedIDs();
77167                     var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
77168                     var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
77169
77170                     if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
77171                     if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
77172                     return scoreA - scoreB;
77173                 }
77174
77175
77176                 function drawLineGroup(selection, klass, isSelected) {
77177                     // Note: Don't add `.selected` class in draw modes
77178                     var mode = context.mode();
77179                     var isDrawing = mode && /^draw/.test(mode.id);
77180                     var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
77181
77182                     var lines = selection
77183                         .selectAll('path')
77184                         .filter(filter)
77185                         .data(getPathData(isSelected), osmEntity.key);
77186
77187                     lines.exit()
77188                         .remove();
77189
77190                     // Optimization: Call expensive TagClasses only on enter selection. This
77191                     // works because osmEntity.key is defined to include the entity v attribute.
77192                     lines.enter()
77193                         .append('path')
77194                         .attr('class', function(d) {
77195
77196                             var prefix = 'way line';
77197                             if (!d.hasInterestingTags() && graph.parentMultipolygons(d).length > 0) {
77198                                 // fudge the classes to style multipolygon member lines as area edges
77199                                 prefix = 'relation area';
77200                             }
77201
77202                             var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
77203                             return prefix + ' ' + klass + ' ' + selectedClass + oldMPClass + d.id;
77204                         })
77205                         .call(svgTagClasses())
77206                         .merge(lines)
77207                         .sort(waystack)
77208                         .attr('d', getPath)
77209                         .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
77210
77211                     return selection;
77212                 }
77213
77214
77215                 function getPathData(isSelected) {
77216                     return function() {
77217                         var layer = this.parentNode.__data__;
77218                         var data = pathdata[layer] || [];
77219                         return data.filter(function(d) {
77220                             if (isSelected)
77221                                 return context.selectedIDs().indexOf(d.id) !== -1;
77222                             else
77223                                 return context.selectedIDs().indexOf(d.id) === -1;
77224                         });
77225                     };
77226                 }
77227
77228                 function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
77229                     var markergroup = layergroup
77230                         .selectAll('g.' + groupclass)
77231                         .data([pathclass]);
77232
77233                     markergroup = markergroup.enter()
77234                         .append('g')
77235                         .attr('class', groupclass)
77236                         .merge(markergroup);
77237
77238                     var markers = markergroup
77239                         .selectAll('path')
77240                         .filter(filter)
77241                         .data(
77242                             function data() { return groupdata[this.parentNode.__data__] || []; },
77243                             function key(d) { return [d.id, d.index]; }
77244                         );
77245
77246                     markers.exit()
77247                         .remove();
77248
77249                     markers = markers.enter()
77250                         .append('path')
77251                         .attr('class', pathclass)
77252                         .merge(markers)
77253                         .attr('marker-mid', marker)
77254                         .attr('d', function(d) { return d.d; });
77255
77256                     if (detected.ie) {
77257                         markers.each(function() { this.parentNode.insertBefore(this, this); });
77258                     }
77259                 }
77260
77261
77262                 var getPath = svgPath(projection, graph);
77263                 var ways = [];
77264                 var onewaydata = {};
77265                 var sideddata = {};
77266                 var oldMultiPolygonOuters = {};
77267
77268                 for (var i = 0; i < entities.length; i++) {
77269                     var entity = entities[i];
77270                     var outer = osmOldMultipolygonOuterMember(entity, graph);
77271                     if (outer) {
77272                         ways.push(entity.mergeTags(outer.tags));
77273                         oldMultiPolygonOuters[outer.id] = true;
77274                     } else if (entity.geometry(graph) === 'line') {
77275                         ways.push(entity);
77276                     }
77277                 }
77278
77279                 ways = ways.filter(getPath);
77280                 var pathdata = utilArrayGroupBy(ways, function(way) { return way.layer(); });
77281
77282                 Object.keys(pathdata).forEach(function(k) {
77283                     var v = pathdata[k];
77284                     var onewayArr = v.filter(function(d) { return d.isOneWay(); });
77285                     var onewaySegments = svgMarkerSegments(
77286                         projection, graph, 35,
77287                         function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
77288                         function bothDirections(entity) {
77289                             return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
77290                         }
77291                     );
77292                     onewaydata[k] = utilArrayFlatten(onewayArr.map(onewaySegments));
77293
77294                     var sidedArr = v.filter(function(d) { return d.isSided(); });
77295                     var sidedSegments = svgMarkerSegments(
77296                         projection, graph, 30,
77297                         function shouldReverse() { return false; },
77298                         function bothDirections() { return false; }
77299                     );
77300                     sideddata[k] = utilArrayFlatten(sidedArr.map(sidedSegments));
77301                 });
77302
77303
77304                 var covered = selection.selectAll('.layer-osm.covered');     // under areas
77305                 var uncovered = selection.selectAll('.layer-osm.lines');     // over areas
77306                 var touchLayer = selection.selectAll('.layer-touch.lines');
77307
77308                 // Draw lines..
77309                 [covered, uncovered].forEach(function(selection) {
77310                     var range = (selection === covered ? d3_range(-10,0) : d3_range(0,11));
77311                     var layergroup = selection
77312                         .selectAll('g.layergroup')
77313                         .data(range);
77314
77315                     layergroup = layergroup.enter()
77316                         .append('g')
77317                         .attr('class', function(d) { return 'layergroup layer' + String(d); })
77318                         .merge(layergroup);
77319
77320                     layergroup
77321                         .selectAll('g.linegroup')
77322                         .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
77323                         .enter()
77324                         .append('g')
77325                         .attr('class', function(d) { return 'linegroup line-' + d; });
77326
77327                     layergroup.selectAll('g.line-shadow')
77328                         .call(drawLineGroup, 'shadow', false);
77329                     layergroup.selectAll('g.line-casing')
77330                         .call(drawLineGroup, 'casing', false);
77331                     layergroup.selectAll('g.line-stroke')
77332                         .call(drawLineGroup, 'stroke', false);
77333
77334                     layergroup.selectAll('g.line-shadow-highlighted')
77335                         .call(drawLineGroup, 'shadow', true);
77336                     layergroup.selectAll('g.line-casing-highlighted')
77337                         .call(drawLineGroup, 'casing', true);
77338                     layergroup.selectAll('g.line-stroke-highlighted')
77339                         .call(drawLineGroup, 'stroke', true);
77340
77341                     addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
77342                     addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
77343                         function marker(d) {
77344                             var category = graph.entity(d.id).sidednessIdentifier();
77345                             return 'url(#sided-marker-' + category + ')';
77346                         }
77347                     );
77348                 });
77349
77350                 // Draw touch targets..
77351                 touchLayer
77352                     .call(drawTargets, graph, ways, filter);
77353             }
77354
77355
77356             return drawLines;
77357         }
77358
77359         function svgMidpoints(projection, context) {
77360             var targetRadius = 8;
77361
77362             function drawTargets(selection, graph, entities, filter) {
77363                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77364                 var getTransform = svgPointTransform(projection).geojson;
77365
77366                 var data = entities.map(function(midpoint) {
77367                     return {
77368                         type: 'Feature',
77369                         id: midpoint.id,
77370                         properties: {
77371                             target: true,
77372                             entity: midpoint
77373                         },
77374                         geometry: {
77375                             type: 'Point',
77376                             coordinates: midpoint.loc
77377                         }
77378                     };
77379                 });
77380
77381                 var targets = selection.selectAll('.midpoint.target')
77382                     .filter(function(d) { return filter(d.properties.entity); })
77383                     .data(data, function key(d) { return d.id; });
77384
77385                 // exit
77386                 targets.exit()
77387                     .remove();
77388
77389                 // enter/update
77390                 targets.enter()
77391                     .append('circle')
77392                     .attr('r', targetRadius)
77393                     .merge(targets)
77394                     .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
77395                     .attr('transform', getTransform);
77396             }
77397
77398
77399             function drawMidpoints(selection, graph, entities, filter, extent) {
77400                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
77401                 var touchLayer = selection.selectAll('.layer-touch.points');
77402
77403                 var mode = context.mode();
77404                 if (mode && mode.id !== 'select') {
77405                     drawLayer.selectAll('.midpoint').remove();
77406                     touchLayer.selectAll('.midpoint.target').remove();
77407                     return;
77408                 }
77409
77410                 var poly = extent.polygon();
77411                 var midpoints = {};
77412
77413                 for (var i = 0; i < entities.length; i++) {
77414                     var entity = entities[i];
77415
77416                     if (entity.type !== 'way') continue;
77417                     if (!filter(entity)) continue;
77418                     if (context.selectedIDs().indexOf(entity.id) < 0) continue;
77419
77420                     var nodes = graph.childNodes(entity);
77421                     for (var j = 0; j < nodes.length - 1; j++) {
77422                         var a = nodes[j];
77423                         var b = nodes[j + 1];
77424                         var id = [a.id, b.id].sort().join('-');
77425
77426                         if (midpoints[id]) {
77427                             midpoints[id].parents.push(entity);
77428                         } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
77429                             var point = geoVecInterp(a.loc, b.loc, 0.5);
77430                             var loc = null;
77431
77432                             if (extent.intersects(point)) {
77433                                 loc = point;
77434                             } else {
77435                                 for (var k = 0; k < 4; k++) {
77436                                     point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
77437                                     if (point &&
77438                                         geoVecLength(projection(a.loc), projection(point)) > 20 &&
77439                                         geoVecLength(projection(b.loc), projection(point)) > 20)
77440                                     {
77441                                         loc = point;
77442                                         break;
77443                                     }
77444                                 }
77445                             }
77446
77447                             if (loc) {
77448                                 midpoints[id] = {
77449                                     type: 'midpoint',
77450                                     id: id,
77451                                     loc: loc,
77452                                     edge: [a.id, b.id],
77453                                     parents: [entity]
77454                                 };
77455                             }
77456                         }
77457                     }
77458                 }
77459
77460
77461                 function midpointFilter(d) {
77462                     if (midpoints[d.id])
77463                         return true;
77464
77465                     for (var i = 0; i < d.parents.length; i++) {
77466                         if (filter(d.parents[i])) {
77467                             return true;
77468                         }
77469                     }
77470
77471                     return false;
77472                 }
77473
77474
77475                 var groups = drawLayer.selectAll('.midpoint')
77476                     .filter(midpointFilter)
77477                     .data(Object.values(midpoints), function(d) { return d.id; });
77478
77479                 groups.exit()
77480                     .remove();
77481
77482                 var enter = groups.enter()
77483                     .insert('g', ':first-child')
77484                     .attr('class', 'midpoint');
77485
77486                 enter
77487                     .append('polygon')
77488                     .attr('points', '-6,8 10,0 -6,-8')
77489                     .attr('class', 'shadow');
77490
77491                 enter
77492                     .append('polygon')
77493                     .attr('points', '-3,4 5,0 -3,-4')
77494                     .attr('class', 'fill');
77495
77496                 groups = groups
77497                     .merge(enter)
77498                     .attr('transform', function(d) {
77499                         var translate = svgPointTransform(projection);
77500                         var a = graph.entity(d.edge[0]);
77501                         var b = graph.entity(d.edge[1]);
77502                         var angle = geoAngle(a, b, projection) * (180 / Math.PI);
77503                         return translate(d) + ' rotate(' + angle + ')';
77504                     })
77505                     .call(svgTagClasses().tags(
77506                         function(d) { return d.parents[0].tags; }
77507                     ));
77508
77509                 // Propagate data bindings.
77510                 groups.select('polygon.shadow');
77511                 groups.select('polygon.fill');
77512
77513
77514                 // Draw touch targets..
77515                 touchLayer
77516                     .call(drawTargets, graph, Object.values(midpoints), midpointFilter);
77517             }
77518
77519             return drawMidpoints;
77520         }
77521
77522         function svgPoints(projection, context) {
77523
77524             function markerPath(selection, klass) {
77525                 selection
77526                     .attr('class', klass)
77527                     .attr('transform', 'translate(-8, -23)')
77528                     .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');
77529             }
77530
77531             function sortY(a, b) {
77532                 return b.loc[1] - a.loc[1];
77533             }
77534
77535
77536             // Avoid exit/enter if we're just moving stuff around.
77537             // The node will get a new version but we only need to run the update selection.
77538             function fastEntityKey(d) {
77539                 var mode = context.mode();
77540                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
77541                 return isMoving ? d.id : osmEntity.key(d);
77542             }
77543
77544
77545             function drawTargets(selection, graph, entities, filter) {
77546                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77547                 var getTransform = svgPointTransform(projection).geojson;
77548                 var activeID = context.activeID();
77549                 var data = [];
77550
77551                 entities.forEach(function(node) {
77552                     if (activeID === node.id) return;   // draw no target on the activeID
77553
77554                     data.push({
77555                         type: 'Feature',
77556                         id: node.id,
77557                         properties: {
77558                             target: true,
77559                             entity: node
77560                         },
77561                         geometry: node.asGeoJSON()
77562                     });
77563                 });
77564
77565                 var targets = selection.selectAll('.point.target')
77566                     .filter(function(d) { return filter(d.properties.entity); })
77567                     .data(data, function key(d) { return d.id; });
77568
77569                 // exit
77570                 targets.exit()
77571                     .remove();
77572
77573                 // enter/update
77574                 targets.enter()
77575                     .append('rect')
77576                     .attr('x', -10)
77577                     .attr('y', -26)
77578                     .attr('width', 20)
77579                     .attr('height', 30)
77580                     .merge(targets)
77581                     .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
77582                     .attr('transform', getTransform);
77583             }
77584
77585
77586             function drawPoints(selection, graph, entities, filter) {
77587                 var wireframe = context.surface().classed('fill-wireframe');
77588                 var zoom = geoScaleToZoom(projection.scale());
77589
77590                 // Points with a direction will render as vertices at higher zooms..
77591                 function renderAsPoint(entity) {
77592                     return entity.geometry(graph) === 'point' &&
77593                         !(zoom >= 18 && entity.directions(graph, projection).length);
77594                 }
77595
77596                 // All points will render as vertices in wireframe mode too..
77597                 var points = wireframe ? [] : entities.filter(renderAsPoint);
77598                 points.sort(sortY);
77599
77600
77601                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
77602                 var touchLayer = selection.selectAll('.layer-touch.points');
77603
77604                 // Draw points..
77605                 var groups = drawLayer.selectAll('g.point')
77606                     .filter(filter)
77607                     .data(points, fastEntityKey);
77608
77609                 groups.exit()
77610                     .remove();
77611
77612                 var enter = groups.enter()
77613                     .append('g')
77614                     .attr('class', function(d) { return 'node point ' + d.id; })
77615                     .order();
77616
77617                 enter
77618                     .append('path')
77619                     .call(markerPath, 'shadow');
77620
77621                 enter
77622                     .append('ellipse')
77623                     .attr('cx', 0.5)
77624                     .attr('cy', 1)
77625                     .attr('rx', 6.5)
77626                     .attr('ry', 3)
77627                     .attr('class', 'stroke');
77628
77629                 enter
77630                     .append('path')
77631                     .call(markerPath, 'stroke');
77632
77633                 enter
77634                     .append('use')
77635                     .attr('transform', 'translate(-5, -19)')
77636                     .attr('class', 'icon')
77637                     .attr('width', '11px')
77638                     .attr('height', '11px');
77639
77640                 groups = groups
77641                     .merge(enter)
77642                     .attr('transform', svgPointTransform(projection))
77643                     .call(svgTagClasses());
77644
77645                 groups.select('.shadow');   // propagate bound data
77646                 groups.select('.stroke');   // propagate bound data
77647                 groups.select('.icon')      // propagate bound data
77648                     .attr('xlink:href', function(entity) {
77649                         var preset = context.presets().match(entity, graph);
77650                         var picon = preset && preset.icon;
77651
77652                         if (!picon) {
77653                             return '';
77654                         } else {
77655                             var isMaki = /^maki-/.test(picon);
77656                             return '#' + picon + (isMaki ? '-11' : '');
77657                         }
77658                     });
77659
77660
77661                 // Draw touch targets..
77662                 touchLayer
77663                     .call(drawTargets, graph, points, filter);
77664             }
77665
77666
77667             return drawPoints;
77668         }
77669
77670         function svgTurns(projection, context) {
77671
77672             function icon(turn) {
77673                 var u = turn.u ? '-u' : '';
77674                 if (turn.no) return '#iD-turn-no' + u;
77675                 if (turn.only) return '#iD-turn-only' + u;
77676                 return '#iD-turn-yes' + u;
77677             }
77678
77679             function drawTurns(selection, graph, turns) {
77680
77681                 function turnTransform(d) {
77682                     var pxRadius = 50;
77683                     var toWay = graph.entity(d.to.way);
77684                     var toPoints = graph.childNodes(toWay)
77685                         .map(function (n) { return n.loc; })
77686                         .map(projection);
77687                     var toLength = geoPathLength(toPoints);
77688                     var mid = toLength / 2;    // midpoint of destination way
77689
77690                     var toNode = graph.entity(d.to.node);
77691                     var toVertex = graph.entity(d.to.vertex);
77692                     var a = geoAngle(toVertex, toNode, projection);
77693                     var o = projection(toVertex.loc);
77694                     var r = d.u ? 0                  // u-turn: no radius
77695                         : !toWay.__via ? pxRadius    // leaf way: put marker at pxRadius
77696                         : Math.min(mid, pxRadius);   // via way: prefer pxRadius, fallback to mid for very short ways
77697
77698                     return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
77699                         'rotate(' + a * 180 / Math.PI + ')';
77700                 }
77701
77702
77703                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
77704                 var touchLayer = selection.selectAll('.layer-touch.turns');
77705
77706                 // Draw turns..
77707                 var groups = drawLayer.selectAll('g.turn')
77708                     .data(turns, function(d) { return d.key; });
77709
77710                 // exit
77711                 groups.exit()
77712                     .remove();
77713
77714                 // enter
77715                 var groupsEnter = groups.enter()
77716                     .append('g')
77717                     .attr('class', function(d) { return 'turn ' + d.key; });
77718
77719                 var turnsEnter = groupsEnter
77720                     .filter(function(d) { return !d.u; });
77721
77722                 turnsEnter.append('rect')
77723                     .attr('transform', 'translate(-22, -12)')
77724                     .attr('width', '44')
77725                     .attr('height', '24');
77726
77727                 turnsEnter.append('use')
77728                     .attr('transform', 'translate(-22, -12)')
77729                     .attr('width', '44')
77730                     .attr('height', '24');
77731
77732                 var uEnter = groupsEnter
77733                     .filter(function(d) { return d.u; });
77734
77735                 uEnter.append('circle')
77736                     .attr('r', '16');
77737
77738                 uEnter.append('use')
77739                     .attr('transform', 'translate(-16, -16)')
77740                     .attr('width', '32')
77741                     .attr('height', '32');
77742
77743                 // update
77744                 groups = groups
77745                     .merge(groupsEnter)
77746                     .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
77747                     .attr('transform', turnTransform);
77748
77749                 groups.select('use')
77750                     .attr('xlink:href', icon);
77751
77752                 groups.select('rect');      // propagate bound data
77753                 groups.select('circle');    // propagate bound data
77754
77755
77756                 // Draw touch targets..
77757                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77758                 groups = touchLayer.selectAll('g.turn')
77759                     .data(turns, function(d) { return d.key; });
77760
77761                 // exit
77762                 groups.exit()
77763                     .remove();
77764
77765                 // enter
77766                 groupsEnter = groups.enter()
77767                     .append('g')
77768                     .attr('class', function(d) { return 'turn ' + d.key; });
77769
77770                 turnsEnter = groupsEnter
77771                     .filter(function(d) { return !d.u; });
77772
77773                 turnsEnter.append('rect')
77774                     .attr('class', 'target ' + fillClass)
77775                     .attr('transform', 'translate(-22, -12)')
77776                     .attr('width', '44')
77777                     .attr('height', '24');
77778
77779                 uEnter = groupsEnter
77780                     .filter(function(d) { return d.u; });
77781
77782                 uEnter.append('circle')
77783                     .attr('class', 'target ' + fillClass)
77784                     .attr('r', '16');
77785
77786                 // update
77787                 groups = groups
77788                     .merge(groupsEnter)
77789                     .attr('transform', turnTransform);
77790
77791                 groups.select('rect');      // propagate bound data
77792                 groups.select('circle');    // propagate bound data
77793
77794
77795                 return this;
77796             }
77797
77798             return drawTurns;
77799         }
77800
77801         function svgVertices(projection, context) {
77802             var radiuses = {
77803                 //       z16-, z17,   z18+,  w/icon
77804                 shadow: [6,    7.5,   7.5,   12],
77805                 stroke: [2.5,  3.5,   3.5,   8],
77806                 fill:   [1,    1.5,   1.5,   1.5]
77807             };
77808
77809             var _currHoverTarget;
77810             var _currPersistent = {};
77811             var _currHover = {};
77812             var _prevHover = {};
77813             var _currSelected = {};
77814             var _prevSelected = {};
77815             var _radii = {};
77816
77817
77818             function sortY(a, b) {
77819                 return b.loc[1] - a.loc[1];
77820             }
77821
77822             // Avoid exit/enter if we're just moving stuff around.
77823             // The node will get a new version but we only need to run the update selection.
77824             function fastEntityKey(d) {
77825                 var mode = context.mode();
77826                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
77827                 return isMoving ? d.id : osmEntity.key(d);
77828             }
77829
77830
77831             function draw(selection, graph, vertices, sets, filter) {
77832                 sets = sets || { selected: {}, important: {}, hovered: {} };
77833
77834                 var icons = {};
77835                 var directions = {};
77836                 var wireframe = context.surface().classed('fill-wireframe');
77837                 var zoom = geoScaleToZoom(projection.scale());
77838                 var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
77839                 var activeID = context.activeID();
77840
77841
77842                 function getIcon(d) {
77843                     // always check latest entity, as fastEntityKey avoids enter/exit now
77844                     var entity = graph.entity(d.id);
77845                     if (entity.id in icons) return icons[entity.id];
77846
77847                     icons[entity.id] =
77848                         entity.hasInterestingTags() &&
77849                         context.presets().match(entity, graph).icon;
77850
77851                     return icons[entity.id];
77852                 }
77853
77854
77855                 // memoize directions results, return false for empty arrays (for use in filter)
77856                 function getDirections(entity) {
77857                     if (entity.id in directions) return directions[entity.id];
77858
77859                     var angles = entity.directions(graph, projection);
77860                     directions[entity.id] = angles.length ? angles : false;
77861                     return angles;
77862                 }
77863
77864
77865                 function updateAttributes(selection) {
77866                     ['shadow', 'stroke', 'fill'].forEach(function(klass) {
77867                         var rads = radiuses[klass];
77868                         selection.selectAll('.' + klass)
77869                             .each(function(entity) {
77870                                 var i = z && getIcon(entity);
77871                                 var r = rads[i ? 3 : z];
77872
77873                                 // slightly increase the size of unconnected endpoints #3775
77874                                 if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
77875                                     r += 1.5;
77876                                 }
77877
77878                                 if (klass === 'shadow') {   // remember this value, so we don't need to
77879                                     _radii[entity.id] = r;  // recompute it when we draw the touch targets
77880                                 }
77881
77882                                 d3_select(this)
77883                                     .attr('r', r)
77884                                     .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
77885                             });
77886                     });
77887                 }
77888
77889                 vertices.sort(sortY);
77890
77891                 var groups = selection.selectAll('g.vertex')
77892                     .filter(filter)
77893                     .data(vertices, fastEntityKey);
77894
77895                 // exit
77896                 groups.exit()
77897                     .remove();
77898
77899                 // enter
77900                 var enter = groups.enter()
77901                     .append('g')
77902                     .attr('class', function(d) { return 'node vertex ' + d.id; })
77903                     .order();
77904
77905                 enter
77906                     .append('circle')
77907                     .attr('class', 'shadow');
77908
77909                 enter
77910                     .append('circle')
77911                     .attr('class', 'stroke');
77912
77913                 // Vertices with tags get a fill.
77914                 enter.filter(function(d) { return d.hasInterestingTags(); })
77915                     .append('circle')
77916                     .attr('class', 'fill');
77917
77918                 // update
77919                 groups = groups
77920                     .merge(enter)
77921                     .attr('transform', svgPointTransform(projection))
77922                     .classed('sibling', function(d) { return d.id in sets.selected; })
77923                     .classed('shared', function(d) { return graph.isShared(d); })
77924                     .classed('endpoint', function(d) { return d.isEndpoint(graph); })
77925                     .call(updateAttributes);
77926
77927
77928                 // Vertices with icons get a `use`.
77929                 var iconUse = groups
77930                     .selectAll('.icon')
77931                     .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
77932
77933                 // exit
77934                 iconUse.exit()
77935                     .remove();
77936
77937                 // enter
77938                 iconUse.enter()
77939                     .append('use')
77940                     .attr('class', 'icon')
77941                     .attr('width', '11px')
77942                     .attr('height', '11px')
77943                     .attr('transform', 'translate(-5.5, -5.5)')
77944                     .attr('xlink:href', function(d) {
77945                         var picon = getIcon(d);
77946                         var isMaki = /^maki-/.test(picon);
77947                         return '#' + picon + (isMaki ? '-11' : '');
77948                     });
77949
77950
77951                 // Vertices with directions get viewfields
77952                 var dgroups = groups
77953                     .selectAll('.viewfieldgroup')
77954                     .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
77955
77956                 // exit
77957                 dgroups.exit()
77958                     .remove();
77959
77960                 // enter/update
77961                 dgroups = dgroups.enter()
77962                     .insert('g', '.shadow')
77963                     .attr('class', 'viewfieldgroup')
77964                     .merge(dgroups);
77965
77966                 var viewfields = dgroups.selectAll('.viewfield')
77967                     .data(getDirections, function key(d) { return osmEntity.key(d); });
77968
77969                 // exit
77970                 viewfields.exit()
77971                     .remove();
77972
77973                 // enter/update
77974                 viewfields.enter()
77975                     .append('path')
77976                     .attr('class', 'viewfield')
77977                     .attr('d', 'M0,0H0')
77978                     .merge(viewfields)
77979                     .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
77980                     .attr('transform', function(d) { return 'rotate(' + d + ')'; });
77981             }
77982
77983
77984             function drawTargets(selection, graph, entities, filter) {
77985                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77986                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
77987                 var getTransform = svgPointTransform(projection).geojson;
77988                 var activeID = context.activeID();
77989                 var data = { targets: [], nopes: [] };
77990
77991                 entities.forEach(function(node) {
77992                     if (activeID === node.id) return;   // draw no target on the activeID
77993
77994                     var vertexType = svgPassiveVertex(node, graph, activeID);
77995                     if (vertexType !== 0) {     // passive or adjacent - allow to connect
77996                         data.targets.push({
77997                             type: 'Feature',
77998                             id: node.id,
77999                             properties: {
78000                                 target: true,
78001                                 entity: node
78002                             },
78003                             geometry: node.asGeoJSON()
78004                         });
78005                     } else {
78006                         data.nopes.push({
78007                             type: 'Feature',
78008                             id: node.id + '-nope',
78009                             properties: {
78010                                 nope: true,
78011                                 target: true,
78012                                 entity: node
78013                             },
78014                             geometry: node.asGeoJSON()
78015                         });
78016                     }
78017                 });
78018
78019
78020                 // Targets allow hover and vertex snapping
78021                 var targets = selection.selectAll('.vertex.target-allowed')
78022                     .filter(function(d) { return filter(d.properties.entity); })
78023                     .data(data.targets, function key(d) { return d.id; });
78024
78025                 // exit
78026                 targets.exit()
78027                     .remove();
78028
78029                 // enter/update
78030                 targets.enter()
78031                     .append('circle')
78032                     .attr('r', function(d) { return (_radii[d.id] || radiuses.shadow[3]); })
78033                     .merge(targets)
78034                     .attr('class', function(d) { return 'node vertex target target-allowed ' + targetClass + d.id; })
78035                     .attr('transform', getTransform);
78036
78037
78038                 // NOPE
78039                 var nopes = selection.selectAll('.vertex.target-nope')
78040                     .filter(function(d) { return filter(d.properties.entity); })
78041                     .data(data.nopes, function key(d) { return d.id; });
78042
78043                 // exit
78044                 nopes.exit()
78045                     .remove();
78046
78047                 // enter/update
78048                 nopes.enter()
78049                     .append('circle')
78050                     .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
78051                     .merge(nopes)
78052                     .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
78053                     .attr('transform', getTransform);
78054             }
78055
78056
78057             // Points can also render as vertices:
78058             // 1. in wireframe mode or
78059             // 2. at higher zooms if they have a direction
78060             function renderAsVertex(entity, graph, wireframe, zoom) {
78061                 var geometry = entity.geometry(graph);
78062                 return geometry === 'vertex' || (geometry === 'point' && (
78063                     wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
78064                 ));
78065             }
78066
78067
78068             function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
78069                 var results = {};
78070
78071                 function addChildVertices(entity) {
78072                     var geometry = entity.geometry(graph);
78073                     if (!context.features().isHiddenFeature(entity, graph, geometry)) {
78074                         var i;
78075                         if (entity.type === 'way') {
78076                             for (i = 0; i < entity.nodes.length; i++) {
78077                                 var child = graph.hasEntity(entity.nodes[i]);
78078                                 if (child) {
78079                                     addChildVertices(child);
78080                                 }
78081                             }
78082                         } else if (entity.type === 'relation') {
78083                             for (i = 0; i < entity.members.length; i++) {
78084                                 var member = graph.hasEntity(entity.members[i].id);
78085                                 if (member) {
78086                                     addChildVertices(member);
78087                                 }
78088                             }
78089                         } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
78090                             results[entity.id] = entity;
78091                         }
78092                     }
78093                 }
78094
78095                 ids.forEach(function(id) {
78096                     var entity = graph.hasEntity(id);
78097                     if (!entity) return;
78098
78099                     if (entity.type === 'node') {
78100                         if (renderAsVertex(entity, graph, wireframe, zoom)) {
78101                             results[entity.id] = entity;
78102                             graph.parentWays(entity).forEach(function(entity) {
78103                                 addChildVertices(entity);
78104                             });
78105                         }
78106                     } else {  // way, relation
78107                         addChildVertices(entity);
78108                     }
78109                 });
78110
78111                 return results;
78112             }
78113
78114
78115             function drawVertices(selection, graph, entities, filter, extent, fullRedraw) {
78116                 var wireframe = context.surface().classed('fill-wireframe');
78117                 var zoom = geoScaleToZoom(projection.scale());
78118                 var mode = context.mode();
78119                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
78120
78121                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.vertices');
78122                 var touchLayer = selection.selectAll('.layer-touch.points');
78123
78124                 if (fullRedraw) {
78125                     _currPersistent = {};
78126                     _radii = {};
78127                 }
78128
78129                 // Collect important vertices from the `entities` list..
78130                 // (during a paritial redraw, it will not contain everything)
78131                 for (var i = 0; i < entities.length; i++) {
78132                     var entity = entities[i];
78133                     var geometry = entity.geometry(graph);
78134                     var keep = false;
78135
78136                     // a point that looks like a vertex..
78137                     if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
78138                         _currPersistent[entity.id] = entity;
78139                         keep = true;
78140
78141                     // a vertex of some importance..
78142                     } else if (geometry === 'vertex' &&
78143                         (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph))) {
78144                         _currPersistent[entity.id] = entity;
78145                         keep = true;
78146                     }
78147
78148                     // whatever this is, it's not a persistent vertex..
78149                     if (!keep && !fullRedraw) {
78150                         delete _currPersistent[entity.id];
78151                     }
78152                 }
78153
78154                 // 3 sets of vertices to consider:
78155                 var sets = {
78156                     persistent: _currPersistent,  // persistent = important vertices (render always)
78157                     selected: _currSelected,      // selected + siblings of selected (render always)
78158                     hovered: _currHover           // hovered + siblings of hovered (render only in draw modes)
78159                 };
78160
78161                 var all = Object.assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
78162
78163                 // Draw the vertices..
78164                 // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
78165                 // Adjust the filter function to expand the scope beyond whatever entities were passed in.
78166                 var filterRendered = function(d) {
78167                     return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
78168                 };
78169                 drawLayer
78170                     .call(draw, graph, currentVisible(all), sets, filterRendered);
78171
78172                 // Draw touch targets..
78173                 // When drawing, render all targets (not just those affected by a partial redraw)
78174                 var filterTouch = function(d) {
78175                     return isMoving ? true : filterRendered(d);
78176                 };
78177                 touchLayer
78178                     .call(drawTargets, graph, currentVisible(all), filterTouch);
78179
78180
78181                 function currentVisible(which) {
78182                     return Object.keys(which)
78183                         .map(graph.hasEntity, graph)     // the current version of this entity
78184                         .filter(function (entity) { return entity && entity.intersects(extent, graph); });
78185                 }
78186             }
78187
78188
78189             // partial redraw - only update the selected items..
78190             drawVertices.drawSelected = function(selection, graph, extent) {
78191                 var wireframe = context.surface().classed('fill-wireframe');
78192                 var zoom = geoScaleToZoom(projection.scale());
78193
78194                 _prevSelected = _currSelected || {};
78195                 _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
78196
78197                 // note that drawVertices will add `_currSelected` automatically if needed..
78198                 var filter = function(d) { return d.id in _prevSelected; };
78199                 drawVertices(selection, graph, Object.values(_prevSelected), filter, extent, false);
78200             };
78201
78202
78203             // partial redraw - only update the hovered items..
78204             drawVertices.drawHover = function(selection, graph, target, extent) {
78205                 if (target === _currHoverTarget) return;  // continue only if something changed
78206
78207                 var wireframe = context.surface().classed('fill-wireframe');
78208                 var zoom = geoScaleToZoom(projection.scale());
78209
78210                 _prevHover = _currHover || {};
78211                 _currHoverTarget = target;
78212                 var entity = target && target.properties && target.properties.entity;
78213
78214                 if (entity) {
78215                     _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
78216                 } else {
78217                     _currHover = {};
78218                 }
78219
78220                 // note that drawVertices will add `_currHover` automatically if needed..
78221                 var filter = function(d) { return d.id in _prevHover; };
78222                 drawVertices(selection, graph, Object.values(_prevHover), filter, extent, false);
78223             };
78224
78225             return drawVertices;
78226         }
78227
78228         function utilBindOnce(target, type, listener, capture) {
78229             var typeOnce = type + '.once';
78230             function one() {
78231                 target.on(typeOnce, null);
78232                 listener.apply(this, arguments);
78233             }
78234             target.on(typeOnce, one, capture);
78235             return this;
78236         }
78237
78238         // constants
78239         var TILESIZE = 256;
78240         var kMin = geoZoomToScale(2, TILESIZE);
78241         var kMax = geoZoomToScale(24, TILESIZE);
78242
78243         function clamp(num, min, max) {
78244             return Math.max(min, Math.min(num, max));
78245         }
78246
78247
78248         function rendererMap(context) {
78249             var dispatch$1 = dispatch('move', 'drawn');
78250             var projection = context.projection;
78251             var curtainProjection = context.curtainProjection;
78252             var drawLayers = svgLayers(projection, context);
78253             var drawPoints = svgPoints(projection, context);
78254             var drawVertices = svgVertices(projection, context);
78255             var drawLines = svgLines(projection, context);
78256             var drawAreas = svgAreas(projection, context);
78257             var drawMidpoints = svgMidpoints(projection, context);
78258             var drawLabels = svgLabels(projection, context);
78259
78260             var _selection = d3_select(null);
78261             var supersurface = d3_select(null);
78262             var wrapper = d3_select(null);
78263             var surface = d3_select(null);
78264
78265             var _dimensions = [1, 1];
78266             var _dblClickEnabled = true;
78267             var _redrawEnabled = true;
78268             var _gestureTransformStart;
78269             var _transformStart = projection.transform();
78270             var _transformLast;
78271             var _isTransformed = false;
78272             var _minzoom = 0;
78273             var _getMouseCoords;
78274             var _mouseEvent;
78275
78276             var zoom = d3_zoom()
78277                 .scaleExtent([kMin, kMax])
78278                 .interpolate(d3_interpolate)
78279                 .filter(zoomEventFilter)
78280                 .on('zoom', zoomPan);
78281
78282             var scheduleRedraw = throttle(redraw, 750);
78283             // var isRedrawScheduled = false;
78284             // var pendingRedrawCall;
78285             // function scheduleRedraw() {
78286             //     // Only schedule the redraw if one has not already been set.
78287             //     if (isRedrawScheduled) return;
78288             //     isRedrawScheduled = true;
78289             //     var that = this;
78290             //     var args = arguments;
78291             //     pendingRedrawCall = window.requestIdleCallback(function () {
78292             //         // Reset the boolean so future redraws can be set.
78293             //         isRedrawScheduled = false;
78294             //         redraw.apply(that, args);
78295             //     }, { timeout: 1400 });
78296             // }
78297
78298             function cancelPendingRedraw() {
78299                 scheduleRedraw.cancel();
78300                 // isRedrawScheduled = false;
78301                 // window.cancelIdleCallback(pendingRedrawCall);
78302             }
78303
78304
78305             function map(selection) {
78306                 _selection = selection;
78307
78308                 context
78309                     .on('change.map', immediateRedraw);
78310
78311                 var osm = context.connection();
78312                 if (osm) {
78313                     osm.on('change.map', immediateRedraw);
78314                 }
78315
78316                 function didUndoOrRedo(targetTransform) {
78317                     var mode = context.mode().id;
78318                     if (mode !== 'browse' && mode !== 'select') return;
78319                     if (targetTransform) {
78320                         map.transformEase(targetTransform);
78321                     }
78322                 }
78323
78324                 context.history()
78325                     .on('merge.map', function() { scheduleRedraw(); })
78326                     .on('change.map', immediateRedraw)
78327                     .on('undone.map', function(stack, fromStack) {
78328                         didUndoOrRedo(fromStack.transform);
78329                     })
78330                     .on('redone.map', function(stack) {
78331                         didUndoOrRedo(stack.transform);
78332                     });
78333
78334                 context.background()
78335                     .on('change.map', immediateRedraw);
78336
78337                 context.features()
78338                     .on('redraw.map', immediateRedraw);
78339
78340                 drawLayers
78341                     .on('change.map', function() {
78342                         context.background().updateImagery();
78343                         immediateRedraw();
78344                     });
78345
78346                 selection
78347                     .on('dblclick.map', dblClick)
78348                     .call(zoom)
78349                     .call(zoom.transform, projection.transform());
78350
78351                 supersurface = selection.append('div')
78352                     .attr('id', 'supersurface')
78353                     .call(utilSetTransform, 0, 0);
78354
78355                 // Need a wrapper div because Opera can't cope with an absolutely positioned
78356                 // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
78357                 wrapper = supersurface
78358                     .append('div')
78359                     .attr('class', 'layer layer-data');
78360
78361                 map.surface = surface = wrapper
78362                     .call(drawLayers)
78363                     .selectAll('.surface')
78364                     .attr('id', 'surface');
78365
78366                 surface
78367                     .call(drawLabels.observe)
78368                     .on('gesturestart.surface', function() {
78369                         _gestureTransformStart = projection.transform();
78370                     })
78371                     .on('gesturechange.surface', gestureChange)
78372                     .on('mousedown.zoom', function() {
78373                         if (event.button === 2) {
78374                             event.stopPropagation();
78375                         }
78376                     }, true)
78377                     .on('mouseup.zoom', function() {
78378                         if (resetTransform()) {
78379                             immediateRedraw();
78380                         }
78381                     })
78382                     .on('mousemove.map', function() {
78383                         _mouseEvent = event;
78384                     })
78385                     .on('mouseover.vertices', function() {
78386                         if (map.editable() && !_isTransformed) {
78387                             var hover = event.target.__data__;
78388                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
78389                             dispatch$1.call('drawn', this, { full: false });
78390                         }
78391                     })
78392                     .on('mouseout.vertices', function() {
78393                         if (map.editable() && !_isTransformed) {
78394                             var hover = event.relatedTarget && event.relatedTarget.__data__;
78395                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
78396                             dispatch$1.call('drawn', this, { full: false });
78397                         }
78398                     });
78399
78400                 context.on('enter.map',  function() {
78401                     if (map.editable() && !_isTransformed) {
78402                         // redraw immediately any objects affected by a change in selectedIDs.
78403                         var graph = context.graph();
78404                         var selectedAndParents = {};
78405                         context.selectedIDs().forEach(function(id) {
78406                             var entity = graph.hasEntity(id);
78407                             if (entity) {
78408                                 selectedAndParents[entity.id] = entity;
78409                                 if (entity.type === 'node') {
78410                                     graph.parentWays(entity).forEach(function(parent) {
78411                                         selectedAndParents[parent.id] = parent;
78412                                     });
78413                                 }
78414                             }
78415                         });
78416                         var data = Object.values(selectedAndParents);
78417                         var filter = function(d) { return d.id in selectedAndParents; };
78418
78419                         data = context.features().filter(data, graph);
78420
78421                         surface
78422                             .call(drawVertices.drawSelected, graph, map.extent())
78423                             .call(drawLines, graph, data, filter)
78424                             .call(drawAreas, graph, data, filter)
78425                             .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
78426
78427                         dispatch$1.call('drawn', this, { full: false });
78428
78429                         // redraw everything else later
78430                         scheduleRedraw();
78431                     }
78432                 });
78433
78434                 map.dimensions(utilGetDimensions(selection));
78435             }
78436
78437
78438             function zoomEventFilter() {
78439                 // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
78440                 // Intercept `mousedown` and check if there is an orphaned zoom gesture.
78441                 // This can happen if a previous `mousedown` occurred without a `mouseup`.
78442                 // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
78443                 // so that d3-zoom won't stop propagation of new `mousedown` events.
78444                 if (event.type === 'mousedown') {
78445                     var hasOrphan = false;
78446                     var listeners = window.__on;
78447                     for (var i = 0; i < listeners.length; i++) {
78448                         var listener = listeners[i];
78449                         if (listener.name === 'zoom' && listener.type === 'mouseup') {
78450                             hasOrphan = true;
78451                             break;
78452                         }
78453                     }
78454                     if (hasOrphan) {
78455                         var event$1 = window.CustomEvent;
78456                         if (event$1) {
78457                             event$1 = new event$1('mouseup');
78458                         } else {
78459                             event$1 = window.document.createEvent('Event');
78460                             event$1.initEvent('mouseup', false, false);
78461                         }
78462                         // Event needs to be dispatched with an event.view property.
78463                         event$1.view = window;
78464                         window.dispatchEvent(event$1);
78465                     }
78466                 }
78467
78468                 return event.button !== 2;   // ignore right clicks
78469             }
78470
78471
78472             function pxCenter() {
78473                 return [_dimensions[0] / 2, _dimensions[1] / 2];
78474             }
78475
78476
78477             function drawEditable(difference, extent) {
78478                 var mode = context.mode();
78479                 var graph = context.graph();
78480                 var features = context.features();
78481                 var all = context.intersects(map.extent());
78482                 var fullRedraw = false;
78483                 var data;
78484                 var set;
78485                 var filter;
78486
78487                 if (difference) {
78488                     var complete = difference.complete(map.extent());
78489                     data = Object.values(complete).filter(Boolean);
78490                     set = new Set(Object.keys(complete));
78491                     filter = function(d) { return set.has(d.id); };
78492                     features.clear(data);
78493
78494                 } else {
78495                     // force a full redraw if gatherStats detects that a feature
78496                     // should be auto-hidden (e.g. points or buildings)..
78497                     if (features.gatherStats(all, graph, _dimensions)) {
78498                         extent = undefined;
78499                     }
78500
78501                     if (extent) {
78502                         data = context.intersects(map.extent().intersection(extent));
78503                         set = new Set(data.map(function(entity) { return entity.id; }));
78504                         filter = function(d) { return set.has(d.id); };
78505
78506                     } else {
78507                         data = all;
78508                         fullRedraw = true;
78509                         filter = utilFunctor(true);
78510                     }
78511                 }
78512
78513                 data = features.filter(data, graph);
78514
78515                 if (mode && mode.id === 'select') {
78516                     // update selected vertices - the user might have just double-clicked a way,
78517                     // creating a new vertex, triggering a partial redraw without a mode change
78518                     surface.call(drawVertices.drawSelected, graph, map.extent());
78519                 }
78520
78521                 surface
78522                     .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
78523                     .call(drawLines, graph, data, filter)
78524                     .call(drawAreas, graph, data, filter)
78525                     .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
78526                     .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
78527                     .call(drawPoints, graph, data, filter);
78528
78529                 dispatch$1.call('drawn', this, {full: true});
78530             }
78531
78532
78533             function editOff() {
78534                 context.features().resetStats();
78535                 surface.selectAll('.layer-osm *').remove();
78536                 surface.selectAll('.layer-touch:not(.markers) *').remove();
78537
78538                 var allowed = {
78539                     'browse': true,
78540                     'save': true,
78541                     'select-note': true,
78542                     'select-data': true,
78543                     'select-error': true
78544                 };
78545
78546                 var mode = context.mode();
78547                 if (mode && !allowed[mode.id]) {
78548                     context.enter(modeBrowse(context));
78549                 }
78550
78551                 dispatch$1.call('drawn', this, {full: true});
78552             }
78553
78554
78555             function dblClick() {
78556                 if (!_dblClickEnabled) {
78557                     event.preventDefault();
78558                     event.stopImmediatePropagation();
78559                 }
78560             }
78561
78562
78563             function gestureChange() {
78564                 // Remap Safari gesture events to wheel events - #5492
78565                 // We want these disabled most places, but enabled for zoom/unzoom on map surface
78566                 // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
78567                 var e = event;
78568                 e.preventDefault();
78569
78570                 var props = {
78571                     deltaMode: 0,    // dummy values to ignore in zoomPan
78572                     deltaY: 1,       // dummy values to ignore in zoomPan
78573                     clientX: e.clientX,
78574                     clientY: e.clientY,
78575                     screenX: e.screenX,
78576                     screenY: e.screenY,
78577                     x: e.x,
78578                     y: e.y
78579                 };
78580
78581                 var e2 = new WheelEvent('wheel', props);
78582                 e2._scale = e.scale;         // preserve the original scale
78583                 e2._rotation = e.rotation;   // preserve the original rotation
78584
78585                 _selection.node().dispatchEvent(e2);
78586             }
78587
78588
78589             function zoomPan(manualEvent) {
78590                 var event$1 = (manualEvent || event);
78591                 var source = event$1.sourceEvent;
78592                 var eventTransform = event$1.transform;
78593                 var x = eventTransform.x;
78594                 var y = eventTransform.y;
78595                 var k = eventTransform.k;
78596
78597                 if (_transformStart.x === x &&
78598                     _transformStart.y === y &&
78599                     _transformStart.k === k) {
78600                     return;  // no change
78601                 }
78602
78603                 // Special handling of 'wheel' events:
78604                 // They might be triggered by the user scrolling the mouse wheel,
78605                 // or 2-finger pinch/zoom gestures, the transform may need adjustment.
78606                 if (source && source.type === 'wheel') {
78607                     var detected = utilDetect();
78608                     var dX = source.deltaX;
78609                     var dY = source.deltaY;
78610                     var x2 = x;
78611                     var y2 = y;
78612                     var k2 = k;
78613                     var t0, p0, p1;
78614
78615                     // Normalize mousewheel scroll speed (Firefox) - #3029
78616                     // If wheel delta is provided in LINE units, recalculate it in PIXEL units
78617                     // We are essentially redoing the calculations that occur here:
78618                     //   https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
78619                     // See this for more info:
78620                     //   https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
78621                     if (source.deltaMode === 1 /* LINE */) {
78622                         // Convert from lines to pixels, more if the user is scrolling fast.
78623                         // (I made up the exp function to roughly match Firefox to what Chrome does)
78624                         // These numbers should be floats, because integers are treated as pan gesture below.
78625                         var lines = Math.abs(source.deltaY);
78626                         var sign = (source.deltaY > 0) ? 1 : -1;
78627                         dY = sign * clamp(
78628                             Math.exp((lines - 1) * 0.75) * 4.000244140625,
78629                             4.000244140625,    // min
78630                             350.000244140625   // max
78631                         );
78632
78633                         // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
78634                         // There doesn't seem to be any scroll accelleration.
78635                         // This multiplier increases the speed a little bit - #5512
78636                         if (detected.os !== 'mac') {
78637                             dY *= 5;
78638                         }
78639
78640                         // recalculate x2,y2,k2
78641                         t0 = _isTransformed ? _transformLast : _transformStart;
78642                         p0 = _getMouseCoords(source);
78643                         p1 = t0.invert(p0);
78644                         k2 = t0.k * Math.pow(2, -dY / 500);
78645                         x2 = p0[0] - p1[0] * k2;
78646                         y2 = p0[1] - p1[1] * k2;
78647
78648                     // 2 finger map pinch zooming (Safari) - #5492
78649                     // These are fake `wheel` events we made from Safari `gesturechange` events..
78650                     } else if (source._scale) {
78651                         // recalculate x2,y2,k2
78652                         t0 = _gestureTransformStart;
78653                         p0 = _getMouseCoords(source);
78654                         p1 = t0.invert(p0);
78655                         k2 = t0.k * source._scale;
78656                         x2 = p0[0] - p1[0] * k2;
78657                         y2 = p0[1] - p1[1] * k2;
78658
78659                     // 2 finger map pinch zooming (all browsers except Safari) - #5492
78660                     // Pinch zooming via the `wheel` event will always have:
78661                     // - `ctrlKey = true`
78662                     // - `deltaY` is not round integer pixels (ignore `deltaX`)
78663                     } else if (source.ctrlKey && !isInteger(dY)) {
78664                         dY *= 6;   // slightly scale up whatever the browser gave us
78665
78666                         // recalculate x2,y2,k2
78667                         t0 = _isTransformed ? _transformLast : _transformStart;
78668                         p0 = _getMouseCoords(source);
78669                         p1 = t0.invert(p0);
78670                         k2 = t0.k * Math.pow(2, -dY / 500);
78671                         x2 = p0[0] - p1[0] * k2;
78672                         y2 = p0[1] - p1[1] * k2;
78673
78674                     // Trackpad scroll zooming with shift or alt/option key down
78675                     } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
78676                         // recalculate x2,y2,k2
78677                         t0 = _isTransformed ? _transformLast : _transformStart;
78678                         p0 = _getMouseCoords(source);
78679                         p1 = t0.invert(p0);
78680                         k2 = t0.k * Math.pow(2, -dY / 500);
78681                         x2 = p0[0] - p1[0] * k2;
78682                         y2 = p0[1] - p1[1] * k2;
78683
78684                     // 2 finger map panning (Mac only, all browsers) - #5492, #5512
78685                     // Panning via the `wheel` event will always have:
78686                     // - `ctrlKey = false`
78687                     // - `deltaX`,`deltaY` are round integer pixels
78688                     } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
78689                         p1 = projection.translate();
78690                         x2 = p1[0] - dX;
78691                         y2 = p1[1] - dY;
78692                         k2 = projection.scale();
78693                     }
78694
78695                     // something changed - replace the event transform
78696                     if (x2 !== x || y2 !== y || k2 !== k) {
78697                         x = x2;
78698                         y = y2;
78699                         k = k2;
78700                         eventTransform = identity$8.translate(x2, y2).scale(k2);
78701                         _selection.node().__zoom = eventTransform;
78702                     }
78703
78704                 }
78705
78706                 if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
78707                     surface.interrupt();
78708                     uiFlash().text(t('cannot_zoom'))();
78709                     setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
78710                     scheduleRedraw();
78711                     dispatch$1.call('move', this, map);
78712                     return;
78713                 }
78714
78715                 projection.transform(eventTransform);
78716
78717                 var scale = k / _transformStart.k;
78718                 var tX = (x / scale - _transformStart.x) * scale;
78719                 var tY = (y / scale - _transformStart.y) * scale;
78720
78721                 if (context.inIntro()) {
78722                     curtainProjection.transform({
78723                         x: x - tX,
78724                         y: y - tY,
78725                         k: k
78726                     });
78727                 }
78728
78729                 if (source) {
78730                     _mouseEvent = event$1;
78731                 }
78732                 _isTransformed = true;
78733                 _transformLast = eventTransform;
78734                 utilSetTransform(supersurface, tX, tY, scale);
78735                 scheduleRedraw();
78736
78737                 dispatch$1.call('move', this, map);
78738
78739
78740                 function isInteger(val) {
78741                     return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
78742                 }
78743             }
78744
78745
78746             function resetTransform() {
78747                 if (!_isTransformed) return false;
78748
78749                 // deprecation warning - Radial Menu to be removed in iD v3
78750                 surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
78751                 utilSetTransform(supersurface, 0, 0);
78752                 _isTransformed = false;
78753                 if (context.inIntro()) {
78754                     curtainProjection.transform(projection.transform());
78755                 }
78756                 return true;
78757             }
78758
78759
78760             function redraw(difference, extent) {
78761                 if (surface.empty() || !_redrawEnabled) return;
78762
78763                 // If we are in the middle of a zoom/pan, we can't do differenced redraws.
78764                 // It would result in artifacts where differenced entities are redrawn with
78765                 // one transform and unchanged entities with another.
78766                 if (resetTransform()) {
78767                     difference = extent = undefined;
78768                 }
78769
78770                 var zoom = map.zoom();
78771                 var z = String(~~zoom);
78772
78773                 if (surface.attr('data-zoom') !== z) {
78774                     surface.attr('data-zoom', z);
78775                 }
78776
78777                 // class surface as `lowzoom` around z17-z18.5 (based on latitude)
78778                 var lat = map.center()[1];
78779                 var lowzoom = linear$2()
78780                     .domain([-60, 0, 60])
78781                     .range([17, 18.5, 17])
78782                     .clamp(true);
78783
78784                 surface
78785                     .classed('low-zoom', zoom <= lowzoom(lat));
78786
78787
78788                 if (!difference) {
78789                     supersurface.call(context.background());
78790                     wrapper.call(drawLayers);
78791                 }
78792
78793                 // OSM
78794                 if (map.editable()) {
78795                     context.loadTiles(projection);
78796                     drawEditable(difference, extent);
78797                 } else {
78798                     editOff();
78799                 }
78800
78801                 _transformStart = projection.transform();
78802
78803                 return map;
78804             }
78805
78806
78807
78808             var immediateRedraw = function(difference, extent) {
78809                 if (!difference && !extent) cancelPendingRedraw();
78810                 redraw(difference, extent);
78811             };
78812
78813
78814             map.mouse = function() {
78815                 var event$1 = _mouseEvent || event;
78816                 if (event$1) {
78817                     var s;
78818                     while ((s = event$1.sourceEvent)) { event$1 = s; }
78819                     return _getMouseCoords(event$1);
78820                 }
78821                 return null;
78822             };
78823
78824
78825             // returns Lng/Lat
78826             map.mouseCoordinates = function() {
78827                 var coord = map.mouse() || pxCenter();
78828                 return projection.invert(coord);
78829             };
78830
78831
78832             map.dblclickEnable = function(val) {
78833                 if (!arguments.length) return _dblClickEnabled;
78834                 _dblClickEnabled = val;
78835                 return map;
78836             };
78837
78838
78839             map.redrawEnable = function(val) {
78840                 if (!arguments.length) return _redrawEnabled;
78841                 _redrawEnabled = val;
78842                 return map;
78843             };
78844
78845
78846             map.isTransformed = function() {
78847                 return _isTransformed;
78848             };
78849
78850
78851             function setTransform(t2, duration, force) {
78852                 var t = projection.transform();
78853                 if (!force && t2.k === t.k && t2.x === t.x && t2.y === t.y) return false;
78854
78855                 if (duration) {
78856                     _selection
78857                         .transition()
78858                         .duration(duration)
78859                         .on('start', function() { map.startEase(); })
78860                         .call(zoom.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
78861                 } else {
78862                     projection.transform(t2);
78863                     _transformStart = t2;
78864                     _selection.call(zoom.transform, _transformStart);
78865                 }
78866
78867                 return true;
78868             }
78869
78870
78871             function setCenterZoom(loc2, z2, duration, force) {
78872                 var c = map.center();
78873                 var z = map.zoom();
78874                 if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) return false;
78875
78876                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
78877
78878                 var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
78879                 proj.scale(k2);
78880
78881                 var t = proj.translate();
78882                 var point = proj(loc2);
78883
78884                 var center = pxCenter();
78885                 t[0] += center[0] - point[0];
78886                 t[1] += center[1] - point[1];
78887
78888                 return setTransform(identity$8.translate(t[0], t[1]).scale(k2), duration, force);
78889             }
78890
78891
78892             map.pan = function(delta, duration) {
78893                 var t = projection.translate();
78894                 var k = projection.scale();
78895
78896                 t[0] += delta[0];
78897                 t[1] += delta[1];
78898
78899                 if (duration) {
78900                     _selection
78901                         .transition()
78902                         .duration(duration)
78903                         .on('start', function() { map.startEase(); })
78904                         .call(zoom.transform, identity$8.translate(t[0], t[1]).scale(k));
78905                 } else {
78906                     projection.translate(t);
78907                     _transformStart = projection.transform();
78908                     _selection.call(zoom.transform, _transformStart);
78909                     dispatch$1.call('move', this, map);
78910                     immediateRedraw();
78911                 }
78912
78913                 return map;
78914             };
78915
78916
78917             map.dimensions = function(val) {
78918                 if (!arguments.length) return _dimensions;
78919
78920                 _dimensions = val;
78921                 drawLayers.dimensions(_dimensions);
78922                 context.background().dimensions(_dimensions);
78923                 projection.clipExtent([[0, 0], _dimensions]);
78924                 _getMouseCoords = utilFastMouse(supersurface.node());
78925
78926                 scheduleRedraw();
78927                 return map;
78928             };
78929
78930
78931             function zoomIn(delta) {
78932                 setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
78933             }
78934
78935             function zoomOut(delta) {
78936                 setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
78937             }
78938
78939             map.zoomIn = function() { zoomIn(1); };
78940             map.zoomInFurther = function() { zoomIn(4); };
78941
78942             map.zoomOut = function() { zoomOut(1); };
78943             map.zoomOutFurther = function() { zoomOut(4); };
78944
78945
78946             map.center = function(loc2) {
78947                 if (!arguments.length) {
78948                     return projection.invert(pxCenter());
78949                 }
78950
78951                 if (setCenterZoom(loc2, map.zoom())) {
78952                     dispatch$1.call('move', this, map);
78953                 }
78954
78955                 scheduleRedraw();
78956                 return map;
78957             };
78958
78959             map.unobscuredCenterZoomEase = function(loc, zoom) {
78960                 var offset = map.unobscuredOffsetPx();
78961
78962                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
78963                 // use the target zoom to calculate the offset center
78964                 proj.scale(geoZoomToScale(zoom, TILESIZE));
78965
78966                 var locPx = proj(loc);
78967                 var offsetLocPx = [locPx[0] + offset[0], locPx[1] + offset[1]];
78968                 var offsetLoc = proj.invert(offsetLocPx);
78969
78970                 map.centerZoomEase(offsetLoc, zoom);
78971             };
78972
78973             map.unobscuredOffsetPx = function() {
78974                 var openPane = d3_select('.map-panes .map-pane.shown');
78975                 if (!openPane.empty()) {
78976                     return [openPane.node().offsetWidth/2, 0];
78977                 }
78978                 return [0, 0];
78979             };
78980
78981             map.zoom = function(z2) {
78982                 if (!arguments.length) {
78983                     return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
78984                 }
78985
78986                 if (z2 < _minzoom) {
78987                     surface.interrupt();
78988                     uiFlash().text(t('cannot_zoom'))();
78989                     z2 = context.minEditableZoom();
78990                 }
78991
78992                 if (setCenterZoom(map.center(), z2)) {
78993                     dispatch$1.call('move', this, map);
78994                 }
78995
78996                 scheduleRedraw();
78997                 return map;
78998             };
78999
79000
79001             map.centerZoom = function(loc2, z2) {
79002                 if (setCenterZoom(loc2, z2)) {
79003                     dispatch$1.call('move', this, map);
79004                 }
79005
79006                 scheduleRedraw();
79007                 return map;
79008             };
79009
79010
79011             map.zoomTo = function(entity) {
79012                 var extent = entity.extent(context.graph());
79013                 if (!isFinite(extent.area())) return map;
79014
79015                 var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
79016                 return map.centerZoom(extent.center(), z2);
79017             };
79018
79019
79020             map.centerEase = function(loc2, duration) {
79021                 duration = duration || 250;
79022                 setCenterZoom(loc2, map.zoom(), duration);
79023                 return map;
79024             };
79025
79026
79027             map.zoomEase = function(z2, duration) {
79028                 duration = duration || 250;
79029                 setCenterZoom(map.center(), z2, duration, false);
79030                 return map;
79031             };
79032
79033
79034             map.centerZoomEase = function(loc2, z2, duration) {
79035                 duration = duration || 250;
79036                 setCenterZoom(loc2, z2, duration, false);
79037                 return map;
79038             };
79039
79040
79041             map.transformEase = function(t2, duration) {
79042                 duration = duration || 250;
79043                 setTransform(t2, duration, false);
79044                 return map;
79045             };
79046
79047
79048             map.zoomToEase = function(entity, duration) {
79049                 var extent = entity.extent(context.graph());
79050                 if (!isFinite(extent.area())) return map;
79051
79052                 var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
79053                 return map.centerZoomEase(extent.center(), z2, duration);
79054             };
79055
79056
79057             map.startEase = function() {
79058                 utilBindOnce(surface, 'mousedown.ease', function() {
79059                     map.cancelEase();
79060                 });
79061                 return map;
79062             };
79063
79064
79065             map.cancelEase = function() {
79066                 _selection.interrupt();
79067                 return map;
79068             };
79069
79070
79071             map.extent = function(val) {
79072                 if (!arguments.length) {
79073                     return new geoExtent(
79074                         projection.invert([0, _dimensions[1]]),
79075                         projection.invert([_dimensions[0], 0])
79076                     );
79077                 } else {
79078                     var extent = geoExtent(val);
79079                     map.centerZoom(extent.center(), map.extentZoom(extent));
79080                 }
79081             };
79082
79083
79084             map.trimmedExtent = function(val) {
79085                 if (!arguments.length) {
79086                     var headerY = 60;
79087                     var footerY = 30;
79088                     var pad = 10;
79089                     return new geoExtent(
79090                         projection.invert([pad, _dimensions[1] - footerY - pad]),
79091                         projection.invert([_dimensions[0] - pad, headerY + pad])
79092                     );
79093                 } else {
79094                     var extent = geoExtent(val);
79095                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
79096                 }
79097             };
79098
79099
79100             function calcExtentZoom(extent, dim) {
79101                 var tl = projection([extent[0][0], extent[1][1]]);
79102                 var br = projection([extent[1][0], extent[0][1]]);
79103
79104                 // Calculate maximum zoom that fits extent
79105                 var hFactor = (br[0] - tl[0]) / dim[0];
79106                 var vFactor = (br[1] - tl[1]) / dim[1];
79107                 var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
79108                 var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
79109                 var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
79110
79111                 return newZoom;
79112             }
79113
79114
79115             map.extentZoom = function(val) {
79116                 return calcExtentZoom(geoExtent(val), _dimensions);
79117             };
79118
79119
79120             map.trimmedExtentZoom = function(val) {
79121                 var trimY = 120;
79122                 var trimX = 40;
79123                 var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
79124                 return calcExtentZoom(geoExtent(val), trimmed);
79125             };
79126
79127
79128             map.editable = function() {
79129                 var layer = context.layers().layer('osm');
79130                 if (!layer || !layer.enabled()) return false;
79131
79132                 return map.zoom() >= context.minEditableZoom();
79133             };
79134
79135
79136             map.notesEditable = function() {
79137                 var layer = context.layers().layer('notes');
79138                 if (!layer || !layer.enabled()) return false;
79139
79140                 return map.zoom() >= context.minEditableZoom();
79141             };
79142
79143
79144             map.minzoom = function(val) {
79145                 if (!arguments.length) return _minzoom;
79146                 _minzoom = val;
79147                 return map;
79148             };
79149
79150
79151             map.layers = drawLayers;
79152
79153
79154             return utilRebind(map, dispatch$1, 'on');
79155         }
79156
79157         function rendererPhotos(context) {
79158             var dispatch$1 = dispatch('change');
79159             var _layerIDs = ['streetside', 'mapillary', 'mapillary-signs', 'openstreetcam'];
79160             var _allPhotoTypes = ['flat', 'panoramic'];
79161             var _shownPhotoTypes = _allPhotoTypes.slice();   // shallow copy
79162
79163             function photos() {}
79164
79165             function updateStorage() {
79166                 if (window.mocha) return;
79167
79168                 var q = utilStringQs(window.location.hash.substring(1));
79169                 var enabled = context.layers().all().filter(function(d) {
79170                     return _layerIDs.indexOf(d.id) !== -1 && d.layer && d.layer.supported() && d.layer.enabled();
79171                 }).map(function(d) {
79172                     return d.id;
79173                 });
79174                 if (enabled.length) {
79175                     q.photo_overlay = enabled.join(',');
79176                 } else {
79177                     delete q.photo_overlay;
79178                 }
79179                 window.location.replace('#' + utilQsString(q, true));
79180             }
79181
79182             photos.overlayLayerIDs = function() {
79183                 return _layerIDs;
79184             };
79185
79186             photos.allPhotoTypes = function() {
79187                 return _allPhotoTypes;
79188             };
79189
79190             function showsLayer(id) {
79191                 var layer = context.layers().layer(id);
79192                 return layer && layer.supported() && layer.enabled();
79193             }
79194
79195             photos.shouldFilterByPhotoType = function() {
79196                 return showsLayer('mapillary') ||
79197                     (showsLayer('streetside') && showsLayer('openstreetcam'));
79198             };
79199
79200             photos.showsPhotoType = function(val) {
79201                 if (!photos.shouldFilterByPhotoType()) return true;
79202
79203                 return _shownPhotoTypes.indexOf(val) !== -1;
79204             };
79205
79206             photos.showsFlat = function() {
79207                 return photos.showsPhotoType('flat');
79208             };
79209
79210             photos.showsPanoramic = function() {
79211                 return photos.showsPhotoType('panoramic');
79212             };
79213
79214             photos.togglePhotoType = function(val) {
79215                 var index = _shownPhotoTypes.indexOf(val);
79216                 if (index !== -1) {
79217                     _shownPhotoTypes.splice(index, 1);
79218                 } else {
79219                     _shownPhotoTypes.push(val);
79220                 }
79221                 dispatch$1.call('change', this);
79222                 return photos;
79223             };
79224
79225             photos.init = function() {
79226                 var q = utilStringQs(window.location.hash.substring(1));
79227                 if (q.photo_overlay) {
79228                     var hashOverlayIDs = q.photo_overlay.replace(/;/g, ',').split(',');
79229                     hashOverlayIDs.forEach(function(id) {
79230                         var layer = context.layers().layer(id);
79231                         if (layer) layer.enabled(true);
79232                     });
79233                 }
79234
79235                 context.layers().on('change.rendererPhotos', updateStorage);
79236             };
79237
79238             return utilRebind(photos, dispatch$1, 'on');
79239         }
79240
79241         function uiAccount(context) {
79242             var osm = context.connection();
79243
79244
79245             function update(selection) {
79246                 if (!osm) return;
79247
79248                 if (!osm.authenticated()) {
79249                     selection.selectAll('#userLink, #logoutLink')
79250                         .classed('hide', true);
79251                     return;
79252                 }
79253
79254                 osm.userDetails(function(err, details) {
79255                     var userLink = selection.select('#userLink'),
79256                         logoutLink = selection.select('#logoutLink');
79257
79258                     userLink.html('');
79259                     logoutLink.html('');
79260
79261                     if (err) return;
79262
79263                     selection.selectAll('#userLink, #logoutLink')
79264                         .classed('hide', false);
79265
79266                     // Link
79267                     userLink.append('a')
79268                         .attr('href', osm.userURL(details.display_name))
79269                         .attr('target', '_blank');
79270
79271                     // Add thumbnail or dont
79272                     if (details.image_url) {
79273                         userLink.append('img')
79274                             .attr('class', 'icon pre-text user-icon')
79275                             .attr('src', details.image_url);
79276                     } else {
79277                         userLink
79278                             .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
79279                     }
79280
79281                     // Add user name
79282                     userLink.append('span')
79283                         .attr('class', 'label')
79284                         .text(details.display_name);
79285
79286                     logoutLink.append('a')
79287                         .attr('class', 'logout')
79288                         .attr('href', '#')
79289                         .text(t('logout'))
79290                         .on('click.logout', function() {
79291                             event.preventDefault();
79292                             osm.logout();
79293                         });
79294                 });
79295             }
79296
79297
79298             return function(selection) {
79299                 selection.append('li')
79300                     .attr('id', 'logoutLink')
79301                     .classed('hide', true);
79302
79303                 selection.append('li')
79304                     .attr('id', 'userLink')
79305                     .classed('hide', true);
79306
79307                 if (osm) {
79308                     osm.on('change.account', function() { update(selection); });
79309                     update(selection);
79310                 }
79311             };
79312         }
79313
79314         function uiAttribution(context) {
79315             var selection;
79316
79317
79318             function attribution(data, klass) {
79319                 var div = selection.selectAll('.' + klass)
79320                     .data([0]);
79321
79322                 div = div.enter()
79323                     .append('div')
79324                     .attr('class', klass)
79325                     .merge(div);
79326
79327
79328                 var background = div.selectAll('.attribution')
79329                     .data(data, function(d) { return d.name(); });
79330
79331                 background.exit()
79332                     .remove();
79333
79334                 background = background.enter()
79335                     .append('span')
79336                     .attr('class', 'attribution')
79337                     .each(function(d) {
79338                         if (d.terms_html) {
79339                             d3_select(this)
79340                                 .html(d.terms_html);
79341                             return;
79342                         }
79343
79344                         var selection;
79345                         if (d.terms_url) {
79346                             selection = d3_select(this)
79347                                 .append('a')
79348                                 .attr('href', d.terms_url)
79349                                 .attr('target', '_blank');
79350                         } else {
79351                             selection = d3_select(this);
79352                         }
79353
79354
79355                         var id_safe = d.id.replace(/\./g, '<TX_DOT>');
79356                         var terms_text = t('imagery.' + id_safe + '.attribution.text',
79357                             { default: d.terms_text || d.id || d.name() }
79358                         );
79359
79360                         if (d.icon && !d.overlay) {
79361                             selection
79362                                 .append('img')
79363                                 .attr('class', 'source-image')
79364                                 .attr('src', d.icon);
79365                         }
79366
79367                         selection
79368                             .append('span')
79369                             .attr('class', 'attribution-text')
79370                             .text(terms_text);
79371                     })
79372                     .merge(background);
79373
79374
79375                 var copyright = background.selectAll('.copyright-notice')
79376                     .data(function(d) {
79377                         var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
79378                         return notice ? [notice] : [];
79379                     });
79380
79381                 copyright.exit()
79382                     .remove();
79383
79384                 copyright = copyright.enter()
79385                     .append('span')
79386                     .attr('class', 'copyright-notice')
79387                     .merge(copyright);
79388
79389                 copyright
79390                     .text(String);
79391             }
79392
79393
79394             function update() {
79395                 attribution([context.background().baseLayerSource()], 'base-layer-attribution');
79396                 attribution(context.background().overlayLayerSources().filter(function (s) {
79397                     return s.validZoom(context.map().zoom());
79398                 }), 'overlay-layer-attribution');
79399             }
79400
79401
79402             return function(select) {
79403                 selection = select;
79404
79405                 context.background()
79406                     .on('change.attribution', update);
79407
79408                 context.map()
79409                     .on('move.attribution', throttle(update, 400, {leading: false}));
79410
79411                 update();
79412             };
79413         }
79414
79415         function uiBackgroundDisplayOptions(context) {
79416             var detected = utilDetect();
79417             var storedOpacity = context.storage('background-opacity');
79418             var minVal = 0.25;
79419             var maxVal = detected.cssfilters ? 2 : 1;
79420
79421             var sliders = detected.cssfilters
79422                 ? ['brightness', 'contrast', 'saturation', 'sharpness']
79423                 : ['brightness'];
79424
79425             var _options = {
79426                 brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
79427                 contrast: 1,
79428                 saturation: 1,
79429                 sharpness: 1
79430             };
79431
79432             var _selection = d3_select(null);
79433
79434
79435             function clamp(x, min, max) {
79436                 return Math.max(min, Math.min(x, max));
79437             }
79438
79439
79440             function updateValue(d, val) {
79441                 if (!val && event && event.target) {
79442                     val = event.target.value;
79443                 }
79444
79445                 val = clamp(val, minVal, maxVal);
79446
79447                 _options[d] = val;
79448                 context.background()[d](val);
79449
79450                 if (d === 'brightness') {
79451                     context.storage('background-opacity', val);
79452                 }
79453
79454                 _selection
79455                     .call(render);
79456             }
79457
79458
79459             function render(selection) {
79460                 var container = selection.selectAll('.display-options-container')
79461                     .data([0]);
79462
79463                 var containerEnter = container.enter()
79464                     .append('div')
79465                     .attr('class', 'display-options-container controls-list');
79466
79467                 // add slider controls
79468                 var slidersEnter = containerEnter.selectAll('.display-control')
79469                     .data(sliders)
79470                     .enter()
79471                     .append('div')
79472                     .attr('class', function(d) { return 'display-control display-control-' + d; });
79473
79474                 slidersEnter
79475                     .append('h5')
79476                     .text(function(d) { return t('background.' + d); })
79477                     .append('span')
79478                     .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
79479
79480                 slidersEnter
79481                     .append('input')
79482                     .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
79483                     .attr('type', 'range')
79484                     .attr('min', minVal)
79485                     .attr('max', maxVal)
79486                     .attr('step', '0.05')
79487                     .on('input', function(d) {
79488                         var val = d3_select(this).property('value');
79489                         updateValue(d, val);
79490                     });
79491
79492                 slidersEnter
79493                     .append('button')
79494                     .attr('title', t('background.reset'))
79495                     .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
79496                     .on('click', function(d) {
79497                         if (event.button !== 0) return;
79498                         updateValue(d, 1);
79499                     })
79500                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
79501
79502                 // reset all button
79503                 containerEnter
79504                     .append('a')
79505                     .attr('class', 'display-option-resetlink')
79506                     .attr('href', '#')
79507                     .text(t('background.reset_all'))
79508                     .on('click', function() {
79509                         for (var i = 0; i < sliders.length; i++) {
79510                             updateValue(sliders[i],1);
79511                         }
79512                     });
79513
79514                 // update
79515                 container = containerEnter
79516                     .merge(container);
79517
79518                 container.selectAll('.display-option-input')
79519                     .property('value', function(d) { return _options[d]; });
79520
79521                 container.selectAll('.display-option-value')
79522                     .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
79523
79524                 container.selectAll('.display-option-reset')
79525                     .classed('disabled', function(d) { return _options[d] === 1; });
79526
79527                 // first time only, set brightness if needed
79528                 if (containerEnter.size() && _options.brightness !== 1) {
79529                     context.background().brightness(_options.brightness);
79530                 }
79531             }
79532
79533
79534             function backgroundDisplayOptions(selection) {
79535                 _selection = selection;
79536
79537                 selection
79538                     .call(uiDisclosure(context, 'background_display_options', true)
79539                         .title(t('background.display_options'))
79540                         .content(render)
79541                     );
79542             }
79543
79544
79545             return backgroundDisplayOptions;
79546         }
79547
79548         function uiBackgroundOffset(context) {
79549             var directions = [
79550                 ['right', [0.5, 0]],
79551                 ['top', [0, -0.5]],
79552                 ['left', [-0.5, 0]],
79553                 ['bottom', [0, 0.5]]
79554             ];
79555
79556
79557             function d3_eventCancel() {
79558                 event.stopPropagation();
79559                 event.preventDefault();
79560             }
79561
79562
79563             function updateValue() {
79564                 var meters = geoOffsetToMeters(context.background().offset());
79565                 var x = +meters[0].toFixed(2);
79566                 var y = +meters[1].toFixed(2);
79567
79568                 d3_selectAll('.nudge-inner-rect')
79569                     .select('input')
79570                     .classed('error', false)
79571                     .property('value', x + ', ' + y);
79572
79573                 d3_selectAll('.nudge-reset')
79574                     .classed('disabled', function() {
79575                         return (x === 0 && y === 0);
79576                     });
79577             }
79578
79579
79580             function resetOffset() {
79581                 context.background().offset([0, 0]);
79582                 updateValue();
79583             }
79584
79585
79586             function nudge(d) {
79587                 context.background().nudge(d, context.map().zoom());
79588                 updateValue();
79589             }
79590
79591
79592             function clickNudgeButton(d) {
79593                 var interval;
79594                 var timeout = window.setTimeout(function() {
79595                         interval = window.setInterval(nudge.bind(null, d), 100);
79596                     }, 500);
79597
79598                 function doneNudge() {
79599                     window.clearTimeout(timeout);
79600                     window.clearInterval(interval);
79601                     d3_select(window)
79602                         .on('mouseup.buttonoffset', null, true)
79603                         .on('mousedown.buttonoffset', null, true);
79604                 }
79605
79606                 d3_select(window)
79607                     .on('mouseup.buttonoffset', doneNudge, true)
79608                     .on('mousedown.buttonoffset', doneNudge, true);
79609
79610                 nudge(d);
79611             }
79612
79613
79614             function inputOffset() {
79615                 var input = d3_select(this);
79616                 var d = input.node().value;
79617
79618                 if (d === '') return resetOffset();
79619
79620                 d = d.replace(/;/g, ',').split(',').map(function(n) {
79621                     // if n is NaN, it will always get mapped to false.
79622                     return !isNaN(n) && n;
79623                 });
79624
79625                 if (d.length !== 2 || !d[0] || !d[1]) {
79626                     input.classed('error', true);
79627                     return;
79628                 }
79629
79630                 context.background().offset(geoMetersToOffset(d));
79631                 updateValue();
79632             }
79633
79634
79635             function dragOffset() {
79636                 if (event.button !== 0) return;
79637
79638                 var origin = [event.clientX, event.clientY];
79639
79640                 context.container()
79641                     .append('div')
79642                     .attr('class', 'nudge-surface');
79643
79644                 d3_select(window)
79645                     .on('mousemove.offset', function() {
79646                         var latest = [event.clientX, event.clientY];
79647                         var d = [
79648                             -(origin[0] - latest[0]) / 4,
79649                             -(origin[1] - latest[1]) / 4
79650                         ];
79651
79652                         origin = latest;
79653                         nudge(d);
79654                     })
79655                     .on('mouseup.offset', function() {
79656                         if (event.button !== 0) return;
79657                         d3_selectAll('.nudge-surface')
79658                             .remove();
79659
79660                         d3_select(window)
79661                             .on('mousemove.offset', null)
79662                             .on('mouseup.offset', null);
79663                     });
79664             }
79665
79666
79667             function render(selection) {
79668                 var container = selection.selectAll('.nudge-container')
79669                     .data([0]);
79670
79671                 var containerEnter = container.enter()
79672                     .append('div')
79673                     .attr('class', 'nudge-container cf');
79674
79675                 containerEnter
79676                     .append('div')
79677                     .attr('class', 'nudge-instructions')
79678                     .text(t('background.offset'));
79679
79680                 var nudgeEnter = containerEnter
79681                     .append('div')
79682                     .attr('class', 'nudge-outer-rect')
79683                     .on('mousedown', dragOffset);
79684
79685                 nudgeEnter
79686                     .append('div')
79687                     .attr('class', 'nudge-inner-rect')
79688                     .append('input')
79689                     .on('change', inputOffset);
79690
79691                 containerEnter
79692                     .append('div')
79693                     .selectAll('button')
79694                     .data(directions).enter()
79695                     .append('button')
79696                     .attr('class', function(d) { return d[0] + ' nudge'; })
79697                     .on('contextmenu', d3_eventCancel)
79698                     .on('mousedown', function(d) {
79699                         if (event.button !== 0) return;
79700                         clickNudgeButton(d[1]);
79701                     });
79702
79703                 containerEnter
79704                     .append('button')
79705                     .attr('title', t('background.reset'))
79706                     .attr('class', 'nudge-reset disabled')
79707                     .on('contextmenu', d3_eventCancel)
79708                     .on('click', function() {
79709                         if (event.button !== 0) return;
79710                         resetOffset();
79711                     })
79712                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
79713
79714                 updateValue();
79715             }
79716
79717
79718             function backgroundOffset(selection) {
79719                 selection
79720                     .call(uiDisclosure(context, 'background_offset', false)
79721                         .title(t('background.fix_misalignment'))
79722                         .content(render)
79723                     );
79724             }
79725
79726
79727             context.background()
79728                 .on('change.backgroundOffset-update', updateValue);
79729
79730             return backgroundOffset;
79731         }
79732
79733         // import { utilGetDimensions } from '../util/dimensions';
79734
79735
79736         function uiMapInMap(context) {
79737
79738             function mapInMap(selection) {
79739                 var backgroundLayer = rendererTileLayer(context);
79740                 var overlayLayers = {};
79741                 var projection = geoRawMercator();
79742                 var dataLayer = svgData(projection, context).showLabels(false);
79743                 var debugLayer = svgDebug(projection, context);
79744                 var zoom = d3_zoom()
79745                     .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
79746                     .on('start', zoomStarted)
79747                     .on('zoom', zoomed)
79748                     .on('end', zoomEnded);
79749
79750                 var wrap = d3_select(null);
79751                 var tiles = d3_select(null);
79752                 var viewport = d3_select(null);
79753
79754                 var _isTransformed = false;
79755                 var _isHidden = true;
79756                 var _skipEvents = false;
79757                 var _gesture = null;
79758                 var _zDiff = 6;    // by default, minimap renders at (main zoom - 6)
79759                 var _dMini;        // dimensions of minimap
79760                 var _cMini;        // center pixel of minimap
79761                 var _tStart;       // transform at start of gesture
79762                 var _tCurr;        // transform at most recent event
79763                 var _timeoutID;
79764
79765
79766                 function zoomStarted() {
79767                     if (_skipEvents) return;
79768                     _tStart = _tCurr = projection.transform();
79769                     _gesture = null;
79770                 }
79771
79772
79773                 function zoomed() {
79774                     if (_skipEvents) return;
79775
79776                     var x = event.transform.x;
79777                     var y = event.transform.y;
79778                     var k = event.transform.k;
79779                     var isZooming = (k !== _tStart.k);
79780                     var isPanning = (x !== _tStart.x || y !== _tStart.y);
79781
79782                     if (!isZooming && !isPanning) {
79783                         return;  // no change
79784                     }
79785
79786                     // lock in either zooming or panning, don't allow both in minimap.
79787                     if (!_gesture) {
79788                         _gesture = isZooming ? 'zoom' : 'pan';
79789                     }
79790
79791                     var tMini = projection.transform();
79792                     var tX, tY, scale;
79793
79794                     if (_gesture === 'zoom') {
79795                         scale = k / tMini.k;
79796                         tX = (_cMini[0] / scale - _cMini[0]) * scale;
79797                         tY = (_cMini[1] / scale - _cMini[1]) * scale;
79798                     } else {
79799                         k = tMini.k;
79800                         scale = 1;
79801                         tX = x - tMini.x;
79802                         tY = y - tMini.y;
79803                     }
79804
79805                     utilSetTransform(tiles, tX, tY, scale);
79806                     utilSetTransform(viewport, 0, 0, scale);
79807                     _isTransformed = true;
79808                     _tCurr = identity$8.translate(x, y).scale(k);
79809
79810                     var zMain = geoScaleToZoom(context.projection.scale());
79811                     var zMini = geoScaleToZoom(k);
79812
79813                     _zDiff = zMain - zMini;
79814
79815                     queueRedraw();
79816                 }
79817
79818
79819                 function zoomEnded() {
79820                     if (_skipEvents) return;
79821                     if (_gesture !== 'pan') return;
79822
79823                     updateProjection();
79824                     _gesture = null;
79825                     context.map().center(projection.invert(_cMini));   // recenter main map..
79826                 }
79827
79828
79829                 function updateProjection() {
79830                     var loc = context.map().center();
79831                     var tMain = context.projection.transform();
79832                     var zMain = geoScaleToZoom(tMain.k);
79833                     var zMini = Math.max(zMain - _zDiff, 0.5);
79834                     var kMini = geoZoomToScale(zMini);
79835
79836                     projection
79837                         .translate([tMain.x, tMain.y])
79838                         .scale(kMini);
79839
79840                     var point = projection(loc);
79841                     var mouse = (_gesture === 'pan') ? geoVecSubtract([_tCurr.x, _tCurr.y], [_tStart.x, _tStart.y]) : [0, 0];
79842                     var xMini = _cMini[0] - point[0] + tMain.x + mouse[0];
79843                     var yMini = _cMini[1] - point[1] + tMain.y + mouse[1];
79844
79845                     projection
79846                         .translate([xMini, yMini])
79847                         .clipExtent([[0, 0], _dMini]);
79848
79849                     _tCurr = projection.transform();
79850
79851                     if (_isTransformed) {
79852                         utilSetTransform(tiles, 0, 0);
79853                         utilSetTransform(viewport, 0, 0);
79854                         _isTransformed = false;
79855                     }
79856
79857                     zoom
79858                         .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
79859
79860                     _skipEvents = true;
79861                     wrap.call(zoom.transform, _tCurr);
79862                     _skipEvents = false;
79863                 }
79864
79865
79866                 function redraw() {
79867                     clearTimeout(_timeoutID);
79868                     if (_isHidden) return;
79869
79870                     updateProjection();
79871                     var zMini = geoScaleToZoom(projection.scale());
79872
79873                     // setup tile container
79874                     tiles = wrap
79875                         .selectAll('.map-in-map-tiles')
79876                         .data([0]);
79877
79878                     tiles = tiles.enter()
79879                         .append('div')
79880                         .attr('class', 'map-in-map-tiles')
79881                         .merge(tiles);
79882
79883                     // redraw background
79884                     backgroundLayer
79885                         .source(context.background().baseLayerSource())
79886                         .projection(projection)
79887                         .dimensions(_dMini);
79888
79889                     var background = tiles
79890                         .selectAll('.map-in-map-background')
79891                         .data([0]);
79892
79893                     background.enter()
79894                         .append('div')
79895                         .attr('class', 'map-in-map-background')
79896                         .merge(background)
79897                         .call(backgroundLayer);
79898
79899
79900                     // redraw overlay
79901                     var overlaySources = context.background().overlayLayerSources();
79902                     var activeOverlayLayers = [];
79903                     for (var i = 0; i < overlaySources.length; i++) {
79904                         if (overlaySources[i].validZoom(zMini)) {
79905                             if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
79906                             activeOverlayLayers.push(overlayLayers[i]
79907                                 .source(overlaySources[i])
79908                                 .projection(projection)
79909                                 .dimensions(_dMini));
79910                         }
79911                     }
79912
79913                     var overlay = tiles
79914                         .selectAll('.map-in-map-overlay')
79915                         .data([0]);
79916
79917                     overlay = overlay.enter()
79918                         .append('div')
79919                         .attr('class', 'map-in-map-overlay')
79920                         .merge(overlay);
79921
79922
79923                     var overlays = overlay
79924                         .selectAll('div')
79925                         .data(activeOverlayLayers, function(d) { return d.source().name(); });
79926
79927                     overlays.exit()
79928                         .remove();
79929
79930                     overlays = overlays.enter()
79931                         .append('div')
79932                         .merge(overlays)
79933                         .each(function(layer) { d3_select(this).call(layer); });
79934
79935
79936                     var dataLayers = tiles
79937                         .selectAll('.map-in-map-data')
79938                         .data([0]);
79939
79940                     dataLayers.exit()
79941                         .remove();
79942
79943                     dataLayers = dataLayers.enter()
79944                         .append('svg')
79945                         .attr('class', 'map-in-map-data')
79946                         .merge(dataLayers)
79947                         .call(dataLayer)
79948                         .call(debugLayer);
79949
79950
79951                     // redraw viewport bounding box
79952                     if (_gesture !== 'pan') {
79953                         var getPath = d3_geoPath(projection);
79954                         var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
79955
79956                         viewport = wrap.selectAll('.map-in-map-viewport')
79957                             .data([0]);
79958
79959                         viewport = viewport.enter()
79960                             .append('svg')
79961                             .attr('class', 'map-in-map-viewport')
79962                             .merge(viewport);
79963
79964
79965                         var path = viewport.selectAll('.map-in-map-bbox')
79966                             .data([bbox]);
79967
79968                         path.enter()
79969                             .append('path')
79970                             .attr('class', 'map-in-map-bbox')
79971                             .merge(path)
79972                             .attr('d', getPath)
79973                             .classed('thick', function(d) { return getPath.area(d) < 30; });
79974                     }
79975                 }
79976
79977
79978                 function queueRedraw() {
79979                     clearTimeout(_timeoutID);
79980                     _timeoutID = setTimeout(function() { redraw(); }, 750);
79981                 }
79982
79983
79984                 function toggle() {
79985                     if (event) event.preventDefault();
79986
79987                     _isHidden = !_isHidden;
79988
79989                     d3_select('.minimap-toggle-item')
79990                         .classed('active', !_isHidden)
79991                         .select('input')
79992                         .property('checked', !_isHidden);
79993
79994                     if (_isHidden) {
79995                         wrap
79996                             .style('display', 'block')
79997                             .style('opacity', '1')
79998                             .transition()
79999                             .duration(200)
80000                             .style('opacity', '0')
80001                             .on('end', function() {
80002                                 selection.selectAll('.map-in-map')
80003                                     .style('display', 'none');
80004                             });
80005                     } else {
80006                         wrap
80007                             .style('display', 'block')
80008                             .style('opacity', '0')
80009                             .transition()
80010                             .duration(200)
80011                             .style('opacity', '1')
80012                             .on('end', function() {
80013                                 redraw();
80014                             });
80015                     }
80016                 }
80017
80018
80019                 uiMapInMap.toggle = toggle;
80020
80021                 wrap = selection.selectAll('.map-in-map')
80022                     .data([0]);
80023
80024                 wrap = wrap.enter()
80025                     .append('div')
80026                     .attr('class', 'map-in-map')
80027                     .style('display', (_isHidden ? 'none' : 'block'))
80028                     .call(zoom)
80029                     .on('dblclick.zoom', null)
80030                     .merge(wrap);
80031
80032                 // reflow warning: Hardcode dimensions - currently can't resize it anyway..
80033                 _dMini = [200,150]; //utilGetDimensions(wrap);
80034                 _cMini = geoVecScale(_dMini, 0.5);
80035
80036                 context.map()
80037                     .on('drawn.map-in-map', function(drawn) {
80038                         if (drawn.full === true) {
80039                             redraw();
80040                         }
80041                     });
80042
80043                 redraw();
80044
80045                 context.keybinding()
80046                     .on(t('background.minimap.key'), toggle);
80047             }
80048
80049             return mapInMap;
80050         }
80051
80052         function uiConfirm(selection) {
80053             var modalSelection = uiModal(selection);
80054
80055             modalSelection.select('.modal')
80056                 .classed('modal-alert', true);
80057
80058             var section = modalSelection.select('.content');
80059
80060             section.append('div')
80061                 .attr('class', 'modal-section header');
80062
80063             section.append('div')
80064                 .attr('class', 'modal-section message-text');
80065
80066             var buttons = section.append('div')
80067                 .attr('class', 'modal-section buttons cf');
80068
80069
80070             modalSelection.okButton = function() {
80071                 buttons
80072                     .append('button')
80073                     .attr('class', 'button ok-button action')
80074                     .on('click.confirm', function() {
80075                         modalSelection.remove();
80076                     })
80077                     .text(t('confirm.okay'))
80078                     .node()
80079                     .focus();
80080
80081                 return modalSelection;
80082             };
80083
80084
80085             return modalSelection;
80086         }
80087
80088         function uiSettingsCustomBackground(context) {
80089             var dispatch$1 = dispatch('change');
80090
80091             function render(selection) {
80092                 // keep separate copies of original and current settings
80093                 var _origSettings = {
80094                     template: context.storage('background-custom-template')
80095                 };
80096                 var _currSettings = {
80097                     template: context.storage('background-custom-template')
80098                 };
80099
80100                 var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
80101                 var modal = uiConfirm(selection).okButton();
80102
80103                 modal
80104                     .classed('settings-modal settings-custom-background', true);
80105
80106                 modal.select('.modal-section.header')
80107                     .append('h3')
80108                     .text(t('settings.custom_background.header'));
80109
80110
80111                 var textSection = modal.select('.modal-section.message-text');
80112
80113                 textSection
80114                     .append('pre')
80115                     .attr('class', 'instructions-template')
80116                     .text(t('settings.custom_background.instructions', { example: example }));
80117
80118                 textSection
80119                     .append('textarea')
80120                     .attr('class', 'field-template')
80121                     .attr('placeholder', t('settings.custom_background.template.placeholder'))
80122                     .call(utilNoAuto)
80123                     .property('value', _currSettings.template);
80124
80125
80126                 // insert a cancel button
80127                 var buttonSection = modal.select('.modal-section.buttons');
80128
80129                 buttonSection
80130                     .insert('button', '.ok-button')
80131                     .attr('class', 'button cancel-button secondary-action')
80132                     .text(t('confirm.cancel'));
80133
80134
80135                 buttonSection.select('.cancel-button')
80136                     .on('click.cancel', clickCancel);
80137
80138                 buttonSection.select('.ok-button')
80139                     .attr('disabled', isSaveDisabled)
80140                     .on('click.save', clickSave);
80141
80142
80143                 function isSaveDisabled() {
80144                     return null;
80145                 }
80146
80147
80148                 // restore the original template
80149                 function clickCancel() {
80150                     textSection.select('.field-template').property('value', _origSettings.template);
80151                     context.storage('background-custom-template', _origSettings.template);
80152                     this.blur();
80153                     modal.close();
80154                 }
80155
80156                 // accept the current template
80157                 function clickSave() {
80158                     _currSettings.template = textSection.select('.field-template').property('value');
80159                     context.storage('background-custom-template', _currSettings.template);
80160                     this.blur();
80161                     modal.close();
80162                     dispatch$1.call('change', this, _currSettings);
80163                 }
80164             }
80165
80166             return utilRebind(render, dispatch$1, 'on');
80167         }
80168
80169         function uiBackground(context) {
80170             var key = t('background.key');
80171
80172             var _pane = d3_select(null), _toggleButton = d3_select(null);
80173
80174             var _customSource = context.background().findSource('custom');
80175             var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
80176
80177             var _backgroundList = d3_select(null);
80178             var _overlayList = d3_select(null);
80179             var _displayOptionsContainer = d3_select(null);
80180             var _offsetContainer = d3_select(null);
80181
80182             var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
80183             var backgroundOffset = uiBackgroundOffset(context);
80184
80185             var settingsCustomBackground = uiSettingsCustomBackground(context)
80186                 .on('change', customChanged);
80187
80188
80189             function setTooltips(selection) {
80190                 selection.each(function(d, i, nodes) {
80191                     var item = d3_select(this).select('label');
80192                     var span = item.select('span');
80193                     var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
80194                     var description = d.description();
80195                     var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
80196
80197                     item.call(tooltip().destroyAny);
80198
80199                     if (d === _previousBackground) {
80200                         item.call(tooltip()
80201                             .placement(placement)
80202                             .html(true)
80203                             .title(function() {
80204                                 var tip = '<div>' + t('background.switch') + '</div>';
80205                                 return uiTooltipHtml(tip, uiCmd('⌘' + key));
80206                             })
80207                         );
80208                     } else if (description || isOverflowing) {
80209                         item.call(tooltip()
80210                             .placement(placement)
80211                             .title(description || d.name())
80212                         );
80213                     }
80214                 });
80215             }
80216
80217
80218             function updateLayerSelections(selection) {
80219                 function active(d) {
80220                     return context.background().showsLayer(d);
80221                 }
80222
80223                 selection.selectAll('li')
80224                     .classed('active', active)
80225                     .classed('switch', function(d) { return d === _previousBackground; })
80226                     .call(setTooltips)
80227                     .selectAll('input')
80228                     .property('checked', active);
80229             }
80230
80231
80232             function chooseBackground(d) {
80233                 if (d.id === 'custom' && !d.template()) {
80234                     return editCustom();
80235                 }
80236
80237                 event.preventDefault();
80238                 _previousBackground = context.background().baseLayerSource();
80239                 context.storage('background-last-used-toggle', _previousBackground.id);
80240                 context.storage('background-last-used', d.id);
80241                 context.background().baseLayerSource(d);
80242                 _backgroundList.call(updateLayerSelections);
80243                 document.activeElement.blur();
80244             }
80245
80246
80247             function customChanged(d) {
80248                 if (d && d.template) {
80249                     _customSource.template(d.template);
80250                     chooseBackground(_customSource);
80251                 } else {
80252                     _customSource.template('');
80253                     chooseBackground(context.background().findSource('none'));
80254                 }
80255             }
80256
80257
80258             function editCustom() {
80259                 event.preventDefault();
80260                 context.container()
80261                     .call(settingsCustomBackground);
80262             }
80263
80264
80265             function chooseOverlay(d) {
80266                 event.preventDefault();
80267                 context.background().toggleOverlayLayer(d);
80268                 _overlayList.call(updateLayerSelections);
80269                 document.activeElement.blur();
80270             }
80271
80272
80273             function drawListItems(layerList, type, change, filter) {
80274                 var sources = context.background()
80275                     .sources(context.map().extent())
80276                     .filter(filter);
80277
80278                 var layerLinks = layerList.selectAll('li')
80279                     .data(sources, function(d) { return d.name(); });
80280
80281                 layerLinks.exit()
80282                     .remove();
80283
80284                 var enter = layerLinks.enter()
80285                     .append('li')
80286                     .classed('layer-custom', function(d) { return d.id === 'custom'; })
80287                     .classed('best', function(d) { return d.best(); });
80288
80289                 var label = enter
80290                     .append('label');
80291
80292                 label
80293                     .append('input')
80294                     .attr('type', type)
80295                     .attr('name', 'layers')
80296                     .on('change', change);
80297
80298                 label
80299                     .append('span')
80300                     .text(function(d) { return d.name(); });
80301
80302                 enter.filter(function(d) { return d.id === 'custom'; })
80303                     .append('button')
80304                     .attr('class', 'layer-browse')
80305                     .call(tooltip()
80306                         .title(t('settings.custom_background.tooltip'))
80307                         .placement((textDirection === 'rtl') ? 'right' : 'left')
80308                     )
80309                     .on('click', editCustom)
80310                     .call(svgIcon('#iD-icon-more'));
80311
80312                 enter.filter(function(d) { return d.best(); })
80313                     .append('div')
80314                     .attr('class', 'best')
80315                     .call(tooltip()
80316                         .title(t('background.best_imagery'))
80317                         .placement((textDirection === 'rtl') ? 'right' : 'left')
80318                     )
80319                     .append('span')
80320                     .html('&#9733;');
80321
80322
80323                 layerList.selectAll('li')
80324                     .sort(sortSources);
80325
80326                 layerList
80327                     .call(updateLayerSelections);
80328
80329
80330                 function sortSources(a, b) {
80331                     return a.best() && !b.best() ? -1
80332                         : b.best() && !a.best() ? 1
80333                         : d3_descending(a.area(), b.area()) || d3_ascending(a.name(), b.name()) || 0;
80334                 }
80335             }
80336
80337
80338             function renderBackgroundList(selection) {
80339
80340                 // the background list
80341                 var container = selection.selectAll('.layer-background-list')
80342                     .data([0]);
80343
80344                 _backgroundList = container.enter()
80345                     .append('ul')
80346                     .attr('class', 'layer-list layer-background-list')
80347                     .attr('dir', 'auto')
80348                     .merge(container);
80349
80350
80351                 // add minimap toggle below list
80352                 var minimapEnter = selection.selectAll('.minimap-toggle-list')
80353                     .data([0])
80354                     .enter()
80355                     .append('ul')
80356                     .attr('class', 'layer-list minimap-toggle-list')
80357                     .append('li')
80358                     .attr('class', 'minimap-toggle-item');
80359
80360                 var minimapLabelEnter = minimapEnter
80361                     .append('label')
80362                     .call(tooltip()
80363                         .html(true)
80364                         .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
80365                         .placement('top')
80366                     );
80367
80368                 minimapLabelEnter
80369                     .append('input')
80370                     .attr('type', 'checkbox')
80371                     .on('change', function() {
80372                         event.preventDefault();
80373                         uiMapInMap.toggle();
80374                     });
80375
80376                 minimapLabelEnter
80377                     .append('span')
80378                     .text(t('background.minimap.description'));
80379
80380
80381                 // "Info / Report a Problem" link
80382                 selection.selectAll('.imagery-faq')
80383                     .data([0])
80384                     .enter()
80385                     .append('div')
80386                     .attr('class', 'imagery-faq')
80387                     .append('a')
80388                     .attr('target', '_blank')
80389                     .call(svgIcon('#iD-icon-out-link', 'inline'))
80390                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
80391                     .append('span')
80392                     .text(t('background.imagery_source_faq'));
80393
80394                 updateBackgroundList();
80395             }
80396
80397
80398             function renderOverlayList(selection) {
80399                 var container = selection.selectAll('.layer-overlay-list')
80400                     .data([0]);
80401
80402                 _overlayList = container.enter()
80403                     .append('ul')
80404                     .attr('class', 'layer-list layer-overlay-list')
80405                     .attr('dir', 'auto')
80406                     .merge(container);
80407
80408                 updateOverlayList();
80409             }
80410
80411             function updateBackgroundList() {
80412                 _backgroundList
80413                     .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
80414             }
80415
80416             function updateOverlayList() {
80417                 _overlayList
80418                     .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
80419             }
80420
80421
80422             function update() {
80423                 if (!_pane.select('.disclosure-wrap-background_list').classed('hide')) {
80424                     updateBackgroundList();
80425                 }
80426
80427                 if (!_pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
80428                     updateOverlayList();
80429                 }
80430
80431                 _displayOptionsContainer
80432                     .call(backgroundDisplayOptions);
80433
80434                 _offsetContainer
80435                     .call(backgroundOffset);
80436             }
80437
80438
80439             function quickSwitch() {
80440                 if (event) {
80441                     event.stopImmediatePropagation();
80442                     event.preventDefault();
80443                 }
80444                 if (_previousBackground) {
80445                     chooseBackground(_previousBackground);
80446                 }
80447             }
80448
80449             var paneTooltip = tooltip()
80450                 .placement((textDirection === 'rtl') ? 'right' : 'left')
80451                 .html(true)
80452                 .title(uiTooltipHtml(t('background.description'), key));
80453
80454             uiBackground.togglePane = function() {
80455                 if (event) event.preventDefault();
80456                 paneTooltip.hide(_toggleButton);
80457                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
80458             };
80459
80460             function hidePane() {
80461                 context.ui().togglePanes();
80462             }
80463
80464             uiBackground.renderToggleButton = function(selection) {
80465
80466                 _toggleButton = selection
80467                     .append('button')
80468                     .on('click', uiBackground.togglePane)
80469                     .call(svgIcon('#iD-icon-layers', 'light'))
80470                     .call(paneTooltip);
80471             };
80472
80473             uiBackground.renderPane = function(selection) {
80474
80475                 _pane = selection
80476                     .append('div')
80477                     .attr('class', 'fillL map-pane background-pane hide')
80478                     .attr('pane', 'background');
80479
80480
80481                 var heading = _pane
80482                     .append('div')
80483                     .attr('class', 'pane-heading');
80484
80485                 heading
80486                     .append('h2')
80487                     .text(t('background.title'));
80488
80489                 heading
80490                     .append('button')
80491                     .on('click', hidePane)
80492                     .call(svgIcon('#iD-icon-close'));
80493
80494
80495                 var content = _pane
80496                     .append('div')
80497                     .attr('class', 'pane-content');
80498
80499                 // background list
80500                 content
80501                     .append('div')
80502                     .attr('class', 'background-background-list-container')
80503                     .call(uiDisclosure(context, 'background_list', true)
80504                         .title(t('background.backgrounds'))
80505                         .content(renderBackgroundList)
80506                     );
80507
80508                 // overlay list
80509                 content
80510                     .append('div')
80511                     .attr('class', 'background-overlay-list-container')
80512                     .call(uiDisclosure(context, 'overlay_list', true)
80513                         .title(t('background.overlays'))
80514                         .content(renderOverlayList)
80515                     );
80516
80517                 // display options
80518                 _displayOptionsContainer = content
80519                     .append('div')
80520                     .attr('class', 'background-display-options');
80521
80522                 // offset controls
80523                 _offsetContainer = content
80524                     .append('div')
80525                     .attr('class', 'background-offset');
80526
80527
80528                 // add listeners
80529                 context.map()
80530                     .on('move.background-update',
80531                         debounce(function() { window.requestIdleCallback(update); }, 1000)
80532                     );
80533
80534
80535                 context.background()
80536                     .on('change.background-update', update);
80537
80538
80539                 update();
80540
80541                 context.keybinding()
80542                     .on(key, uiBackground.togglePane)
80543                     .on(uiCmd('⌘' + key), quickSwitch);
80544             };
80545
80546             return uiBackground;
80547         }
80548
80549         function uiContributors(context) {
80550             var osm = context.connection(),
80551                 debouncedUpdate = debounce(function() { update(); }, 1000),
80552                 limit = 4,
80553                 hidden = false,
80554                 wrap = d3_select(null);
80555
80556
80557             function update() {
80558                 if (!osm) return;
80559
80560                 var users = {},
80561                     entities = context.intersects(context.map().extent());
80562
80563                 entities.forEach(function(entity) {
80564                     if (entity && entity.user) users[entity.user] = true;
80565                 });
80566
80567                 var u = Object.keys(users),
80568                     subset = u.slice(0, u.length > limit ? limit - 1 : limit);
80569
80570                 wrap.html('')
80571                     .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
80572
80573                 var userList = d3_select(document.createElement('span'));
80574
80575                 userList.selectAll()
80576                     .data(subset)
80577                     .enter()
80578                     .append('a')
80579                     .attr('class', 'user-link')
80580                     .attr('href', function(d) { return osm.userURL(d); })
80581                     .attr('target', '_blank')
80582                     .text(String);
80583
80584                 if (u.length > limit) {
80585                     var count = d3_select(document.createElement('span'));
80586
80587                     count.append('a')
80588                         .attr('target', '_blank')
80589                         .attr('href', function() {
80590                             return osm.changesetsURL(context.map().center(), context.map().zoom());
80591                         })
80592                         .text(u.length - limit + 1);
80593
80594                     wrap.append('span')
80595                         .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
80596
80597                 } else {
80598                     wrap.append('span')
80599                         .html(t('contributors.list', { users: userList.html() }));
80600                 }
80601
80602                 if (!u.length) {
80603                     hidden = true;
80604                     wrap
80605                         .transition()
80606                         .style('opacity', 0);
80607
80608                 } else if (hidden) {
80609                     wrap
80610                         .transition()
80611                         .style('opacity', 1);
80612                 }
80613             }
80614
80615
80616             return function(selection) {
80617                 if (!osm) return;
80618                 wrap = selection;
80619                 update();
80620
80621                 osm.on('loaded.contributors', debouncedUpdate);
80622                 context.map().on('move.contributors', debouncedUpdate);
80623             };
80624         }
80625
80626         function uiFeatureInfo(context) {
80627             function update(selection) {
80628                 var features = context.features();
80629                 var stats = features.stats();
80630                 var count = 0;
80631                 var hiddenList = features.hidden().map(function(k) {
80632                     if (stats[k]) {
80633                         count += stats[k];
80634                         return String(stats[k]) + ' ' + t('feature.' + k + '.description');
80635                     }
80636                 }).filter(Boolean);
80637
80638                 selection.html('');
80639
80640                 if (hiddenList.length) {
80641                     var tooltipBehavior = tooltip()
80642                         .placement('top')
80643                         .html(true)
80644                         .title(function() {
80645                             return uiTooltipHtml(hiddenList.join('<br/>'));
80646                         });
80647
80648                     var warning = selection.append('a')
80649                         .attr('href', '#')
80650                         .attr('tabindex', -1)
80651                         .html(t('feature_info.hidden_warning', { count: count }))
80652                         .call(tooltipBehavior)
80653                         .on('click', function() {
80654                             tooltipBehavior.hide(warning);
80655                             // open map data panel?
80656                             event.preventDefault();
80657                         });
80658                 }
80659
80660                 selection
80661                     .classed('hide', !hiddenList.length);
80662             }
80663
80664
80665             return function(selection) {
80666                 update(selection);
80667
80668                 context.features().on('change.feature_info', function() {
80669                     update(selection);
80670                 });
80671             };
80672         }
80673
80674         function uiFullScreen(context) {
80675             var element = context.container().node();
80676             // var button = d3_select(null);
80677
80678
80679             function getFullScreenFn() {
80680                 if (element.requestFullscreen) {
80681                     return element.requestFullscreen;
80682                 } else if (element.msRequestFullscreen) {
80683                     return element.msRequestFullscreen;
80684                 } else if (element.mozRequestFullScreen) {
80685                     return element.mozRequestFullScreen;
80686                 } else if (element.webkitRequestFullscreen) {
80687                     return element.webkitRequestFullscreen;
80688                 }
80689             }
80690
80691
80692             function getExitFullScreenFn() {
80693                 if (document.exitFullscreen) {
80694                     return document.exitFullscreen;
80695                 } else if (document.msExitFullscreen) {
80696                     return document.msExitFullscreen;
80697                 } else if (document.mozCancelFullScreen) {
80698                     return document.mozCancelFullScreen;
80699                 } else if (document.webkitExitFullscreen) {
80700                     return document.webkitExitFullscreen;
80701                 }
80702             }
80703
80704
80705             function isFullScreen() {
80706                 return document.fullscreenElement ||
80707                     document.mozFullScreenElement ||
80708                     document.webkitFullscreenElement ||
80709                     document.msFullscreenElement;
80710             }
80711
80712
80713             function isSupported() {
80714                 return !!getFullScreenFn();
80715             }
80716
80717
80718             function fullScreen() {
80719                 event.preventDefault();
80720                 if (!isFullScreen()) {
80721                     // button.classed('active', true);
80722                     getFullScreenFn().apply(element);
80723                 } else {
80724                     // button.classed('active', false);
80725                     getExitFullScreenFn().apply(document);
80726                 }
80727             }
80728
80729
80730             return function() { // selection) {
80731                 if (!isSupported()) return;
80732
80733                 // button = selection.append('button')
80734                 //     .attr('title', t('full_screen'))
80735                 //     .attr('tabindex', -1)
80736                 //     .on('click', fullScreen)
80737                 //     .call(tooltip);
80738
80739                 // button.append('span')
80740                 //     .attr('class', 'icon full-screen');
80741
80742                 var detected = utilDetect();
80743                 var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
80744                 context.keybinding().on(keys, fullScreen);
80745             };
80746         }
80747
80748         function uiGeolocate(context) {
80749             var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
80750             var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
80751             var layer = context.layers().layer('geolocate');
80752             var _position;
80753             var _extent;
80754             var _timeoutID;
80755
80756
80757             function click() {
80758                 if (context.inIntro()) return;
80759                 context.enter(modeBrowse(context));
80760                 if (!layer.enabled()) {
80761                     if (!_position) {
80762                         context.container().call(locating);
80763                         navigator.geolocation.getCurrentPosition(success, error, geoOptions);
80764                     } else {
80765                         zoomTo();
80766                     }
80767                 } else {
80768                     layer.enabled(null, false);
80769                 }
80770                 // This timeout ensures that we still call finish() even if
80771                 // the user declines to share their location in Firefox
80772                 _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
80773             }
80774
80775             function zoomTo() {
80776                 var map = context.map();
80777                 layer.enabled(_position, true);
80778                 map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
80779             }
80780
80781
80782             function success(geolocation) {
80783                 _position = geolocation;
80784                 var coords = _position.coords;
80785                 _extent = geoExtent([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
80786                 zoomTo();
80787                 finish();
80788             }
80789
80790
80791             function error() {
80792                 finish();
80793             }
80794
80795
80796             function finish() {
80797                 locating.close();  // unblock ui
80798                 if (_timeoutID) { clearTimeout(_timeoutID); }
80799                 _timeoutID = undefined;
80800             }
80801
80802
80803             return function(selection) {
80804                 if (!navigator.geolocation) return;
80805
80806                 selection
80807                     .append('button')
80808                     .attr('title', t('geolocate.title'))
80809                     .on('click', click)
80810                     .call(svgIcon('#iD-icon-geolocate', 'light'))
80811                     .call(tooltip()
80812                         .placement((textDirection === 'rtl') ? 'right' : 'left'));
80813             };
80814         }
80815
80816         var marked = createCommonjsModule(function (module, exports) {
80817         (function(root) {
80818
80819         /**
80820          * Block-Level Grammar
80821          */
80822
80823         var block = {
80824           newline: /^\n+/,
80825           code: /^( {4}[^\n]+\n*)+/,
80826           fences: /^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
80827           hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
80828           heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,
80829           blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
80830           list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
80831           html: '^ {0,3}(?:' // optional indentation
80832             + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
80833             + '|comment[^\\n]*(\\n+|$)' // (2)
80834             + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
80835             + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
80836             + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
80837             + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
80838             + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
80839             + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
80840             + ')',
80841           def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
80842           nptable: noop,
80843           table: noop,
80844           lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
80845           // regex template, placeholders will be replaced according to different paragraph
80846           // interruption rules of commonmark and the original markdown spec:
80847           _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
80848           text: /^[^\n]+/
80849         };
80850
80851         block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
80852         block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
80853         block.def = edit(block.def)
80854           .replace('label', block._label)
80855           .replace('title', block._title)
80856           .getRegex();
80857
80858         block.bullet = /(?:[*+-]|\d{1,9}\.)/;
80859         block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
80860         block.item = edit(block.item, 'gm')
80861           .replace(/bull/g, block.bullet)
80862           .getRegex();
80863
80864         block.list = edit(block.list)
80865           .replace(/bull/g, block.bullet)
80866           .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
80867           .replace('def', '\\n+(?=' + block.def.source + ')')
80868           .getRegex();
80869
80870         block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
80871           + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
80872           + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
80873           + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
80874           + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
80875           + '|track|ul';
80876         block._comment = /<!--(?!-?>)[\s\S]*?-->/;
80877         block.html = edit(block.html, 'i')
80878           .replace('comment', block._comment)
80879           .replace('tag', block._tag)
80880           .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
80881           .getRegex();
80882
80883         block.paragraph = edit(block._paragraph)
80884           .replace('hr', block.hr)
80885           .replace('heading', ' {0,3}#{1,6} +')
80886           .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
80887           .replace('blockquote', ' {0,3}>')
80888           .replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n')
80889           .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
80890           .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)')
80891           .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
80892           .getRegex();
80893
80894         block.blockquote = edit(block.blockquote)
80895           .replace('paragraph', block.paragraph)
80896           .getRegex();
80897
80898         /**
80899          * Normal Block Grammar
80900          */
80901
80902         block.normal = merge({}, block);
80903
80904         /**
80905          * GFM Block Grammar
80906          */
80907
80908         block.gfm = merge({}, block.normal, {
80909           nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
80910           table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
80911         });
80912
80913         /**
80914          * Pedantic grammar (original John Gruber's loose markdown specification)
80915          */
80916
80917         block.pedantic = merge({}, block.normal, {
80918           html: edit(
80919             '^ *(?:comment *(?:\\n|\\s*$)'
80920             + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
80921             + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
80922             .replace('comment', block._comment)
80923             .replace(/tag/g, '(?!(?:'
80924               + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
80925               + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
80926               + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
80927             .getRegex(),
80928           def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
80929           heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
80930           fences: noop, // fences not supported
80931           paragraph: edit(block.normal._paragraph)
80932             .replace('hr', block.hr)
80933             .replace('heading', ' *#{1,6} *[^\n]')
80934             .replace('lheading', block.lheading)
80935             .replace('blockquote', ' {0,3}>')
80936             .replace('|fences', '')
80937             .replace('|list', '')
80938             .replace('|html', '')
80939             .getRegex()
80940         });
80941
80942         /**
80943          * Block Lexer
80944          */
80945
80946         function Lexer(options) {
80947           this.tokens = [];
80948           this.tokens.links = Object.create(null);
80949           this.options = options || marked.defaults;
80950           this.rules = block.normal;
80951
80952           if (this.options.pedantic) {
80953             this.rules = block.pedantic;
80954           } else if (this.options.gfm) {
80955             this.rules = block.gfm;
80956           }
80957         }
80958
80959         /**
80960          * Expose Block Rules
80961          */
80962
80963         Lexer.rules = block;
80964
80965         /**
80966          * Static Lex Method
80967          */
80968
80969         Lexer.lex = function(src, options) {
80970           var lexer = new Lexer(options);
80971           return lexer.lex(src);
80972         };
80973
80974         /**
80975          * Preprocessing
80976          */
80977
80978         Lexer.prototype.lex = function(src) {
80979           src = src
80980             .replace(/\r\n|\r/g, '\n')
80981             .replace(/\t/g, '    ')
80982             .replace(/\u00a0/g, ' ')
80983             .replace(/\u2424/g, '\n');
80984
80985           return this.token(src, true);
80986         };
80987
80988         /**
80989          * Lexing
80990          */
80991
80992         Lexer.prototype.token = function(src, top) {
80993           src = src.replace(/^ +$/gm, '');
80994           var next,
80995               loose,
80996               cap,
80997               bull,
80998               b,
80999               item,
81000               listStart,
81001               listItems,
81002               t,
81003               space,
81004               i,
81005               tag,
81006               l,
81007               isordered,
81008               istask,
81009               ischecked;
81010
81011           while (src) {
81012             // newline
81013             if (cap = this.rules.newline.exec(src)) {
81014               src = src.substring(cap[0].length);
81015               if (cap[0].length > 1) {
81016                 this.tokens.push({
81017                   type: 'space'
81018                 });
81019               }
81020             }
81021
81022             // code
81023             if (cap = this.rules.code.exec(src)) {
81024               var lastToken = this.tokens[this.tokens.length - 1];
81025               src = src.substring(cap[0].length);
81026               // An indented code block cannot interrupt a paragraph.
81027               if (lastToken && lastToken.type === 'paragraph') {
81028                 lastToken.text += '\n' + cap[0].trimRight();
81029               } else {
81030                 cap = cap[0].replace(/^ {4}/gm, '');
81031                 this.tokens.push({
81032                   type: 'code',
81033                   codeBlockStyle: 'indented',
81034                   text: !this.options.pedantic
81035                     ? rtrim(cap, '\n')
81036                     : cap
81037                 });
81038               }
81039               continue;
81040             }
81041
81042             // fences
81043             if (cap = this.rules.fences.exec(src)) {
81044               src = src.substring(cap[0].length);
81045               this.tokens.push({
81046                 type: 'code',
81047                 lang: cap[2] ? cap[2].trim() : cap[2],
81048                 text: cap[3] || ''
81049               });
81050               continue;
81051             }
81052
81053             // heading
81054             if (cap = this.rules.heading.exec(src)) {
81055               src = src.substring(cap[0].length);
81056               this.tokens.push({
81057                 type: 'heading',
81058                 depth: cap[1].length,
81059                 text: cap[2]
81060               });
81061               continue;
81062             }
81063
81064             // table no leading pipe (gfm)
81065             if (cap = this.rules.nptable.exec(src)) {
81066               item = {
81067                 type: 'table',
81068                 header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
81069                 align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
81070                 cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
81071               };
81072
81073               if (item.header.length === item.align.length) {
81074                 src = src.substring(cap[0].length);
81075
81076                 for (i = 0; i < item.align.length; i++) {
81077                   if (/^ *-+: *$/.test(item.align[i])) {
81078                     item.align[i] = 'right';
81079                   } else if (/^ *:-+: *$/.test(item.align[i])) {
81080                     item.align[i] = 'center';
81081                   } else if (/^ *:-+ *$/.test(item.align[i])) {
81082                     item.align[i] = 'left';
81083                   } else {
81084                     item.align[i] = null;
81085                   }
81086                 }
81087
81088                 for (i = 0; i < item.cells.length; i++) {
81089                   item.cells[i] = splitCells(item.cells[i], item.header.length);
81090                 }
81091
81092                 this.tokens.push(item);
81093
81094                 continue;
81095               }
81096             }
81097
81098             // hr
81099             if (cap = this.rules.hr.exec(src)) {
81100               src = src.substring(cap[0].length);
81101               this.tokens.push({
81102                 type: 'hr'
81103               });
81104               continue;
81105             }
81106
81107             // blockquote
81108             if (cap = this.rules.blockquote.exec(src)) {
81109               src = src.substring(cap[0].length);
81110
81111               this.tokens.push({
81112                 type: 'blockquote_start'
81113               });
81114
81115               cap = cap[0].replace(/^ *> ?/gm, '');
81116
81117               // Pass `top` to keep the current
81118               // "toplevel" state. This is exactly
81119               // how markdown.pl works.
81120               this.token(cap, top);
81121
81122               this.tokens.push({
81123                 type: 'blockquote_end'
81124               });
81125
81126               continue;
81127             }
81128
81129             // list
81130             if (cap = this.rules.list.exec(src)) {
81131               src = src.substring(cap[0].length);
81132               bull = cap[2];
81133               isordered = bull.length > 1;
81134
81135               listStart = {
81136                 type: 'list_start',
81137                 ordered: isordered,
81138                 start: isordered ? +bull : '',
81139                 loose: false
81140               };
81141
81142               this.tokens.push(listStart);
81143
81144               // Get each top-level item.
81145               cap = cap[0].match(this.rules.item);
81146
81147               listItems = [];
81148               next = false;
81149               l = cap.length;
81150               i = 0;
81151
81152               for (; i < l; i++) {
81153                 item = cap[i];
81154
81155                 // Remove the list item's bullet
81156                 // so it is seen as the next token.
81157                 space = item.length;
81158                 item = item.replace(/^ *([*+-]|\d+\.) */, '');
81159
81160                 // Outdent whatever the
81161                 // list item contains. Hacky.
81162                 if (~item.indexOf('\n ')) {
81163                   space -= item.length;
81164                   item = !this.options.pedantic
81165                     ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
81166                     : item.replace(/^ {1,4}/gm, '');
81167                 }
81168
81169                 // Determine whether the next list item belongs here.
81170                 // Backpedal if it does not belong in this list.
81171                 if (i !== l - 1) {
81172                   b = block.bullet.exec(cap[i + 1])[0];
81173                   if (bull.length > 1 ? b.length === 1
81174                     : (b.length > 1 || (this.options.smartLists && b !== bull))) {
81175                     src = cap.slice(i + 1).join('\n') + src;
81176                     i = l - 1;
81177                   }
81178                 }
81179
81180                 // Determine whether item is loose or not.
81181                 // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
81182                 // for discount behavior.
81183                 loose = next || /\n\n(?!\s*$)/.test(item);
81184                 if (i !== l - 1) {
81185                   next = item.charAt(item.length - 1) === '\n';
81186                   if (!loose) loose = next;
81187                 }
81188
81189                 if (loose) {
81190                   listStart.loose = true;
81191                 }
81192
81193                 // Check for task list items
81194                 istask = /^\[[ xX]\] /.test(item);
81195                 ischecked = undefined;
81196                 if (istask) {
81197                   ischecked = item[1] !== ' ';
81198                   item = item.replace(/^\[[ xX]\] +/, '');
81199                 }
81200
81201                 t = {
81202                   type: 'list_item_start',
81203                   task: istask,
81204                   checked: ischecked,
81205                   loose: loose
81206                 };
81207
81208                 listItems.push(t);
81209                 this.tokens.push(t);
81210
81211                 // Recurse.
81212                 this.token(item, false);
81213
81214                 this.tokens.push({
81215                   type: 'list_item_end'
81216                 });
81217               }
81218
81219               if (listStart.loose) {
81220                 l = listItems.length;
81221                 i = 0;
81222                 for (; i < l; i++) {
81223                   listItems[i].loose = true;
81224                 }
81225               }
81226
81227               this.tokens.push({
81228                 type: 'list_end'
81229               });
81230
81231               continue;
81232             }
81233
81234             // html
81235             if (cap = this.rules.html.exec(src)) {
81236               src = src.substring(cap[0].length);
81237               this.tokens.push({
81238                 type: this.options.sanitize
81239                   ? 'paragraph'
81240                   : 'html',
81241                 pre: !this.options.sanitizer
81242                   && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
81243                 text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]
81244               });
81245               continue;
81246             }
81247
81248             // def
81249             if (top && (cap = this.rules.def.exec(src))) {
81250               src = src.substring(cap[0].length);
81251               if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
81252               tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
81253               if (!this.tokens.links[tag]) {
81254                 this.tokens.links[tag] = {
81255                   href: cap[2],
81256                   title: cap[3]
81257                 };
81258               }
81259               continue;
81260             }
81261
81262             // table (gfm)
81263             if (cap = this.rules.table.exec(src)) {
81264               item = {
81265                 type: 'table',
81266                 header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
81267                 align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
81268                 cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
81269               };
81270
81271               if (item.header.length === item.align.length) {
81272                 src = src.substring(cap[0].length);
81273
81274                 for (i = 0; i < item.align.length; i++) {
81275                   if (/^ *-+: *$/.test(item.align[i])) {
81276                     item.align[i] = 'right';
81277                   } else if (/^ *:-+: *$/.test(item.align[i])) {
81278                     item.align[i] = 'center';
81279                   } else if (/^ *:-+ *$/.test(item.align[i])) {
81280                     item.align[i] = 'left';
81281                   } else {
81282                     item.align[i] = null;
81283                   }
81284                 }
81285
81286                 for (i = 0; i < item.cells.length; i++) {
81287                   item.cells[i] = splitCells(
81288                     item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
81289                     item.header.length);
81290                 }
81291
81292                 this.tokens.push(item);
81293
81294                 continue;
81295               }
81296             }
81297
81298             // lheading
81299             if (cap = this.rules.lheading.exec(src)) {
81300               src = src.substring(cap[0].length);
81301               this.tokens.push({
81302                 type: 'heading',
81303                 depth: cap[2].charAt(0) === '=' ? 1 : 2,
81304                 text: cap[1]
81305               });
81306               continue;
81307             }
81308
81309             // top-level paragraph
81310             if (top && (cap = this.rules.paragraph.exec(src))) {
81311               src = src.substring(cap[0].length);
81312               this.tokens.push({
81313                 type: 'paragraph',
81314                 text: cap[1].charAt(cap[1].length - 1) === '\n'
81315                   ? cap[1].slice(0, -1)
81316                   : cap[1]
81317               });
81318               continue;
81319             }
81320
81321             // text
81322             if (cap = this.rules.text.exec(src)) {
81323               // Top-level should never reach here.
81324               src = src.substring(cap[0].length);
81325               this.tokens.push({
81326                 type: 'text',
81327                 text: cap[0]
81328               });
81329               continue;
81330             }
81331
81332             if (src) {
81333               throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
81334             }
81335           }
81336
81337           return this.tokens;
81338         };
81339
81340         /**
81341          * Inline-Level Grammar
81342          */
81343
81344         var inline = {
81345           escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
81346           autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
81347           url: noop,
81348           tag: '^comment'
81349             + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
81350             + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
81351             + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
81352             + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
81353             + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
81354           link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
81355           reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
81356           nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
81357           strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
81358           em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
81359           code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
81360           br: /^( {2,}|\\)\n(?!\s*$)/,
81361           del: noop,
81362           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/
81363         };
81364
81365         // list of punctuation marks from common mark spec
81366         // without ` and ] to workaround Rule 17 (inline code blocks/links)
81367         inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
81368         inline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
81369
81370         inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
81371
81372         inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
81373         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])?)+(?![-_])/;
81374         inline.autolink = edit(inline.autolink)
81375           .replace('scheme', inline._scheme)
81376           .replace('email', inline._email)
81377           .getRegex();
81378
81379         inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
81380
81381         inline.tag = edit(inline.tag)
81382           .replace('comment', block._comment)
81383           .replace('attribute', inline._attribute)
81384           .getRegex();
81385
81386         inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
81387         inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/;
81388         inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
81389
81390         inline.link = edit(inline.link)
81391           .replace('label', inline._label)
81392           .replace('href', inline._href)
81393           .replace('title', inline._title)
81394           .getRegex();
81395
81396         inline.reflink = edit(inline.reflink)
81397           .replace('label', inline._label)
81398           .getRegex();
81399
81400         /**
81401          * Normal Inline Grammar
81402          */
81403
81404         inline.normal = merge({}, inline);
81405
81406         /**
81407          * Pedantic Inline Grammar
81408          */
81409
81410         inline.pedantic = merge({}, inline.normal, {
81411           strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
81412           em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
81413           link: edit(/^!?\[(label)\]\((.*?)\)/)
81414             .replace('label', inline._label)
81415             .getRegex(),
81416           reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
81417             .replace('label', inline._label)
81418             .getRegex()
81419         });
81420
81421         /**
81422          * GFM Inline Grammar
81423          */
81424
81425         inline.gfm = merge({}, inline.normal, {
81426           escape: edit(inline.escape).replace('])', '~|])').getRegex(),
81427           _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
81428           url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
81429           _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
81430           del: /^~+(?=\S)([\s\S]*?\S)~+/,
81431           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
81432         });
81433
81434         inline.gfm.url = edit(inline.gfm.url, 'i')
81435           .replace('email', inline.gfm._extended_email)
81436           .getRegex();
81437         /**
81438          * GFM + Line Breaks Inline Grammar
81439          */
81440
81441         inline.breaks = merge({}, inline.gfm, {
81442           br: edit(inline.br).replace('{2,}', '*').getRegex(),
81443           text: edit(inline.gfm.text)
81444             .replace('\\b_', '\\b_| {2,}\\n')
81445             .replace(/\{2,\}/g, '*')
81446             .getRegex()
81447         });
81448
81449         /**
81450          * Inline Lexer & Compiler
81451          */
81452
81453         function InlineLexer(links, options) {
81454           this.options = options || marked.defaults;
81455           this.links = links;
81456           this.rules = inline.normal;
81457           this.renderer = this.options.renderer || new Renderer();
81458           this.renderer.options = this.options;
81459
81460           if (!this.links) {
81461             throw new Error('Tokens array requires a `links` property.');
81462           }
81463
81464           if (this.options.pedantic) {
81465             this.rules = inline.pedantic;
81466           } else if (this.options.gfm) {
81467             if (this.options.breaks) {
81468               this.rules = inline.breaks;
81469             } else {
81470               this.rules = inline.gfm;
81471             }
81472           }
81473         }
81474
81475         /**
81476          * Expose Inline Rules
81477          */
81478
81479         InlineLexer.rules = inline;
81480
81481         /**
81482          * Static Lexing/Compiling Method
81483          */
81484
81485         InlineLexer.output = function(src, links, options) {
81486           var inline = new InlineLexer(links, options);
81487           return inline.output(src);
81488         };
81489
81490         /**
81491          * Lexing/Compiling
81492          */
81493
81494         InlineLexer.prototype.output = function(src) {
81495           var out = '',
81496               link,
81497               text,
81498               href,
81499               title,
81500               cap,
81501               prevCapZero;
81502
81503           while (src) {
81504             // escape
81505             if (cap = this.rules.escape.exec(src)) {
81506               src = src.substring(cap[0].length);
81507               out += escape(cap[1]);
81508               continue;
81509             }
81510
81511             // tag
81512             if (cap = this.rules.tag.exec(src)) {
81513               if (!this.inLink && /^<a /i.test(cap[0])) {
81514                 this.inLink = true;
81515               } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
81516                 this.inLink = false;
81517               }
81518               if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
81519                 this.inRawBlock = true;
81520               } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
81521                 this.inRawBlock = false;
81522               }
81523
81524               src = src.substring(cap[0].length);
81525               out += this.options.sanitize
81526                 ? this.options.sanitizer
81527                   ? this.options.sanitizer(cap[0])
81528                   : escape(cap[0])
81529                 : cap[0];
81530               continue;
81531             }
81532
81533             // link
81534             if (cap = this.rules.link.exec(src)) {
81535               var lastParenIndex = findClosingBracket(cap[2], '()');
81536               if (lastParenIndex > -1) {
81537                 var linkLen = 4 + cap[1].length + lastParenIndex;
81538                 cap[2] = cap[2].substring(0, lastParenIndex);
81539                 cap[0] = cap[0].substring(0, linkLen).trim();
81540                 cap[3] = '';
81541               }
81542               src = src.substring(cap[0].length);
81543               this.inLink = true;
81544               href = cap[2];
81545               if (this.options.pedantic) {
81546                 link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
81547
81548                 if (link) {
81549                   href = link[1];
81550                   title = link[3];
81551                 } else {
81552                   title = '';
81553                 }
81554               } else {
81555                 title = cap[3] ? cap[3].slice(1, -1) : '';
81556               }
81557               href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
81558               out += this.outputLink(cap, {
81559                 href: InlineLexer.escapes(href),
81560                 title: InlineLexer.escapes(title)
81561               });
81562               this.inLink = false;
81563               continue;
81564             }
81565
81566             // reflink, nolink
81567             if ((cap = this.rules.reflink.exec(src))
81568                 || (cap = this.rules.nolink.exec(src))) {
81569               src = src.substring(cap[0].length);
81570               link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
81571               link = this.links[link.toLowerCase()];
81572               if (!link || !link.href) {
81573                 out += cap[0].charAt(0);
81574                 src = cap[0].substring(1) + src;
81575                 continue;
81576               }
81577               this.inLink = true;
81578               out += this.outputLink(cap, link);
81579               this.inLink = false;
81580               continue;
81581             }
81582
81583             // strong
81584             if (cap = this.rules.strong.exec(src)) {
81585               src = src.substring(cap[0].length);
81586               out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
81587               continue;
81588             }
81589
81590             // em
81591             if (cap = this.rules.em.exec(src)) {
81592               src = src.substring(cap[0].length);
81593               out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
81594               continue;
81595             }
81596
81597             // code
81598             if (cap = this.rules.code.exec(src)) {
81599               src = src.substring(cap[0].length);
81600               out += this.renderer.codespan(escape(cap[2].trim(), true));
81601               continue;
81602             }
81603
81604             // br
81605             if (cap = this.rules.br.exec(src)) {
81606               src = src.substring(cap[0].length);
81607               out += this.renderer.br();
81608               continue;
81609             }
81610
81611             // del (gfm)
81612             if (cap = this.rules.del.exec(src)) {
81613               src = src.substring(cap[0].length);
81614               out += this.renderer.del(this.output(cap[1]));
81615               continue;
81616             }
81617
81618             // autolink
81619             if (cap = this.rules.autolink.exec(src)) {
81620               src = src.substring(cap[0].length);
81621               if (cap[2] === '@') {
81622                 text = escape(this.mangle(cap[1]));
81623                 href = 'mailto:' + text;
81624               } else {
81625                 text = escape(cap[1]);
81626                 href = text;
81627               }
81628               out += this.renderer.link(href, null, text);
81629               continue;
81630             }
81631
81632             // url (gfm)
81633             if (!this.inLink && (cap = this.rules.url.exec(src))) {
81634               if (cap[2] === '@') {
81635                 text = escape(cap[0]);
81636                 href = 'mailto:' + text;
81637               } else {
81638                 // do extended autolink path validation
81639                 do {
81640                   prevCapZero = cap[0];
81641                   cap[0] = this.rules._backpedal.exec(cap[0])[0];
81642                 } while (prevCapZero !== cap[0]);
81643                 text = escape(cap[0]);
81644                 if (cap[1] === 'www.') {
81645                   href = 'http://' + text;
81646                 } else {
81647                   href = text;
81648                 }
81649               }
81650               src = src.substring(cap[0].length);
81651               out += this.renderer.link(href, null, text);
81652               continue;
81653             }
81654
81655             // text
81656             if (cap = this.rules.text.exec(src)) {
81657               src = src.substring(cap[0].length);
81658               if (this.inRawBlock) {
81659                 out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]);
81660               } else {
81661                 out += this.renderer.text(escape(this.smartypants(cap[0])));
81662               }
81663               continue;
81664             }
81665
81666             if (src) {
81667               throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
81668             }
81669           }
81670
81671           return out;
81672         };
81673
81674         InlineLexer.escapes = function(text) {
81675           return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
81676         };
81677
81678         /**
81679          * Compile Link
81680          */
81681
81682         InlineLexer.prototype.outputLink = function(cap, link) {
81683           var href = link.href,
81684               title = link.title ? escape(link.title) : null;
81685
81686           return cap[0].charAt(0) !== '!'
81687             ? this.renderer.link(href, title, this.output(cap[1]))
81688             : this.renderer.image(href, title, escape(cap[1]));
81689         };
81690
81691         /**
81692          * Smartypants Transformations
81693          */
81694
81695         InlineLexer.prototype.smartypants = function(text) {
81696           if (!this.options.smartypants) return text;
81697           return text
81698             // em-dashes
81699             .replace(/---/g, '\u2014')
81700             // en-dashes
81701             .replace(/--/g, '\u2013')
81702             // opening singles
81703             .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
81704             // closing singles & apostrophes
81705             .replace(/'/g, '\u2019')
81706             // opening doubles
81707             .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
81708             // closing doubles
81709             .replace(/"/g, '\u201d')
81710             // ellipses
81711             .replace(/\.{3}/g, '\u2026');
81712         };
81713
81714         /**
81715          * Mangle Links
81716          */
81717
81718         InlineLexer.prototype.mangle = function(text) {
81719           if (!this.options.mangle) return text;
81720           var out = '',
81721               l = text.length,
81722               i = 0,
81723               ch;
81724
81725           for (; i < l; i++) {
81726             ch = text.charCodeAt(i);
81727             if (Math.random() > 0.5) {
81728               ch = 'x' + ch.toString(16);
81729             }
81730             out += '&#' + ch + ';';
81731           }
81732
81733           return out;
81734         };
81735
81736         /**
81737          * Renderer
81738          */
81739
81740         function Renderer(options) {
81741           this.options = options || marked.defaults;
81742         }
81743
81744         Renderer.prototype.code = function(code, infostring, escaped) {
81745           var lang = (infostring || '').match(/\S*/)[0];
81746           if (this.options.highlight) {
81747             var out = this.options.highlight(code, lang);
81748             if (out != null && out !== code) {
81749               escaped = true;
81750               code = out;
81751             }
81752           }
81753
81754           if (!lang) {
81755             return '<pre><code>'
81756               + (escaped ? code : escape(code, true))
81757               + '</code></pre>';
81758           }
81759
81760           return '<pre><code class="'
81761             + this.options.langPrefix
81762             + escape(lang, true)
81763             + '">'
81764             + (escaped ? code : escape(code, true))
81765             + '</code></pre>\n';
81766         };
81767
81768         Renderer.prototype.blockquote = function(quote) {
81769           return '<blockquote>\n' + quote + '</blockquote>\n';
81770         };
81771
81772         Renderer.prototype.html = function(html) {
81773           return html;
81774         };
81775
81776         Renderer.prototype.heading = function(text, level, raw, slugger) {
81777           if (this.options.headerIds) {
81778             return '<h'
81779               + level
81780               + ' id="'
81781               + this.options.headerPrefix
81782               + slugger.slug(raw)
81783               + '">'
81784               + text
81785               + '</h'
81786               + level
81787               + '>\n';
81788           }
81789           // ignore IDs
81790           return '<h' + level + '>' + text + '</h' + level + '>\n';
81791         };
81792
81793         Renderer.prototype.hr = function() {
81794           return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
81795         };
81796
81797         Renderer.prototype.list = function(body, ordered, start) {
81798           var type = ordered ? 'ol' : 'ul',
81799               startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
81800           return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
81801         };
81802
81803         Renderer.prototype.listitem = function(text) {
81804           return '<li>' + text + '</li>\n';
81805         };
81806
81807         Renderer.prototype.checkbox = function(checked) {
81808           return '<input '
81809             + (checked ? 'checked="" ' : '')
81810             + 'disabled="" type="checkbox"'
81811             + (this.options.xhtml ? ' /' : '')
81812             + '> ';
81813         };
81814
81815         Renderer.prototype.paragraph = function(text) {
81816           return '<p>' + text + '</p>\n';
81817         };
81818
81819         Renderer.prototype.table = function(header, body) {
81820           if (body) body = '<tbody>' + body + '</tbody>';
81821
81822           return '<table>\n'
81823             + '<thead>\n'
81824             + header
81825             + '</thead>\n'
81826             + body
81827             + '</table>\n';
81828         };
81829
81830         Renderer.prototype.tablerow = function(content) {
81831           return '<tr>\n' + content + '</tr>\n';
81832         };
81833
81834         Renderer.prototype.tablecell = function(content, flags) {
81835           var type = flags.header ? 'th' : 'td';
81836           var tag = flags.align
81837             ? '<' + type + ' align="' + flags.align + '">'
81838             : '<' + type + '>';
81839           return tag + content + '</' + type + '>\n';
81840         };
81841
81842         // span level renderer
81843         Renderer.prototype.strong = function(text) {
81844           return '<strong>' + text + '</strong>';
81845         };
81846
81847         Renderer.prototype.em = function(text) {
81848           return '<em>' + text + '</em>';
81849         };
81850
81851         Renderer.prototype.codespan = function(text) {
81852           return '<code>' + text + '</code>';
81853         };
81854
81855         Renderer.prototype.br = function() {
81856           return this.options.xhtml ? '<br/>' : '<br>';
81857         };
81858
81859         Renderer.prototype.del = function(text) {
81860           return '<del>' + text + '</del>';
81861         };
81862
81863         Renderer.prototype.link = function(href, title, text) {
81864           href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
81865           if (href === null) {
81866             return text;
81867           }
81868           var out = '<a href="' + escape(href) + '"';
81869           if (title) {
81870             out += ' title="' + title + '"';
81871           }
81872           out += '>' + text + '</a>';
81873           return out;
81874         };
81875
81876         Renderer.prototype.image = function(href, title, text) {
81877           href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
81878           if (href === null) {
81879             return text;
81880           }
81881
81882           var out = '<img src="' + href + '" alt="' + text + '"';
81883           if (title) {
81884             out += ' title="' + title + '"';
81885           }
81886           out += this.options.xhtml ? '/>' : '>';
81887           return out;
81888         };
81889
81890         Renderer.prototype.text = function(text) {
81891           return text;
81892         };
81893
81894         /**
81895          * TextRenderer
81896          * returns only the textual part of the token
81897          */
81898
81899         function TextRenderer() {}
81900
81901         // no need for block level renderers
81902
81903         TextRenderer.prototype.strong =
81904         TextRenderer.prototype.em =
81905         TextRenderer.prototype.codespan =
81906         TextRenderer.prototype.del =
81907         TextRenderer.prototype.text = function(text) {
81908           return text;
81909         };
81910
81911         TextRenderer.prototype.link =
81912         TextRenderer.prototype.image = function(href, title, text) {
81913           return '' + text;
81914         };
81915
81916         TextRenderer.prototype.br = function() {
81917           return '';
81918         };
81919
81920         /**
81921          * Parsing & Compiling
81922          */
81923
81924         function Parser(options) {
81925           this.tokens = [];
81926           this.token = null;
81927           this.options = options || marked.defaults;
81928           this.options.renderer = this.options.renderer || new Renderer();
81929           this.renderer = this.options.renderer;
81930           this.renderer.options = this.options;
81931           this.slugger = new Slugger();
81932         }
81933
81934         /**
81935          * Static Parse Method
81936          */
81937
81938         Parser.parse = function(src, options) {
81939           var parser = new Parser(options);
81940           return parser.parse(src);
81941         };
81942
81943         /**
81944          * Parse Loop
81945          */
81946
81947         Parser.prototype.parse = function(src) {
81948           this.inline = new InlineLexer(src.links, this.options);
81949           // use an InlineLexer with a TextRenderer to extract pure text
81950           this.inlineText = new InlineLexer(
81951             src.links,
81952             merge({}, this.options, { renderer: new TextRenderer() })
81953           );
81954           this.tokens = src.reverse();
81955
81956           var out = '';
81957           while (this.next()) {
81958             out += this.tok();
81959           }
81960
81961           return out;
81962         };
81963
81964         /**
81965          * Next Token
81966          */
81967
81968         Parser.prototype.next = function() {
81969           this.token = this.tokens.pop();
81970           return this.token;
81971         };
81972
81973         /**
81974          * Preview Next Token
81975          */
81976
81977         Parser.prototype.peek = function() {
81978           return this.tokens[this.tokens.length - 1] || 0;
81979         };
81980
81981         /**
81982          * Parse Text Tokens
81983          */
81984
81985         Parser.prototype.parseText = function() {
81986           var body = this.token.text;
81987
81988           while (this.peek().type === 'text') {
81989             body += '\n' + this.next().text;
81990           }
81991
81992           return this.inline.output(body);
81993         };
81994
81995         /**
81996          * Parse Current Token
81997          */
81998
81999         Parser.prototype.tok = function() {
82000           switch (this.token.type) {
82001             case 'space': {
82002               return '';
82003             }
82004             case 'hr': {
82005               return this.renderer.hr();
82006             }
82007             case 'heading': {
82008               return this.renderer.heading(
82009                 this.inline.output(this.token.text),
82010                 this.token.depth,
82011                 unescape(this.inlineText.output(this.token.text)),
82012                 this.slugger);
82013             }
82014             case 'code': {
82015               return this.renderer.code(this.token.text,
82016                 this.token.lang,
82017                 this.token.escaped);
82018             }
82019             case 'table': {
82020               var header = '',
82021                   body = '',
82022                   i,
82023                   row,
82024                   cell,
82025                   j;
82026
82027               // header
82028               cell = '';
82029               for (i = 0; i < this.token.header.length; i++) {
82030                 cell += this.renderer.tablecell(
82031                   this.inline.output(this.token.header[i]),
82032                   { header: true, align: this.token.align[i] }
82033                 );
82034               }
82035               header += this.renderer.tablerow(cell);
82036
82037               for (i = 0; i < this.token.cells.length; i++) {
82038                 row = this.token.cells[i];
82039
82040                 cell = '';
82041                 for (j = 0; j < row.length; j++) {
82042                   cell += this.renderer.tablecell(
82043                     this.inline.output(row[j]),
82044                     { header: false, align: this.token.align[j] }
82045                   );
82046                 }
82047
82048                 body += this.renderer.tablerow(cell);
82049               }
82050               return this.renderer.table(header, body);
82051             }
82052             case 'blockquote_start': {
82053               body = '';
82054
82055               while (this.next().type !== 'blockquote_end') {
82056                 body += this.tok();
82057               }
82058
82059               return this.renderer.blockquote(body);
82060             }
82061             case 'list_start': {
82062               body = '';
82063               var ordered = this.token.ordered,
82064                   start = this.token.start;
82065
82066               while (this.next().type !== 'list_end') {
82067                 body += this.tok();
82068               }
82069
82070               return this.renderer.list(body, ordered, start);
82071             }
82072             case 'list_item_start': {
82073               body = '';
82074               var loose = this.token.loose;
82075               var checked = this.token.checked;
82076               var task = this.token.task;
82077
82078               if (this.token.task) {
82079                 body += this.renderer.checkbox(checked);
82080               }
82081
82082               while (this.next().type !== 'list_item_end') {
82083                 body += !loose && this.token.type === 'text'
82084                   ? this.parseText()
82085                   : this.tok();
82086               }
82087               return this.renderer.listitem(body, task, checked);
82088             }
82089             case 'html': {
82090               // TODO parse inline content if parameter markdown=1
82091               return this.renderer.html(this.token.text);
82092             }
82093             case 'paragraph': {
82094               return this.renderer.paragraph(this.inline.output(this.token.text));
82095             }
82096             case 'text': {
82097               return this.renderer.paragraph(this.parseText());
82098             }
82099             default: {
82100               var errMsg = 'Token with "' + this.token.type + '" type was not found.';
82101               if (this.options.silent) {
82102                 console.log(errMsg);
82103               } else {
82104                 throw new Error(errMsg);
82105               }
82106             }
82107           }
82108         };
82109
82110         /**
82111          * Slugger generates header id
82112          */
82113
82114         function Slugger() {
82115           this.seen = {};
82116         }
82117
82118         /**
82119          * Convert string to unique id
82120          */
82121
82122         Slugger.prototype.slug = function(value) {
82123           var slug = value
82124             .toLowerCase()
82125             .trim()
82126             .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
82127             .replace(/\s/g, '-');
82128
82129           if (this.seen.hasOwnProperty(slug)) {
82130             var originalSlug = slug;
82131             do {
82132               this.seen[originalSlug]++;
82133               slug = originalSlug + '-' + this.seen[originalSlug];
82134             } while (this.seen.hasOwnProperty(slug));
82135           }
82136           this.seen[slug] = 0;
82137
82138           return slug;
82139         };
82140
82141         /**
82142          * Helpers
82143          */
82144
82145         function escape(html, encode) {
82146           if (encode) {
82147             if (escape.escapeTest.test(html)) {
82148               return html.replace(escape.escapeReplace, function(ch) { return escape.replacements[ch]; });
82149             }
82150           } else {
82151             if (escape.escapeTestNoEncode.test(html)) {
82152               return html.replace(escape.escapeReplaceNoEncode, function(ch) { return escape.replacements[ch]; });
82153             }
82154           }
82155
82156           return html;
82157         }
82158
82159         escape.escapeTest = /[&<>"']/;
82160         escape.escapeReplace = /[&<>"']/g;
82161         escape.replacements = {
82162           '&': '&amp;',
82163           '<': '&lt;',
82164           '>': '&gt;',
82165           '"': '&quot;',
82166           "'": '&#39;'
82167         };
82168
82169         escape.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
82170         escape.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
82171
82172         function unescape(html) {
82173           // explicitly match decimal, hex, and named HTML entities
82174           return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
82175             n = n.toLowerCase();
82176             if (n === 'colon') return ':';
82177             if (n.charAt(0) === '#') {
82178               return n.charAt(1) === 'x'
82179                 ? String.fromCharCode(parseInt(n.substring(2), 16))
82180                 : String.fromCharCode(+n.substring(1));
82181             }
82182             return '';
82183           });
82184         }
82185
82186         function edit(regex, opt) {
82187           regex = regex.source || regex;
82188           opt = opt || '';
82189           return {
82190             replace: function(name, val) {
82191               val = val.source || val;
82192               val = val.replace(/(^|[^\[])\^/g, '$1');
82193               regex = regex.replace(name, val);
82194               return this;
82195             },
82196             getRegex: function() {
82197               return new RegExp(regex, opt);
82198             }
82199           };
82200         }
82201
82202         function cleanUrl(sanitize, base, href) {
82203           if (sanitize) {
82204             try {
82205               var prot = decodeURIComponent(unescape(href))
82206                 .replace(/[^\w:]/g, '')
82207                 .toLowerCase();
82208             } catch (e) {
82209               return null;
82210             }
82211             if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
82212               return null;
82213             }
82214           }
82215           if (base && !originIndependentUrl.test(href)) {
82216             href = resolveUrl(base, href);
82217           }
82218           try {
82219             href = encodeURI(href).replace(/%25/g, '%');
82220           } catch (e) {
82221             return null;
82222           }
82223           return href;
82224         }
82225
82226         function resolveUrl(base, href) {
82227           if (!baseUrls[' ' + base]) {
82228             // we can ignore everything in base after the last slash of its path component,
82229             // but we might need to add _that_
82230             // https://tools.ietf.org/html/rfc3986#section-3
82231             if (/^[^:]+:\/*[^/]*$/.test(base)) {
82232               baseUrls[' ' + base] = base + '/';
82233             } else {
82234               baseUrls[' ' + base] = rtrim(base, '/', true);
82235             }
82236           }
82237           base = baseUrls[' ' + base];
82238
82239           if (href.slice(0, 2) === '//') {
82240             return base.replace(/:[\s\S]*/, ':') + href;
82241           } else if (href.charAt(0) === '/') {
82242             return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
82243           } else {
82244             return base + href;
82245           }
82246         }
82247         var baseUrls = {};
82248         var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
82249
82250         function noop() {}
82251         noop.exec = noop;
82252
82253         function merge(obj) {
82254           var i = 1,
82255               target,
82256               key;
82257
82258           for (; i < arguments.length; i++) {
82259             target = arguments[i];
82260             for (key in target) {
82261               if (Object.prototype.hasOwnProperty.call(target, key)) {
82262                 obj[key] = target[key];
82263               }
82264             }
82265           }
82266
82267           return obj;
82268         }
82269
82270         function splitCells(tableRow, count) {
82271           // ensure that every cell-delimiting pipe has a space
82272           // before it to distinguish it from an escaped pipe
82273           var row = tableRow.replace(/\|/g, function(match, offset, str) {
82274                 var escaped = false,
82275                     curr = offset;
82276                 while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
82277                 if (escaped) {
82278                   // odd number of slashes means | is escaped
82279                   // so we leave it alone
82280                   return '|';
82281                 } else {
82282                   // add space before unescaped |
82283                   return ' |';
82284                 }
82285               }),
82286               cells = row.split(/ \|/),
82287               i = 0;
82288
82289           if (cells.length > count) {
82290             cells.splice(count);
82291           } else {
82292             while (cells.length < count) cells.push('');
82293           }
82294
82295           for (; i < cells.length; i++) {
82296             // leading or trailing whitespace is ignored per the gfm spec
82297             cells[i] = cells[i].trim().replace(/\\\|/g, '|');
82298           }
82299           return cells;
82300         }
82301
82302         // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
82303         // /c*$/ is vulnerable to REDOS.
82304         // invert: Remove suffix of non-c chars instead. Default falsey.
82305         function rtrim(str, c, invert) {
82306           if (str.length === 0) {
82307             return '';
82308           }
82309
82310           // Length of suffix matching the invert condition.
82311           var suffLen = 0;
82312
82313           // Step left until we fail to match the invert condition.
82314           while (suffLen < str.length) {
82315             var currChar = str.charAt(str.length - suffLen - 1);
82316             if (currChar === c && !invert) {
82317               suffLen++;
82318             } else if (currChar !== c && invert) {
82319               suffLen++;
82320             } else {
82321               break;
82322             }
82323           }
82324
82325           return str.substr(0, str.length - suffLen);
82326         }
82327
82328         function findClosingBracket(str, b) {
82329           if (str.indexOf(b[1]) === -1) {
82330             return -1;
82331           }
82332           var level = 0;
82333           for (var i = 0; i < str.length; i++) {
82334             if (str[i] === '\\') {
82335               i++;
82336             } else if (str[i] === b[0]) {
82337               level++;
82338             } else if (str[i] === b[1]) {
82339               level--;
82340               if (level < 0) {
82341                 return i;
82342               }
82343             }
82344           }
82345           return -1;
82346         }
82347
82348         function checkSanitizeDeprecation(opt) {
82349           if (opt && opt.sanitize && !opt.silent) {
82350             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');
82351           }
82352         }
82353
82354         /**
82355          * Marked
82356          */
82357
82358         function marked(src, opt, callback) {
82359           // throw error in case of non string input
82360           if (typeof src === 'undefined' || src === null) {
82361             throw new Error('marked(): input parameter is undefined or null');
82362           }
82363           if (typeof src !== 'string') {
82364             throw new Error('marked(): input parameter is of type '
82365               + Object.prototype.toString.call(src) + ', string expected');
82366           }
82367
82368           if (callback || typeof opt === 'function') {
82369             if (!callback) {
82370               callback = opt;
82371               opt = null;
82372             }
82373
82374             opt = merge({}, marked.defaults, opt || {});
82375             checkSanitizeDeprecation(opt);
82376
82377             var highlight = opt.highlight,
82378                 tokens,
82379                 pending,
82380                 i = 0;
82381
82382             try {
82383               tokens = Lexer.lex(src, opt);
82384             } catch (e) {
82385               return callback(e);
82386             }
82387
82388             pending = tokens.length;
82389
82390             var done = function(err) {
82391               if (err) {
82392                 opt.highlight = highlight;
82393                 return callback(err);
82394               }
82395
82396               var out;
82397
82398               try {
82399                 out = Parser.parse(tokens, opt);
82400               } catch (e) {
82401                 err = e;
82402               }
82403
82404               opt.highlight = highlight;
82405
82406               return err
82407                 ? callback(err)
82408                 : callback(null, out);
82409             };
82410
82411             if (!highlight || highlight.length < 3) {
82412               return done();
82413             }
82414
82415             delete opt.highlight;
82416
82417             if (!pending) return done();
82418
82419             for (; i < tokens.length; i++) {
82420               (function(token) {
82421                 if (token.type !== 'code') {
82422                   return --pending || done();
82423                 }
82424                 return highlight(token.text, token.lang, function(err, code) {
82425                   if (err) return done(err);
82426                   if (code == null || code === token.text) {
82427                     return --pending || done();
82428                   }
82429                   token.text = code;
82430                   token.escaped = true;
82431                   --pending || done();
82432                 });
82433               })(tokens[i]);
82434             }
82435
82436             return;
82437           }
82438           try {
82439             if (opt) opt = merge({}, marked.defaults, opt);
82440             checkSanitizeDeprecation(opt);
82441             return Parser.parse(Lexer.lex(src, opt), opt);
82442           } catch (e) {
82443             e.message += '\nPlease report this to https://github.com/markedjs/marked.';
82444             if ((opt || marked.defaults).silent) {
82445               return '<p>An error occurred:</p><pre>'
82446                 + escape(e.message + '', true)
82447                 + '</pre>';
82448             }
82449             throw e;
82450           }
82451         }
82452
82453         /**
82454          * Options
82455          */
82456
82457         marked.options =
82458         marked.setOptions = function(opt) {
82459           merge(marked.defaults, opt);
82460           return marked;
82461         };
82462
82463         marked.getDefaults = function() {
82464           return {
82465             baseUrl: null,
82466             breaks: false,
82467             gfm: true,
82468             headerIds: true,
82469             headerPrefix: '',
82470             highlight: null,
82471             langPrefix: 'language-',
82472             mangle: true,
82473             pedantic: false,
82474             renderer: new Renderer(),
82475             sanitize: false,
82476             sanitizer: null,
82477             silent: false,
82478             smartLists: false,
82479             smartypants: false,
82480             xhtml: false
82481           };
82482         };
82483
82484         marked.defaults = marked.getDefaults();
82485
82486         /**
82487          * Expose
82488          */
82489
82490         marked.Parser = Parser;
82491         marked.parser = Parser.parse;
82492
82493         marked.Renderer = Renderer;
82494         marked.TextRenderer = TextRenderer;
82495
82496         marked.Lexer = Lexer;
82497         marked.lexer = Lexer.lex;
82498
82499         marked.InlineLexer = InlineLexer;
82500         marked.inlineLexer = InlineLexer.output;
82501
82502         marked.Slugger = Slugger;
82503
82504         marked.parse = marked;
82505
82506         {
82507           module.exports = marked;
82508         }
82509         })();
82510         });
82511
82512         function pointBox(loc, context) {
82513             var rect = context.surfaceRect();
82514             var point = context.curtainProjection(loc);
82515             return {
82516                 left: point[0] + rect.left - 40,
82517                 top: point[1] + rect.top - 60,
82518                 width: 80,
82519                 height: 90
82520             };
82521         }
82522
82523
82524         function pad$2(locOrBox, padding, context) {
82525             var box;
82526             if (locOrBox instanceof Array) {
82527                 var rect = context.surfaceRect();
82528                 var point = context.curtainProjection(locOrBox);
82529                 box = {
82530                     left: point[0] + rect.left,
82531                     top: point[1] + rect.top
82532                 };
82533             } else {
82534                 box = locOrBox;
82535             }
82536
82537             return {
82538                 left: box.left - padding,
82539                 top: box.top - padding,
82540                 width: (box.width || 0) + 2 * padding,
82541                 height: (box.width || 0) + 2 * padding
82542             };
82543         }
82544
82545
82546         function icon(name, svgklass, useklass) {
82547             return '<svg class="icon ' + (svgklass || '') + '">' +
82548                  '<use xlink:href="' + name + '"' +
82549                  (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
82550         }
82551
82552
82553         function slugify(text) {
82554             return text.toString().toLowerCase()
82555                 .replace(/\s+/g, '-')           // Replace spaces with -
82556                 .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
82557                 .replace(/\-\-+/g, '-')         // Replace multiple - with single -
82558                 .replace(/^-+/, '')             // Trim - from start of text
82559                 .replace(/-+$/, '');            // Trim - from end of text
82560         }
82561
82562
82563         // console warning for missing walkthrough names
82564         var missingStrings = {};
82565         function checkKey(key, text) {
82566             if (t(key, { default: undefined}) === undefined) {
82567                 if (missingStrings.hasOwnProperty(key)) return;  // warn once
82568                 missingStrings[key] = text;
82569                 var missing = key + ': ' + text;
82570                 if (typeof console !== 'undefined') console.log(missing); // eslint-disable-line
82571             }
82572         }
82573
82574
82575         function localize(obj) {
82576             var key;
82577
82578             // Assign name if entity has one..
82579             var name = obj.tags && obj.tags.name;
82580             if (name) {
82581                 key = 'intro.graph.name.' + slugify(name);
82582                 obj.tags.name = t(key, { default: name });
82583                 checkKey(key, name);
82584             }
82585
82586             // Assign street name if entity has one..
82587             var street = obj.tags && obj.tags['addr:street'];
82588             if (street) {
82589                 key = 'intro.graph.name.' + slugify(street);
82590                 obj.tags['addr:street'] = t(key, { default: street });
82591                 checkKey(key, street);
82592
82593                 // Add address details common across walkthrough..
82594                 var addrTags = [
82595                     'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
82596                     'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
82597                 ];
82598                 addrTags.forEach(function(k) {
82599                     var key = 'intro.graph.' + k;
82600                     var tag = 'addr:' + k;
82601                     var val = obj.tags && obj.tags[tag];
82602                     var str = t(key, { default: val });
82603
82604                     if (str) {
82605                         if (str.match(/^<.*>$/) !== null) {
82606                             delete obj.tags[tag];
82607                         } else {
82608                             obj.tags[tag] = str;
82609                         }
82610                     }
82611                 });
82612             }
82613
82614             return obj;
82615         }
82616
82617
82618         // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
82619         function isMostlySquare(points) {
82620             // note: uses 15 here instead of the 12 from actionOrthogonalize because
82621             // actionOrthogonalize can actually straighten some larger angles as it iterates
82622             var threshold = 15; // degrees within right or straight
82623             var lowerBound = Math.cos((90 - threshold) * Math.PI / 180);  // near right
82624             var upperBound = Math.cos(threshold * Math.PI / 180);         // near straight
82625
82626             for (var i = 0; i < points.length; i++) {
82627                 var a = points[(i - 1 + points.length) % points.length];
82628                 var origin = points[i];
82629                 var b = points[(i + 1) % points.length];
82630
82631                 var dotp = geoVecNormalizedDot(a, b, origin);
82632                 var mag = Math.abs(dotp);
82633                 if (mag > lowerBound && mag < upperBound) {
82634                     return false;
82635                 }
82636             }
82637
82638             return true;
82639         }
82640
82641
82642         function selectMenuItem(operation) {
82643             var selector = '.edit-menu .edit-menu-item-' + operation +
82644                 ', .radial-menu .radial-menu-item-' + operation;
82645             return d3_select(selector);
82646         }
82647
82648
82649         function transitionTime(point1, point2) {
82650             var distance = geoSphericalDistance(point1, point2);
82651             if (distance === 0)
82652                 return 0;
82653             else if (distance < 80)
82654                 return 500;
82655             else
82656                 return 1000;
82657         }
82658
82659         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]}};
82660
82661         // Tooltips and svg mask used to highlight certain features
82662         function uiCurtain() {
82663
82664             var surface = d3_select(null),
82665                 tooltip = d3_select(null),
82666                 darkness = d3_select(null);
82667
82668             function curtain(selection) {
82669                 surface = selection
82670                     .append('svg')
82671                     .attr('id', 'curtain')
82672                     .style('z-index', 1000)
82673                     .style('pointer-events', 'none')
82674                     .style('position', 'absolute')
82675                     .style('top', 0)
82676                     .style('left', 0);
82677
82678                 darkness = surface.append('path')
82679                     .attr('x', 0)
82680                     .attr('y', 0)
82681                     .attr('class', 'curtain-darkness');
82682
82683                 d3_select(window).on('resize.curtain', resize);
82684
82685                 tooltip = selection.append('div')
82686                     .attr('class', 'tooltip')
82687                     .style('z-index', 1002);
82688
82689                 tooltip
82690                     .append('div')
82691                     .attr('class', 'tooltip-arrow');
82692
82693                 tooltip
82694                     .append('div')
82695                     .attr('class', 'tooltip-inner');
82696
82697                 resize();
82698
82699
82700                 function resize() {
82701                     surface
82702                         .attr('width', window.innerWidth)
82703                         .attr('height', window.innerHeight);
82704                     curtain.cut(darkness.datum());
82705                 }
82706             }
82707
82708
82709             /**
82710              * Reveal cuts the curtain to highlight the given box,
82711              * and shows a tooltip with instructions next to the box.
82712              *
82713              * @param  {String|ClientRect} [box]   box used to cut the curtain
82714              * @param  {String}    [text]          text for a tooltip
82715              * @param  {Object}    [options]
82716              * @param  {string}    [options.tooltipClass]    optional class to add to the tooltip
82717              * @param  {integer}   [options.duration]        transition time in milliseconds
82718              * @param  {string}    [options.buttonText]      if set, create a button with this text label
82719              * @param  {function}  [options.buttonCallback]  if set, the callback for the button
82720              * @param  {String|ClientRect} [options.tooltipBox]  box for tooltip position, if different from box for the curtain
82721              */
82722             curtain.reveal = function(box, text, options) {
82723                 if (typeof box === 'string') {
82724                     box = d3_select(box).node();
82725                 }
82726                 if (box && box.getBoundingClientRect) {
82727                     box = copyBox(box.getBoundingClientRect());
82728                 }
82729
82730                 options = options || {};
82731
82732                 var tooltipBox;
82733                 if (options.tooltipBox) {
82734                     tooltipBox = options.tooltipBox;
82735                     if (typeof tooltipBox === 'string') {
82736                         tooltipBox = d3_select(tooltipBox).node();
82737                     }
82738                     if (tooltipBox && tooltipBox.getBoundingClientRect) {
82739                         tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
82740                     }
82741                 } else {
82742                     tooltipBox = box;
82743                 }
82744
82745                 if (tooltipBox && text) {
82746                     // pseudo markdown bold text for the instruction section..
82747                     var parts = text.split('**');
82748                     var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
82749                     if (parts[1]) {
82750                         html += '<span class="instruction">' + parts[1] + '</span>';
82751                     }
82752
82753                     html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');   // emphasis
82754                     html = html.replace(/\{br\}/g, '<br/><br/>');       // linebreak
82755
82756                     if (options.buttonText && options.buttonCallback) {
82757                         html += '<div class="button-section">' +
82758                             '<button href="#" class="button action">' + options.buttonText + '</button></div>';
82759                     }
82760
82761                     var classes = 'curtain-tooltip tooltip in ' + (options.tooltipClass || '');
82762                     tooltip
82763                         .classed(classes, true)
82764                         .selectAll('.tooltip-inner')
82765                         .html(html);
82766
82767                     if (options.buttonText && options.buttonCallback) {
82768                         var button = tooltip.selectAll('.button-section .button.action');
82769                         button
82770                             .on('click', function() {
82771                                 event.preventDefault();
82772                                 options.buttonCallback();
82773                             });
82774                     }
82775
82776                     var tip = copyBox(tooltip.node().getBoundingClientRect()),
82777                         w = window.innerWidth,
82778                         h = window.innerHeight,
82779                         tooltipWidth = 200,
82780                         tooltipArrow = 5,
82781                         side, pos;
82782
82783
82784                     // hack: this will have bottom placement,
82785                     // so need to reserve extra space for the tooltip illustration.
82786                     if (options.tooltipClass === 'intro-mouse') {
82787                         tip.height += 80;
82788                     }
82789
82790                     // trim box dimensions to just the portion that fits in the window..
82791                     if (tooltipBox.top + tooltipBox.height > h) {
82792                         tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
82793                     }
82794                     if (tooltipBox.left + tooltipBox.width > w) {
82795                         tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
82796                     }
82797
82798                     // determine tooltip placement..
82799
82800                     if (tooltipBox.top + tooltipBox.height < 100) {
82801                         // tooltip below box..
82802                         side = 'bottom';
82803                         pos = [
82804                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
82805                             tooltipBox.top + tooltipBox.height
82806                         ];
82807
82808                     } else if (tooltipBox.top > h - 140) {
82809                         // tooltip above box..
82810                         side = 'top';
82811                         pos = [
82812                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
82813                             tooltipBox.top - tip.height
82814                         ];
82815
82816                     } else {
82817                         // tooltip to the side of the tooltipBox..
82818                         var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
82819
82820                         if (textDirection === 'rtl') {
82821                             if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
82822                                 side = 'right';
82823                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
82824
82825                             } else {
82826                                 side = 'left';
82827                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
82828                             }
82829
82830                         } else {
82831                             if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
82832                                 side = 'left';
82833                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
82834                             }
82835                             else {
82836                                 side = 'right';
82837                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
82838                             }
82839                         }
82840                     }
82841
82842                     if (options.duration !== 0 || !tooltip.classed(side)) {
82843                         tooltip.call(uiToggle(true));
82844                     }
82845
82846                     tooltip
82847                         .style('top', pos[1] + 'px')
82848                         .style('left', pos[0] + 'px')
82849                         .attr('class', classes + ' ' + side);
82850
82851
82852                     // shift tooltip-inner if it is very close to the top or bottom edge
82853                     // (doesn't affect the placement of the tooltip-arrow)
82854                     var shiftY = 0;
82855                     if (side === 'left' || side === 'right') {
82856                         if (pos[1] < 60) {
82857                             shiftY = 60 - pos[1];
82858                         }
82859                         else if (pos[1] + tip.height > h - 100) {
82860                             shiftY = h - pos[1] - tip.height - 100;
82861                         }
82862                     }
82863                     tooltip.selectAll('.tooltip-inner')
82864                         .style('top', shiftY + 'px');
82865
82866                 } else {
82867                     tooltip
82868                         .classed('in', false)
82869                         .call(uiToggle(false));
82870                 }
82871
82872                 curtain.cut(box, options.duration);
82873
82874                 return tooltip;
82875             };
82876
82877
82878             curtain.cut = function(datum, duration) {
82879                 darkness.datum(datum)
82880                     .interrupt();
82881
82882                 var selection;
82883                 if (duration === 0) {
82884                     selection = darkness;
82885                 } else {
82886                     selection = darkness
82887                         .transition()
82888                         .duration(duration || 600)
82889                         .ease(linear$1);
82890                 }
82891
82892                 selection
82893                     .attr('d', function(d) {
82894                         var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
82895                             window.innerWidth + ',' + window.innerHeight + 'L' +
82896                             window.innerWidth + ',0 Z';
82897
82898                         if (!d) return string;
82899                         return string + 'M' +
82900                             d.left + ',' + d.top + 'L' +
82901                             d.left + ',' + (d.top + d.height) + 'L' +
82902                             (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
82903                             (d.left + d.width) + ',' + (d.top) + 'Z';
82904
82905                     });
82906             };
82907
82908
82909             curtain.remove = function() {
82910                 surface.remove();
82911                 tooltip.remove();
82912                 d3_select(window).on('resize.curtain', null);
82913             };
82914
82915
82916             // ClientRects are immutable, so copy them to an object,
82917             // in case we need to trim the height/width.
82918             function copyBox(src) {
82919                 return {
82920                     top: src.top,
82921                     right: src.right,
82922                     bottom: src.bottom,
82923                     left: src.left,
82924                     width: src.width,
82925                     height: src.height
82926                 };
82927             }
82928
82929
82930             return curtain;
82931         }
82932
82933         function uiIntroWelcome(context, reveal) {
82934             var dispatch$1 = dispatch('done');
82935             var listener = clickListener();
82936
82937             var chapter = {
82938                 title: 'intro.welcome.title'
82939             };
82940
82941
82942             function welcome() {
82943                 context.map().centerZoom([-85.63591, 41.94285], 19);
82944                 reveal('.intro-nav-wrap .chapter-welcome',
82945                     t('intro.welcome.welcome'),
82946                     { buttonText: t('intro.ok'), buttonCallback: practice }
82947                 );
82948             }
82949
82950             function practice() {
82951                 reveal('.intro-nav-wrap .chapter-welcome',
82952                     t('intro.welcome.practice'),
82953                     { buttonText: t('intro.ok'), buttonCallback: words }
82954                 );
82955             }
82956
82957             function words() {
82958                 reveal('.intro-nav-wrap .chapter-welcome',
82959                     t('intro.welcome.words'),
82960                     { buttonText: t('intro.ok'), buttonCallback: mouse }
82961                 );
82962             }
82963
82964
82965             function mouse() {
82966                 reveal('.intro-nav-wrap .chapter-welcome',
82967                     t('intro.welcome.mouse'),
82968                     { buttonText: t('intro.ok'), buttonCallback: leftClick }
82969                 );
82970             }
82971
82972
82973             function leftClick() {
82974                 var counter = 0;
82975                 var times = 5;
82976
82977                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
82978                     t('intro.welcome.leftclick', { num: times }),
82979                     { tooltipClass: 'intro-mouse' }
82980                 );
82981
82982                 tooltip.selectAll('.tooltip-inner')
82983                     .insert('svg', 'span')
82984                     .attr('class', 'tooltip-illustration')
82985                     .append('use')
82986                     .attr('xlink:href', '#iD-walkthrough-mouse');
82987
82988                 tooltip
82989                     .append('div')
82990                     .attr('class', 'counter');
82991
82992                 tooltip.call(listener);
82993
82994                 listener.on('click', function(which) {
82995                     if (which === 'left') {
82996                         d3_select('.curtain-tooltip.intro-mouse .counter')
82997                             .text(String(++counter));
82998
82999                         if (counter === times) {
83000                             window.setTimeout(function() { continueTo(rightClick); }, 1000);
83001                         }
83002                     }
83003                 });
83004
83005                 function continueTo(nextStep) {
83006                     listener.on('click', null);
83007                     tooltip.call(listener.off);
83008                     tooltip.select('.counter').remove();
83009                     nextStep();
83010                 }
83011             }
83012
83013
83014             function rightClick() {
83015                 var counter = 0;
83016                 var times = 5;
83017
83018                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
83019                     t('intro.welcome.rightclick', { num: times }),
83020                     { tooltipClass: 'intro-mouse' }
83021                 );
83022
83023                 tooltip.selectAll('.tooltip-inner')
83024                     .insert('svg', 'span')
83025                     .attr('class', 'tooltip-illustration')
83026                     .append('use')
83027                     .attr('xlink:href', '#iD-walkthrough-mouse');
83028
83029                 tooltip
83030                     .append('div')
83031                     .attr('class', 'counter');
83032
83033                 tooltip.call(listener);
83034
83035                 listener.on('click', function(which) {
83036                     if (which === 'right') {
83037                         d3_select('.curtain-tooltip.intro-mouse .counter')
83038                             .text(String(++counter));
83039
83040                         if (counter === times) {
83041                             window.setTimeout(function() { continueTo(chapters); }, 1000);
83042                         }
83043                     }
83044                 });
83045
83046                 function continueTo(nextStep) {
83047                     listener.on('click', null);
83048                     tooltip.call(listener.off);
83049                     tooltip.select('.counter').remove();
83050                     nextStep();
83051                 }
83052             }
83053
83054
83055             function chapters() {
83056                 dispatch$1.call('done');
83057                 reveal('.intro-nav-wrap .chapter-navigation',
83058                     t('intro.welcome.chapters', { next: t('intro.navigation.title') })
83059                 );
83060             }
83061
83062
83063             chapter.enter = function() {
83064                 welcome();
83065             };
83066
83067
83068             chapter.exit = function() {
83069                 listener.off();
83070                 d3_select('.curtain-tooltip.intro-mouse')
83071                     .selectAll('.counter')
83072                     .remove();
83073             };
83074
83075
83076             chapter.restart = function() {
83077                 chapter.exit();
83078                 chapter.enter();
83079             };
83080
83081
83082             return utilRebind(chapter, dispatch$1, 'on');
83083         }
83084
83085
83086
83087         function clickListener() {
83088             var dispatch$1 = dispatch('click');
83089             var minTime = 120;
83090             var tooltip = d3_select(null);
83091             var down = {};
83092
83093             // `down` keeps track of which buttons/keys are down.
83094             // Setting a property in `down` happens immediately.
83095             // Unsetting a property in `down` is delayed because
83096             //   on Windows a contextmenu event happens after keyup/mouseup
83097
83098             function keydown() {
83099                 if (event.keyCode === 93)  {   // context menu
83100                     event.preventDefault();
83101                     event.stopPropagation();
83102                     down.menu = event.timeStamp;
83103                     tooltip.classed('rightclick', true);
83104                 }
83105             }
83106
83107
83108             function keyup() {
83109                 if (event.keyCode === 93)  {   // context menu
83110                     event.preventDefault();
83111                     event.stopPropagation();
83112                     var endTime = event.timeStamp;
83113                     var startTime = down.menu || endTime;
83114                     var delay = (endTime - startTime < minTime) ? minTime : 0;
83115
83116                     window.setTimeout(function() {
83117                         tooltip.classed('rightclick', false);
83118                         down.menu = undefined;  // delayed, for Windows
83119                     }, delay);
83120
83121                     dispatch$1.call('click', this, 'right');
83122                 }
83123             }
83124
83125
83126             function mousedown() {
83127                 var button = event.button;
83128                 if (button === 0 && !event.ctrlKey) {
83129                     tooltip.classed('leftclick', true);
83130                 } else if (button === 2) {
83131                     tooltip.classed('rightclick', true);
83132                 }
83133                 down[button] = event.timeStamp;
83134             }
83135
83136
83137             function mouseup() {
83138                 var button = event.button;
83139                 var endTime = event.timeStamp;
83140                 var startTime = down[button] || endTime;
83141                 var delay = (endTime - startTime < minTime) ? minTime : 0;
83142
83143                 if (button === 0 && !event.ctrlKey) {
83144                     window.setTimeout(function() {
83145                         tooltip.classed('leftclick', false);
83146                         down[button] = undefined;  // delayed, for Windows
83147                     }, delay);
83148
83149                     dispatch$1.call('click', this, 'left');
83150
83151                 } else if (button === 2) {
83152                     window.setTimeout(function() {
83153                         tooltip.classed('rightclick', false);
83154                         down[button] = undefined;  // delayed, for Windows
83155                     }, delay);
83156
83157                     dispatch$1.call('click', this, 'right');
83158
83159                 } else {
83160                     window.setTimeout(function() {
83161                         down[button] = undefined;  // delayed, for Windows
83162                     }, delay);
83163                 }
83164             }
83165
83166
83167             function contextmenu() {
83168                 event.preventDefault();
83169                 event.stopPropagation();
83170                 if (!down[2] && !down.menu) {
83171                     tooltip.classed('rightclick', true);
83172                     window.setTimeout(function() {
83173                         tooltip.classed('rightclick', false);
83174                     }, minTime);
83175                     dispatch$1.call('click', this, 'right');
83176                 }
83177             }
83178
83179
83180             var behavior = function(selection) {
83181                 tooltip = selection;
83182                 down = {};
83183
83184                 d3_select(window)
83185                     .on('keydown.intro', keydown)
83186                     .on('keyup.intro', keyup)
83187                     .on('mousedown.intro', mousedown)
83188                     .on('mouseup.intro', mouseup)
83189                     .on('contextmenu.intro', contextmenu);
83190             };
83191
83192
83193             behavior.off = function() {
83194                 d3_select(window)
83195                     .on('keydown.intro', null)
83196                     .on('keyup.intro', null)
83197                     .on('mousedown.intro', null)
83198                     .on('mouseup.intro', null)
83199                     .on('contextmenu.intro', null);
83200
83201                 tooltip
83202                     .classed('leftclick', false)
83203                     .classed('rightclick', false);
83204             };
83205
83206             return utilRebind(behavior, dispatch$1, 'on');
83207         }
83208
83209         function uiIntroNavigation(context, reveal) {
83210             var dispatch$1 = dispatch('done');
83211             var timeouts = [];
83212             var hallId = 'n2061';
83213             var townHall = [-85.63591, 41.94285];
83214             var springStreetId = 'w397';
83215             var springStreetEndId = 'n1834';
83216             var springStreet = [-85.63582, 41.94255];
83217             var onewayField = context.presets().field('oneway');
83218             var maxspeedField = context.presets().field('maxspeed');
83219
83220
83221             var chapter = {
83222                 title: 'intro.navigation.title'
83223             };
83224
83225
83226             function timeout(f, t) {
83227                 timeouts.push(window.setTimeout(f, t));
83228             }
83229
83230
83231             function eventCancel() {
83232                 event.stopPropagation();
83233                 event.preventDefault();
83234             }
83235
83236
83237             function isTownHallSelected() {
83238                 var ids = context.selectedIDs();
83239                 return ids.length === 1 && ids[0] === hallId;
83240             }
83241
83242
83243             function dragMap() {
83244                 context.enter(modeBrowse(context));
83245                 context.history().reset('initial');
83246
83247                 var msec = transitionTime(townHall, context.map().center());
83248                 if (msec) { reveal(null, null, { duration: 0 }); }
83249                 context.map().centerZoomEase(townHall, 19, msec);
83250
83251                 timeout(function() {
83252                     var centerStart = context.map().center();
83253
83254                     reveal('#surface', t('intro.navigation.drag'));
83255                     context.map().on('drawn.intro', function() {
83256                         reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
83257                     });
83258
83259                     context.map().on('move.intro', function() {
83260                         var centerNow = context.map().center();
83261                         if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
83262                             context.map().on('move.intro', null);
83263                             timeout(function() { continueTo(zoomMap); }, 3000);
83264                         }
83265                     });
83266
83267                 }, msec + 100);
83268
83269                 function continueTo(nextStep) {
83270                     context.map().on('move.intro drawn.intro', null);
83271                     nextStep();
83272                 }
83273             }
83274
83275
83276             function zoomMap() {
83277                 var zoomStart = context.map().zoom();
83278
83279                 reveal('#surface',
83280                     t('intro.navigation.zoom', {
83281                         plus: icon('#iD-icon-plus', 'pre-text'),
83282                         minus: icon('#iD-icon-minus', 'pre-text')
83283                     })
83284                 );
83285
83286                 context.map().on('drawn.intro', function() {
83287                     reveal('#surface',
83288                         t('intro.navigation.zoom', {
83289                             plus: icon('#iD-icon-plus', 'pre-text'),
83290                             minus: icon('#iD-icon-minus', 'pre-text')
83291                         }), { duration: 0 }
83292                     );
83293                 });
83294
83295                 context.map().on('move.intro', function() {
83296                     if (context.map().zoom() !== zoomStart) {
83297                         context.map().on('move.intro', null);
83298                         timeout(function() { continueTo(features); }, 3000);
83299                     }
83300                 });
83301
83302                 function continueTo(nextStep) {
83303                     context.map().on('move.intro drawn.intro', null);
83304                     nextStep();
83305                 }
83306             }
83307
83308
83309             function features() {
83310                 var onClick = function() { continueTo(pointsLinesAreas); };
83311
83312                 reveal('#surface', t('intro.navigation.features'),
83313                     { buttonText: t('intro.ok'), buttonCallback: onClick }
83314                 );
83315
83316                 context.map().on('drawn.intro', function() {
83317                     reveal('#surface', t('intro.navigation.features'),
83318                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83319                     );
83320                 });
83321
83322                 function continueTo(nextStep) {
83323                     context.map().on('drawn.intro', null);
83324                     nextStep();
83325                 }
83326             }
83327
83328             function pointsLinesAreas() {
83329                 var onClick = function() { continueTo(nodesWays); };
83330
83331                 reveal('#surface', t('intro.navigation.points_lines_areas'),
83332                     { buttonText: t('intro.ok'), buttonCallback: onClick }
83333                 );
83334
83335                 context.map().on('drawn.intro', function() {
83336                     reveal('#surface', t('intro.navigation.points_lines_areas'),
83337                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83338                     );
83339                 });
83340
83341                 function continueTo(nextStep) {
83342                     context.map().on('drawn.intro', null);
83343                     nextStep();
83344                 }
83345             }
83346
83347             function nodesWays() {
83348                 var onClick = function() { continueTo(clickTownHall); };
83349
83350                 reveal('#surface', t('intro.navigation.nodes_ways'),
83351                     { buttonText: t('intro.ok'), buttonCallback: onClick }
83352                 );
83353
83354                 context.map().on('drawn.intro', function() {
83355                     reveal('#surface', t('intro.navigation.nodes_ways'),
83356                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83357                     );
83358                 });
83359
83360                 function continueTo(nextStep) {
83361                     context.map().on('drawn.intro', null);
83362                     nextStep();
83363                 }
83364             }
83365
83366             function clickTownHall() {
83367                 context.enter(modeBrowse(context));
83368                 context.history().reset('initial');
83369
83370                 var entity = context.hasEntity(hallId);
83371                 if (!entity) return;
83372                 reveal(null, null, { duration: 0 });
83373                 context.map().centerZoomEase(entity.loc, 19, 500);
83374
83375                 timeout(function() {
83376                     var entity = context.hasEntity(hallId);
83377                     if (!entity) return;
83378                     var box = pointBox(entity.loc, context);
83379                     reveal(box, t('intro.navigation.click_townhall'));
83380
83381                     context.map().on('move.intro drawn.intro', function() {
83382                         var entity = context.hasEntity(hallId);
83383                         if (!entity) return;
83384                         var box = pointBox(entity.loc, context);
83385                         reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
83386                     });
83387
83388                     context.on('enter.intro', function() {
83389                         if (isTownHallSelected()) continueTo(selectedTownHall);
83390                     });
83391
83392                 }, 550);  // after centerZoomEase
83393
83394                 context.history().on('change.intro', function() {
83395                     if (!context.hasEntity(hallId)) {
83396                         continueTo(clickTownHall);
83397                     }
83398                 });
83399
83400                 function continueTo(nextStep) {
83401                     context.on('enter.intro', null);
83402                     context.map().on('move.intro drawn.intro', null);
83403                     context.history().on('change.intro', null);
83404                     nextStep();
83405                 }
83406             }
83407
83408
83409             function selectedTownHall() {
83410                 if (!isTownHallSelected()) return clickTownHall();
83411
83412                 var entity = context.hasEntity(hallId);
83413                 if (!entity) return clickTownHall();
83414
83415                 var box = pointBox(entity.loc, context);
83416                 var onClick = function() { continueTo(editorTownHall); };
83417
83418                 reveal(box, t('intro.navigation.selected_townhall'),
83419                     { buttonText: t('intro.ok'), buttonCallback: onClick }
83420                 );
83421
83422                 context.map().on('move.intro drawn.intro', function() {
83423                     var entity = context.hasEntity(hallId);
83424                     if (!entity) return;
83425                     var box = pointBox(entity.loc, context);
83426                     reveal(box, t('intro.navigation.selected_townhall'),
83427                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83428                     );
83429                 });
83430
83431                 context.history().on('change.intro', function() {
83432                     if (!context.hasEntity(hallId)) {
83433                         continueTo(clickTownHall);
83434                     }
83435                 });
83436
83437                 function continueTo(nextStep) {
83438                     context.map().on('move.intro drawn.intro', null);
83439                     context.history().on('change.intro', null);
83440                     nextStep();
83441                 }
83442             }
83443
83444
83445             function editorTownHall() {
83446                 if (!isTownHallSelected()) return clickTownHall();
83447
83448                 // disallow scrolling
83449                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83450
83451                 var onClick = function() { continueTo(presetTownHall); };
83452
83453                 reveal('.entity-editor-pane',
83454                     t('intro.navigation.editor_townhall'),
83455                     { buttonText: t('intro.ok'), buttonCallback: onClick }
83456                 );
83457
83458                 context.on('exit.intro', function() {
83459                     continueTo(clickTownHall);
83460                 });
83461
83462                 context.history().on('change.intro', function() {
83463                     if (!context.hasEntity(hallId)) {
83464                         continueTo(clickTownHall);
83465                     }
83466                 });
83467
83468                 function continueTo(nextStep) {
83469                     context.on('exit.intro', null);
83470                     context.history().on('change.intro', null);
83471                     d3_select('.inspector-wrap').on('wheel.intro', null);
83472                     nextStep();
83473                 }
83474             }
83475
83476
83477             function presetTownHall() {
83478                 if (!isTownHallSelected()) return clickTownHall();
83479
83480                 // reset pane, in case user happened to change it..
83481                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83482                 // disallow scrolling
83483                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83484
83485                 // preset match, in case the user happened to change it.
83486                 var entity = context.entity(context.selectedIDs()[0]);
83487                 var preset = context.presets().match(entity, context.graph());
83488
83489                 var onClick = function() { continueTo(fieldsTownHall); };
83490
83491                 context.on('exit.intro', function() {
83492                     continueTo(clickTownHall);
83493                 });
83494
83495                 context.history().on('change.intro', function() {
83496                     if (!context.hasEntity(hallId)) {
83497                         continueTo(clickTownHall);
83498                     }
83499                 });
83500
83501                 reveal('.inspector-body .preset-list-item.inspector-inner',
83502                     t('intro.navigation.preset_townhall', { preset: preset.name() }),
83503                     { buttonText: t('intro.ok'), buttonCallback: onClick }
83504                 );
83505
83506                 function continueTo(nextStep) {
83507                     context.on('exit.intro', null);
83508                     context.history().on('change.intro', null);
83509                     d3_select('.inspector-wrap').on('wheel.intro', null);
83510                     nextStep();
83511                 }
83512             }
83513
83514
83515             function fieldsTownHall() {
83516                 if (!isTownHallSelected()) return clickTownHall();
83517
83518                 // reset pane, in case user happened to change it..
83519                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83520                 // disallow scrolling
83521                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83522
83523                 var onClick = function() { continueTo(closeTownHall); };
83524
83525                 reveal('.inspector-body .preset-editor',
83526                     t('intro.navigation.fields_townhall'),
83527                     { buttonText: t('intro.ok'), buttonCallback: onClick }
83528                 );
83529
83530                 context.on('exit.intro', function() {
83531                     continueTo(clickTownHall);
83532                 });
83533
83534                 context.history().on('change.intro', function() {
83535                     if (!context.hasEntity(hallId)) {
83536                         continueTo(clickTownHall);
83537                     }
83538                 });
83539
83540                 function continueTo(nextStep) {
83541                     context.on('exit.intro', null);
83542                     context.history().on('change.intro', null);
83543                     d3_select('.inspector-wrap').on('wheel.intro', null);
83544                     nextStep();
83545                 }
83546             }
83547
83548
83549             function closeTownHall() {
83550                 if (!isTownHallSelected()) return clickTownHall();
83551
83552                 var selector = '.entity-editor-pane button.preset-close svg use';
83553                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
83554
83555                 reveal('.entity-editor-pane',
83556                     t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
83557                 );
83558
83559                 context.on('exit.intro', function() {
83560                     continueTo(searchStreet);
83561                 });
83562
83563                 context.history().on('change.intro', function() {
83564                     // update the close icon in the tooltip if the user edits something.
83565                     var selector = '.entity-editor-pane button.preset-close svg use';
83566                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
83567
83568                     reveal('.entity-editor-pane',
83569                         t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
83570                         { duration: 0 }
83571                     );
83572                 });
83573
83574                 function continueTo(nextStep) {
83575                     context.on('exit.intro', null);
83576                     context.history().on('change.intro', null);
83577                     nextStep();
83578                 }
83579             }
83580
83581
83582             function searchStreet() {
83583                 context.enter(modeBrowse(context));
83584                 context.history().reset('initial');  // ensure spring street exists
83585
83586                 var msec = transitionTime(springStreet, context.map().center());
83587                 if (msec) { reveal(null, null, { duration: 0 }); }
83588                 context.map().centerZoomEase(springStreet, 19, msec);  // ..and user can see it
83589
83590                 timeout(function() {
83591                     reveal('.search-header input',
83592                         t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
83593                     );
83594
83595                     d3_select('.search-header input')
83596                         .on('keyup.intro', checkSearchResult);
83597                 }, msec + 100);
83598             }
83599
83600
83601             function checkSearchResult() {
83602                 var first = d3_select('.feature-list-item:nth-child(0n+2)');  // skip "No Results" item
83603                 var firstName = first.select('.entity-name');
83604                 var name = t('intro.graph.name.spring-street');
83605
83606                 if (!firstName.empty() && firstName.text() === name) {
83607                     reveal(first.node(),
83608                         t('intro.navigation.choose_street', { name: name }),
83609                         { duration: 300 }
83610                     );
83611
83612                     context.on('exit.intro', function() {
83613                         continueTo(selectedStreet);
83614                     });
83615
83616                     d3_select('.search-header input')
83617                         .on('keydown.intro', eventCancel, true)
83618                         .on('keyup.intro', null);
83619                 }
83620
83621                 function continueTo(nextStep) {
83622                     context.on('exit.intro', null);
83623                     d3_select('.search-header input')
83624                         .on('keydown.intro', null)
83625                         .on('keyup.intro', null);
83626                     nextStep();
83627                 }
83628             }
83629
83630
83631             function selectedStreet() {
83632                 if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
83633                     return searchStreet();
83634                 }
83635
83636                 var onClick = function() { continueTo(editorStreet); };
83637                 var entity = context.entity(springStreetEndId);
83638                 var box = pointBox(entity.loc, context);
83639                 box.height = 500;
83640
83641                 reveal(box,
83642                     t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
83643                     { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
83644                 );
83645
83646                 timeout(function() {
83647                     context.map().on('move.intro drawn.intro', function() {
83648                         var entity = context.hasEntity(springStreetEndId);
83649                         if (!entity) return;
83650                         var box = pointBox(entity.loc, context);
83651                         box.height = 500;
83652                         reveal(box,
83653                             t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
83654                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83655                         );
83656                     });
83657                 }, 600);  // after reveal.
83658
83659                 context.on('enter.intro', function(mode) {
83660                     if (!context.hasEntity(springStreetId)) {
83661                         return continueTo(searchStreet);
83662                     }
83663                     var ids = context.selectedIDs();
83664                     if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
83665                         // keep Spring Street selected..
83666                         context.enter(modeSelect(context, [springStreetId]));
83667                     }
83668                 });
83669
83670                 context.history().on('change.intro', function() {
83671                     if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
83672                         timeout(function() {
83673                             continueTo(searchStreet);
83674                         }, 300);  // after any transition (e.g. if user deleted intersection)
83675                     }
83676                 });
83677
83678                 function continueTo(nextStep) {
83679                     context.map().on('move.intro drawn.intro', null);
83680                     context.on('enter.intro', null);
83681                     context.history().on('change.intro', null);
83682                     nextStep();
83683                 }
83684             }
83685
83686
83687             function editorStreet() {
83688                 var selector = '.entity-editor-pane button.preset-close svg use';
83689                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
83690
83691                 reveal('.entity-editor-pane',
83692                     t('intro.navigation.editor_street', {
83693                         button: icon(href, 'pre-text'),
83694                         field1: onewayField.label(),
83695                         field2: maxspeedField.label()
83696                     })
83697                 );
83698
83699                 context.on('exit.intro', function() {
83700                     continueTo(play);
83701                 });
83702
83703                 context.history().on('change.intro', function() {
83704                     // update the close icon in the tooltip if the user edits something.
83705                     var selector = '.entity-editor-pane button.preset-close svg use';
83706                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
83707
83708                     reveal('.entity-editor-pane',
83709                         t('intro.navigation.editor_street', {
83710                             button: icon(href, 'pre-text'),
83711                             field1: onewayField.label().toLowerCase(),
83712                             field2: maxspeedField.label().toLowerCase()
83713                         }), { duration: 0 }
83714                     );
83715                 });
83716
83717                 function continueTo(nextStep) {
83718                     context.on('exit.intro', null);
83719                     context.history().on('change.intro', null);
83720                     nextStep();
83721                 }
83722             }
83723
83724
83725             function play() {
83726                 dispatch$1.call('done');
83727                 reveal('#id-container',
83728                     t('intro.navigation.play', { next: t('intro.points.title') }), {
83729                         tooltipBox: '.intro-nav-wrap .chapter-point',
83730                         buttonText: t('intro.ok'),
83731                         buttonCallback: function() { reveal('#id-container'); }
83732                     }
83733                 );
83734             }
83735
83736
83737             chapter.enter = function() {
83738                 dragMap();
83739             };
83740
83741
83742             chapter.exit = function() {
83743                 timeouts.forEach(window.clearTimeout);
83744                 context.on('enter.intro exit.intro', null);
83745                 context.map().on('move.intro drawn.intro', null);
83746                 context.history().on('change.intro', null);
83747                 d3_select('.inspector-wrap').on('wheel.intro', null);
83748                 d3_select('.search-header input').on('keydown.intro keyup.intro', null);
83749             };
83750
83751
83752             chapter.restart = function() {
83753                 chapter.exit();
83754                 chapter.enter();
83755             };
83756
83757
83758             return utilRebind(chapter, dispatch$1, 'on');
83759         }
83760
83761         function uiIntroPoint(context, reveal) {
83762             var dispatch$1 = dispatch('done');
83763             var timeouts = [];
83764             var intersection = [-85.63279, 41.94394];
83765             var building = [-85.632422, 41.944045];
83766             var cafePreset = context.presets().item('amenity/cafe');
83767             var _pointID = null;
83768
83769
83770             var chapter = {
83771                 title: 'intro.points.title'
83772             };
83773
83774
83775             function timeout(f, t) {
83776                 timeouts.push(window.setTimeout(f, t));
83777             }
83778
83779
83780             function revealEditMenu(loc, text, options) {
83781                 var rect = context.surfaceRect();
83782                 var point = context.curtainProjection(loc);
83783                 var pad = 40;
83784                 var width = 250 + (2 * pad);
83785                 var height = 250;
83786                 var startX = rect.left + point[0];
83787                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
83788                 var box = {
83789                     left: left,
83790                     top: point[1] + rect.top - 60,
83791                     width: width,
83792                     height: height
83793                 };
83794                 reveal(box, text, options);
83795             }
83796
83797
83798             function eventCancel() {
83799                 event.stopPropagation();
83800                 event.preventDefault();
83801             }
83802
83803
83804             function addPoint() {
83805                 context.enter(modeBrowse(context));
83806                 context.history().reset('initial');
83807
83808                 var msec = transitionTime(intersection, context.map().center());
83809                 if (msec) { reveal(null, null, { duration: 0 }); }
83810                 context.map().centerZoomEase(intersection, 19, msec);
83811
83812                 timeout(function() {
83813                     var tooltip = reveal('button.add-point',
83814                         t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
83815
83816                     _pointID = null;
83817
83818                     tooltip.selectAll('.tooltip-inner')
83819                         .insert('svg', 'span')
83820                         .attr('class', 'tooltip-illustration')
83821                         .append('use')
83822                         .attr('xlink:href', '#iD-graphic-points');
83823
83824                     context.on('enter.intro', function(mode) {
83825                         if (mode.id !== 'add-point') return;
83826                         continueTo(placePoint);
83827                     });
83828                 }, msec + 100);
83829
83830                 function continueTo(nextStep) {
83831                     context.on('enter.intro', null);
83832                     nextStep();
83833                 }
83834             }
83835
83836
83837             function placePoint() {
83838                 if (context.mode().id !== 'add-point') {
83839                     return chapter.restart();
83840                 }
83841
83842                 var pointBox = pad$2(building, 150, context);
83843                 reveal(pointBox, t('intro.points.place_point'));
83844
83845                 context.map().on('move.intro drawn.intro', function() {
83846                     pointBox = pad$2(building, 150, context);
83847                     reveal(pointBox, t('intro.points.place_point'), { duration: 0 });
83848                 });
83849
83850                 context.on('enter.intro', function(mode) {
83851                     if (mode.id !== 'select') return chapter.restart();
83852                     _pointID = context.mode().selectedIDs()[0];
83853                     continueTo(searchPreset);
83854                 });
83855
83856                 function continueTo(nextStep) {
83857                     context.map().on('move.intro drawn.intro', null);
83858                     context.on('enter.intro', null);
83859                     nextStep();
83860                 }
83861             }
83862
83863
83864             function searchPreset() {
83865                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83866                     return addPoint();
83867                 }
83868
83869                 // disallow scrolling
83870                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83871
83872                 d3_select('.preset-search-input')
83873                     .on('keydown.intro', null)
83874                     .on('keyup.intro', checkPresetSearch);
83875
83876                 reveal('.preset-search-input',
83877                     t('intro.points.search_cafe', { preset: cafePreset.name() })
83878                 );
83879
83880                 context.on('enter.intro', function(mode) {
83881                     if (!_pointID || !context.hasEntity(_pointID)) {
83882                         return continueTo(addPoint);
83883                     }
83884
83885                     var ids = context.selectedIDs();
83886                     if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
83887                         // keep the user's point selected..
83888                         context.enter(modeSelect(context, [_pointID]));
83889
83890                         // disallow scrolling
83891                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83892
83893                         d3_select('.preset-search-input')
83894                             .on('keydown.intro', null)
83895                             .on('keyup.intro', checkPresetSearch);
83896
83897                         reveal('.preset-search-input',
83898                             t('intro.points.search_cafe', { preset: cafePreset.name() })
83899                         );
83900
83901                         context.history().on('change.intro', null);
83902                     }
83903                 });
83904
83905
83906                 function checkPresetSearch() {
83907                     var first = d3_select('.preset-list-item:first-child');
83908
83909                     if (first.classed('preset-amenity-cafe')) {
83910                         d3_select('.preset-search-input')
83911                             .on('keydown.intro', eventCancel, true)
83912                             .on('keyup.intro', null);
83913
83914                         reveal(first.select('.preset-list-button').node(),
83915                             t('intro.points.choose_cafe', { preset: cafePreset.name() }),
83916                             { duration: 300 }
83917                         );
83918
83919                         context.history().on('change.intro', function() {
83920                             continueTo(aboutFeatureEditor);
83921                         });
83922                     }
83923                 }
83924
83925                 function continueTo(nextStep) {
83926                     context.on('enter.intro', null);
83927                     context.history().on('change.intro', null);
83928                     d3_select('.inspector-wrap').on('wheel.intro', null);
83929                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
83930                     nextStep();
83931                 }
83932             }
83933
83934
83935             function aboutFeatureEditor() {
83936                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83937                     return addPoint();
83938                 }
83939
83940                 timeout(function() {
83941                     reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
83942                         tooltipClass: 'intro-points-describe',
83943                         buttonText: t('intro.ok'),
83944                         buttonCallback: function() { continueTo(addName); }
83945                     });
83946                 }, 400);
83947
83948                 context.on('exit.intro', function() {
83949                     // if user leaves select mode here, just continue with the tutorial.
83950                     continueTo(reselectPoint);
83951                 });
83952
83953                 function continueTo(nextStep) {
83954                     context.on('exit.intro', null);
83955                     nextStep();
83956                 }
83957             }
83958
83959
83960             function addName() {
83961                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83962                     return addPoint();
83963                 }
83964
83965                 // reset pane, in case user happened to change it..
83966                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83967
83968                 timeout(function() {
83969                     // It's possible for the user to add a name in a previous step..
83970                     // If so, don't tell them to add the name in this step.
83971                     // Give them an OK button instead.
83972                     var entity = context.entity(_pointID);
83973                     if (entity.tags.name) {
83974                         var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
83975                             tooltipClass: 'intro-points-describe',
83976                             buttonText: t('intro.ok'),
83977                             buttonCallback: function() { continueTo(addCloseEditor); }
83978                         });
83979                         tooltip.select('.instruction').style('display', 'none');
83980
83981                     } else {
83982                         reveal('.entity-editor-pane', t('intro.points.add_name'),
83983                             { tooltipClass: 'intro-points-describe' }
83984                         );
83985                     }
83986                 }, 400);
83987
83988                 context.history().on('change.intro', function() {
83989                     continueTo(addCloseEditor);
83990                 });
83991
83992                 context.on('exit.intro', function() {
83993                     // if user leaves select mode here, just continue with the tutorial.
83994                     continueTo(reselectPoint);
83995                 });
83996
83997                 function continueTo(nextStep) {
83998                     context.on('exit.intro', null);
83999                     context.history().on('change.intro', null);
84000                     nextStep();
84001                 }
84002             }
84003
84004
84005             function addCloseEditor() {
84006                 // reset pane, in case user happened to change it..
84007                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84008
84009                 var selector = '.entity-editor-pane button.preset-close svg use';
84010                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
84011
84012                 context.on('exit.intro', function() {
84013                     continueTo(reselectPoint);
84014                 });
84015
84016                 reveal('.entity-editor-pane',
84017                     t('intro.points.add_close', { button: icon(href, 'pre-text') })
84018                 );
84019
84020                 function continueTo(nextStep) {
84021                     context.on('exit.intro', null);
84022                     nextStep();
84023                 }
84024             }
84025
84026
84027             function reselectPoint() {
84028                 if (!_pointID) return chapter.restart();
84029                 var entity = context.hasEntity(_pointID);
84030                 if (!entity) return chapter.restart();
84031
84032                 // make sure it's still a cafe, in case user somehow changed it..
84033                 var oldPreset = context.presets().match(entity, context.graph());
84034                 context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
84035
84036                 context.enter(modeBrowse(context));
84037
84038                 var msec = transitionTime(entity.loc, context.map().center());
84039                 if (msec) { reveal(null, null, { duration: 0 }); }
84040                 context.map().centerEase(entity.loc, msec);
84041
84042                 timeout(function() {
84043                     var box = pointBox(entity.loc, context);
84044                     reveal(box, t('intro.points.reselect'), { duration: 600 });
84045
84046                     timeout(function() {
84047                         context.map().on('move.intro drawn.intro', function() {
84048                             var entity = context.hasEntity(_pointID);
84049                             if (!entity) return chapter.restart();
84050                             var box = pointBox(entity.loc, context);
84051                             reveal(box, t('intro.points.reselect'), { duration: 0 });
84052                         });
84053                     }, 600); // after reveal..
84054
84055                     context.on('enter.intro', function(mode) {
84056                         if (mode.id !== 'select') return;
84057                         continueTo(updatePoint);
84058                     });
84059
84060                 }, msec + 100);
84061
84062                 function continueTo(nextStep) {
84063                     context.map().on('move.intro drawn.intro', null);
84064                     context.on('enter.intro', null);
84065                     nextStep();
84066                 }
84067             }
84068
84069
84070             function updatePoint() {
84071                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
84072                     return continueTo(reselectPoint);
84073                 }
84074
84075                 // reset pane, in case user happened to untag the point..
84076                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84077
84078                 context.on('exit.intro', function() {
84079                     continueTo(reselectPoint);
84080                 });
84081
84082                 context.history().on('change.intro', function() {
84083                     continueTo(updateCloseEditor);
84084                 });
84085
84086                 timeout(function() {
84087                     reveal('.entity-editor-pane', t('intro.points.update'),
84088                         { tooltipClass: 'intro-points-describe' }
84089                     );
84090                 }, 400);
84091
84092                 function continueTo(nextStep) {
84093                     context.on('exit.intro', null);
84094                     context.history().on('change.intro', null);
84095                     nextStep();
84096                 }
84097             }
84098
84099
84100             function updateCloseEditor() {
84101                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
84102                     return continueTo(reselectPoint);
84103                 }
84104
84105                 // reset pane, in case user happened to change it..
84106                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84107
84108                 context.on('exit.intro', function() {
84109                     continueTo(rightClickPoint);
84110                 });
84111
84112                 timeout(function() {
84113                     reveal('.entity-editor-pane',
84114                         t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
84115                     );
84116                 }, 500);
84117
84118                 function continueTo(nextStep) {
84119                     context.on('exit.intro', null);
84120                     nextStep();
84121                 }
84122             }
84123
84124
84125             function rightClickPoint() {
84126                 if (!_pointID) return chapter.restart();
84127                 var entity = context.hasEntity(_pointID);
84128                 if (!entity) return chapter.restart();
84129
84130                 context.enter(modeBrowse(context));
84131
84132                 var box = pointBox(entity.loc, context);
84133                 reveal(box, t('intro.points.rightclick'), { duration: 600 });
84134
84135                 timeout(function() {
84136                     context.map().on('move.intro drawn.intro', function() {
84137                         var entity = context.hasEntity(_pointID);
84138                         if (!entity) return chapter.restart();
84139                         var box = pointBox(entity.loc, context);
84140                         reveal(box, t('intro.points.rightclick'), { duration: 0 });
84141                     });
84142                 }, 600); // after reveal
84143
84144                 context.on('enter.intro', function(mode) {
84145                     if (mode.id !== 'select') return;
84146                     var ids = context.selectedIDs();
84147                     if (ids.length !== 1 || ids[0] !== _pointID) return;
84148
84149                     timeout(function() {
84150                         var node = selectMenuItem('delete').node();
84151                         if (!node) return;
84152                         continueTo(enterDelete);
84153                     }, 300);  // after menu visible
84154                 });
84155
84156                 function continueTo(nextStep) {
84157                     context.on('enter.intro', null);
84158                     context.map().on('move.intro drawn.intro', null);
84159                     nextStep();
84160                 }
84161             }
84162
84163
84164             function enterDelete() {
84165                 if (!_pointID) return chapter.restart();
84166                 var entity = context.hasEntity(_pointID);
84167                 if (!entity) return chapter.restart();
84168
84169                 var node = selectMenuItem('delete').node();
84170                 if (!node) { return continueTo(rightClickPoint); }
84171
84172                 revealEditMenu(entity.loc,
84173                     t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
84174                 );
84175
84176                 timeout(function() {
84177                     context.map().on('move.intro drawn.intro', function() {
84178                         revealEditMenu(entity.loc,
84179                             t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
84180                             { duration: 0}
84181                         );
84182                     });
84183                 }, 300); // after menu visible
84184
84185                 context.on('exit.intro', function() {
84186                     if (!_pointID) return chapter.restart();
84187                     var entity = context.hasEntity(_pointID);
84188                     if (entity) return continueTo(rightClickPoint);  // point still exists
84189                 });
84190
84191                 context.history().on('change.intro', function(changed) {
84192                     if (changed.deleted().length) {
84193                         continueTo(undo);
84194                     }
84195                 });
84196
84197                 function continueTo(nextStep) {
84198                     context.map().on('move.intro drawn.intro', null);
84199                     context.history().on('change.intro', null);
84200                     context.on('exit.intro', null);
84201                     nextStep();
84202                 }
84203             }
84204
84205
84206             function undo() {
84207                 context.history().on('change.intro', function() {
84208                     continueTo(play);
84209                 });
84210
84211                 var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
84212                 reveal('#bar button.undo-button',
84213                     t('intro.points.undo', { button: icon(iconName, 'pre-text') })
84214                 );
84215
84216                 function continueTo(nextStep) {
84217                     context.history().on('change.intro', null);
84218                     nextStep();
84219                 }
84220             }
84221
84222
84223             function play() {
84224                 dispatch$1.call('done');
84225                 reveal('#id-container',
84226                     t('intro.points.play', { next: t('intro.areas.title') }), {
84227                         tooltipBox: '.intro-nav-wrap .chapter-area',
84228                         buttonText: t('intro.ok'),
84229                         buttonCallback: function() { reveal('#id-container'); }
84230                     }
84231                 );
84232             }
84233
84234
84235             chapter.enter = function() {
84236                 addPoint();
84237             };
84238
84239
84240             chapter.exit = function() {
84241                 timeouts.forEach(window.clearTimeout);
84242                 context.on('enter.intro exit.intro', null);
84243                 context.map().on('move.intro drawn.intro', null);
84244                 context.history().on('change.intro', null);
84245                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84246                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
84247             };
84248
84249
84250             chapter.restart = function() {
84251                 chapter.exit();
84252                 chapter.enter();
84253             };
84254
84255
84256             return utilRebind(chapter, dispatch$1, 'on');
84257         }
84258
84259         function uiIntroArea(context, reveal) {
84260             var dispatch$1 = dispatch('done');
84261             var playground = [-85.63552, 41.94159];
84262             var playgroundPreset = context.presets().item('leisure/playground');
84263             var descriptionField = context.presets().field('description');
84264             var timeouts = [];
84265             var _areaID;
84266
84267
84268             var chapter = {
84269                 title: 'intro.areas.title'
84270             };
84271
84272
84273             function timeout(f, t) {
84274                 timeouts.push(window.setTimeout(f, t));
84275             }
84276
84277
84278             function eventCancel() {
84279                 event.stopPropagation();
84280                 event.preventDefault();
84281             }
84282
84283
84284             function revealPlayground(center, text, options) {
84285                 var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
84286                 var box = pad$2(center, padding, context);
84287                 reveal(box, text, options);
84288             }
84289
84290
84291             function addArea() {
84292                 context.enter(modeBrowse(context));
84293                 context.history().reset('initial');
84294                 _areaID = null;
84295
84296                 var msec = transitionTime(playground, context.map().center());
84297                 if (msec) { reveal(null, null, { duration: 0 }); }
84298                 context.map().centerZoomEase(playground, 19, msec);
84299
84300                 timeout(function() {
84301                     var tooltip = reveal('button.add-area',
84302                         t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
84303
84304                     tooltip.selectAll('.tooltip-inner')
84305                         .insert('svg', 'span')
84306                         .attr('class', 'tooltip-illustration')
84307                         .append('use')
84308                         .attr('xlink:href', '#iD-graphic-areas');
84309
84310                     context.on('enter.intro', function(mode) {
84311                         if (mode.id !== 'add-area') return;
84312                         continueTo(startPlayground);
84313                     });
84314                 }, msec + 100);
84315
84316                 function continueTo(nextStep) {
84317                     context.on('enter.intro', null);
84318                     nextStep();
84319                 }
84320             }
84321
84322
84323             function startPlayground() {
84324                 if (context.mode().id !== 'add-area') {
84325                     return chapter.restart();
84326                 }
84327
84328                 _areaID = null;
84329                 context.map().zoomEase(19.5, 500);
84330
84331                 timeout(function() {
84332                     revealPlayground(playground,
84333                         t('intro.areas.start_playground'), { duration: 250 }
84334                     );
84335
84336                     timeout(function() {
84337                         context.map().on('move.intro drawn.intro', function() {
84338                             revealPlayground(playground,
84339                                 t('intro.areas.start_playground'), { duration: 0 }
84340                             );
84341                         });
84342                         context.on('enter.intro', function(mode) {
84343                             if (mode.id !== 'draw-area') return chapter.restart();
84344                             continueTo(continuePlayground);
84345                         });
84346                     }, 250);  // after reveal
84347
84348                 }, 550);  // after easing
84349
84350                 function continueTo(nextStep) {
84351                     context.map().on('move.intro drawn.intro', null);
84352                     context.on('enter.intro', null);
84353                     nextStep();
84354                 }
84355             }
84356
84357
84358             function continuePlayground() {
84359                 if (context.mode().id !== 'draw-area') {
84360                     return chapter.restart();
84361                 }
84362
84363                 _areaID = null;
84364                 revealPlayground(playground,
84365                     t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
84366                     { duration: 250 }
84367                 );
84368
84369                 timeout(function() {
84370                     context.map().on('move.intro drawn.intro', function() {
84371                         revealPlayground(playground,
84372                             t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
84373                             { duration: 0 }
84374                         );
84375                     });
84376                 }, 250);  // after reveal
84377
84378                 context.on('enter.intro', function(mode) {
84379                     if (mode.id === 'draw-area') {
84380                         var entity = context.hasEntity(context.selectedIDs()[0]);
84381                         if (entity && entity.nodes.length >= 6) {
84382                             return continueTo(finishPlayground);
84383                         } else {
84384                             return;
84385                         }
84386                     } else if (mode.id === 'select') {
84387                         _areaID = context.selectedIDs()[0];
84388                         return continueTo(searchPresets);
84389                     } else {
84390                         return chapter.restart();
84391                     }
84392                 });
84393
84394                 function continueTo(nextStep) {
84395                     context.map().on('move.intro drawn.intro', null);
84396                     context.on('enter.intro', null);
84397                     nextStep();
84398                 }
84399             }
84400
84401
84402             function finishPlayground() {
84403                 if (context.mode().id !== 'draw-area') {
84404                     return chapter.restart();
84405                 }
84406
84407                 _areaID = null;
84408                 revealPlayground(playground,
84409                     t('intro.areas.finish_playground'), { duration: 250 }
84410                 );
84411
84412                 timeout(function() {
84413                     context.map().on('move.intro drawn.intro', function() {
84414                         revealPlayground(playground,
84415                             t('intro.areas.finish_playground'), { duration: 0 }
84416                         );
84417                     });
84418                 }, 250);  // after reveal
84419
84420                 context.on('enter.intro', function(mode) {
84421                     if (mode.id === 'draw-area') {
84422                         return;
84423                     } else if (mode.id === 'select') {
84424                         _areaID = context.selectedIDs()[0];
84425                         return continueTo(searchPresets);
84426                     } else {
84427                         return chapter.restart();
84428                     }
84429                 });
84430
84431                 function continueTo(nextStep) {
84432                     context.map().on('move.intro drawn.intro', null);
84433                     context.on('enter.intro', null);
84434                     nextStep();
84435                 }
84436             }
84437
84438
84439             function searchPresets() {
84440                 if (!_areaID || !context.hasEntity(_areaID)) {
84441                     return addArea();
84442                 }
84443                 var ids = context.selectedIDs();
84444                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84445                     context.enter(modeSelect(context, [_areaID]));
84446                 }
84447
84448                 // disallow scrolling
84449                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84450
84451                 timeout(function() {
84452                     // reset pane, in case user somehow happened to change it..
84453                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
84454
84455                     d3_select('.preset-search-input')
84456                         .on('keydown.intro', null)
84457                         .on('keyup.intro', checkPresetSearch);
84458
84459                     reveal('.preset-search-input',
84460                         t('intro.areas.search_playground', { preset: playgroundPreset.name() })
84461                     );
84462                 }, 400);  // after preset list pane visible..
84463
84464                 context.on('enter.intro', function(mode) {
84465                     if (!_areaID || !context.hasEntity(_areaID)) {
84466                         return continueTo(addArea);
84467                     }
84468
84469                     var ids = context.selectedIDs();
84470                     if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
84471                         // keep the user's area selected..
84472                         context.enter(modeSelect(context, [_areaID]));
84473
84474                         // reset pane, in case user somehow happened to change it..
84475                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
84476                         // disallow scrolling
84477                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84478
84479                         d3_select('.preset-search-input')
84480                             .on('keydown.intro', null)
84481                             .on('keyup.intro', checkPresetSearch);
84482
84483                         reveal('.preset-search-input',
84484                             t('intro.areas.search_playground', { preset: playgroundPreset.name() })
84485                         );
84486
84487                         context.history().on('change.intro', null);
84488                     }
84489                 });
84490
84491                 function checkPresetSearch() {
84492                     var first = d3_select('.preset-list-item:first-child');
84493
84494                     if (first.classed('preset-leisure-playground')) {
84495                         reveal(first.select('.preset-list-button').node(),
84496                             t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
84497                             { duration: 300 }
84498                         );
84499
84500                         d3_select('.preset-search-input')
84501                             .on('keydown.intro', eventCancel, true)
84502                             .on('keyup.intro', null);
84503
84504                         context.history().on('change.intro', function() {
84505                             continueTo(clickAddField);
84506                         });
84507                     }
84508                 }
84509
84510                 function continueTo(nextStep) {
84511                     d3_select('.inspector-wrap').on('wheel.intro', null);
84512                     context.on('enter.intro', null);
84513                     context.history().on('change.intro', null);
84514                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
84515                     nextStep();
84516                 }
84517             }
84518
84519
84520             function clickAddField() {
84521                 if (!_areaID || !context.hasEntity(_areaID)) {
84522                     return addArea();
84523                 }
84524                 var ids = context.selectedIDs();
84525                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84526                     return searchPresets();
84527                 }
84528
84529                 if (!d3_select('.form-field-description').empty()) {
84530                     return continueTo(describePlayground);
84531                 }
84532
84533                 // disallow scrolling
84534                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84535
84536                 timeout(function() {
84537                     // reset pane, in case user somehow happened to change it..
84538                     d3_select('.inspector-wrap .panewrap').style('right', '0%');
84539
84540                     // It's possible for the user to add a description in a previous step..
84541                     // If they did this already, just continue to next step.
84542                     var entity = context.entity(_areaID);
84543                     if (entity.tags.description) {
84544                         return continueTo(play);
84545                     }
84546
84547                     // scroll "Add field" into view
84548                     var box = d3_select('.more-fields').node().getBoundingClientRect();
84549                     if (box.top > 300) {
84550                         var pane = d3_select('.entity-editor-pane .inspector-body');
84551                         var start = pane.node().scrollTop;
84552                         var end = start + (box.top - 300);
84553
84554                         pane
84555                             .transition()
84556                             .duration(250)
84557                             .tween('scroll.inspector', function() {
84558                                 var node = this;
84559                                 var i = d3_interpolateNumber(start, end);
84560                                 return function(t) {
84561                                     node.scrollTop = i(t);
84562                                 };
84563                             });
84564                     }
84565
84566                     timeout(function() {
84567                         reveal('.more-fields .combobox-input',
84568                             t('intro.areas.add_field'),
84569                             { duration: 300 }
84570                         );
84571
84572                         d3_select('.more-fields .combobox-input')
84573                             .on('click.intro', function() {
84574                                 // Watch for the combobox to appear...
84575                                 var watcher;
84576                                 watcher = window.setInterval(function() {
84577                                     if (!d3_select('div.combobox').empty()) {
84578                                         window.clearInterval(watcher);
84579                                         continueTo(chooseDescriptionField);
84580                                     }
84581                                 }, 300);
84582                             });
84583                     }, 300);  // after "Add Field" visible
84584
84585                 }, 400);  // after editor pane visible
84586
84587                 context.on('exit.intro', function() {
84588                     return continueTo(searchPresets);
84589                 });
84590
84591                 function continueTo(nextStep) {
84592                     d3_select('.inspector-wrap').on('wheel.intro', null);
84593                     d3_select('.more-fields .combobox-input').on('click.intro', null);
84594                     context.on('exit.intro', null);
84595                     nextStep();
84596                 }
84597             }
84598
84599
84600             function chooseDescriptionField() {
84601                 if (!_areaID || !context.hasEntity(_areaID)) {
84602                     return addArea();
84603                 }
84604                 var ids = context.selectedIDs();
84605                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84606                     return searchPresets();
84607                 }
84608
84609                 if (!d3_select('.form-field-description').empty()) {
84610                     return continueTo(describePlayground);
84611                 }
84612
84613                 // Make sure combobox is ready..
84614                 if (d3_select('div.combobox').empty()) {
84615                     return continueTo(clickAddField);
84616                 }
84617                 // Watch for the combobox to go away..
84618                 var watcher;
84619                 watcher = window.setInterval(function() {
84620                     if (d3_select('div.combobox').empty()) {
84621                         window.clearInterval(watcher);
84622                         timeout(function() {
84623                             if (d3_select('.form-field-description').empty()) {
84624                                 continueTo(retryChooseDescription);
84625                             } else {
84626                                 continueTo(describePlayground);
84627                             }
84628                         }, 300);  // after description field added.
84629                     }
84630                 }, 300);
84631
84632                 reveal('div.combobox',
84633                     t('intro.areas.choose_field', { field: descriptionField.label() }),
84634                     { duration: 300 }
84635                 );
84636
84637                 context.on('exit.intro', function() {
84638                     return continueTo(searchPresets);
84639                 });
84640
84641                 function continueTo(nextStep) {
84642                     if (watcher) window.clearInterval(watcher);
84643                     context.on('exit.intro', null);
84644                     nextStep();
84645                 }
84646             }
84647
84648
84649             function describePlayground() {
84650                 if (!_areaID || !context.hasEntity(_areaID)) {
84651                     return addArea();
84652                 }
84653                 var ids = context.selectedIDs();
84654                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84655                     return searchPresets();
84656                 }
84657
84658                 // reset pane, in case user happened to change it..
84659                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84660
84661                 if (d3_select('.form-field-description').empty()) {
84662                     return continueTo(retryChooseDescription);
84663                 }
84664
84665                 context.on('exit.intro', function() {
84666                     continueTo(play);
84667                 });
84668
84669                 reveal('.entity-editor-pane',
84670                     t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
84671                     { duration: 300 }
84672                 );
84673
84674                 function continueTo(nextStep) {
84675                     context.on('exit.intro', null);
84676                     nextStep();
84677                 }
84678             }
84679
84680
84681             function retryChooseDescription() {
84682                 if (!_areaID || !context.hasEntity(_areaID)) {
84683                     return addArea();
84684                 }
84685                 var ids = context.selectedIDs();
84686                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84687                     return searchPresets();
84688                 }
84689
84690                 // reset pane, in case user happened to change it..
84691                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84692
84693                 reveal('.entity-editor-pane',
84694                     t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
84695                     buttonText: t('intro.ok'),
84696                     buttonCallback: function() { continueTo(clickAddField); }
84697                 });
84698
84699                 context.on('exit.intro', function() {
84700                     return continueTo(searchPresets);
84701                 });
84702
84703                 function continueTo(nextStep) {
84704                     context.on('exit.intro', null);
84705                     nextStep();
84706                 }
84707             }
84708
84709
84710             function play() {
84711                 dispatch$1.call('done');
84712                 reveal('#id-container',
84713                     t('intro.areas.play', { next: t('intro.lines.title') }), {
84714                         tooltipBox: '.intro-nav-wrap .chapter-line',
84715                         buttonText: t('intro.ok'),
84716                         buttonCallback: function() { reveal('#id-container'); }
84717                     }
84718                 );
84719             }
84720
84721
84722             chapter.enter = function() {
84723                 addArea();
84724             };
84725
84726
84727             chapter.exit = function() {
84728                 timeouts.forEach(window.clearTimeout);
84729                 context.on('enter.intro exit.intro', null);
84730                 context.map().on('move.intro drawn.intro', null);
84731                 context.history().on('change.intro', null);
84732                 d3_select('.inspector-wrap').on('wheel.intro', null);
84733                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
84734                 d3_select('.more-fields .combobox-input').on('click.intro', null);
84735             };
84736
84737
84738             chapter.restart = function() {
84739                 chapter.exit();
84740                 chapter.enter();
84741             };
84742
84743
84744             return utilRebind(chapter, dispatch$1, 'on');
84745         }
84746
84747         function uiIntroLine(context, reveal) {
84748             var dispatch$1 = dispatch('done');
84749             var timeouts = [];
84750             var _tulipRoadID = null;
84751             var flowerRoadID = 'w646';
84752             var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
84753             var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
84754             var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
84755             var roadCategory = context.presets().item('category-road_minor');
84756             var residentialPreset = context.presets().item('highway/residential');
84757             var woodRoadID = 'w525';
84758             var woodRoadEndID = 'n2862';
84759             var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
84760             var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
84761             var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
84762             var washingtonStreetID = 'w522';
84763             var twelfthAvenueID = 'w1';
84764             var eleventhAvenueEndID = 'n3550';
84765             var twelfthAvenueEndID = 'n5';
84766             var _washingtonSegmentID = null;
84767             var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
84768             var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
84769             var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
84770             var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
84771
84772
84773             var chapter = {
84774                 title: 'intro.lines.title'
84775             };
84776
84777
84778             function timeout(f, t) {
84779                 timeouts.push(window.setTimeout(f, t));
84780             }
84781
84782
84783             function eventCancel() {
84784                 event.stopPropagation();
84785                 event.preventDefault();
84786             }
84787
84788
84789             function revealEditMenu(loc, text, options) {
84790                 var rect = context.surfaceRect();
84791                 var point = context.curtainProjection(loc);
84792                 var pad = 40;
84793                 var width = 250 + (2 * pad);
84794                 var height = 350;
84795                 var startX = rect.left + point[0];
84796                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
84797                 var box = {
84798                     left: left,
84799                     top: point[1] + rect.top - 60,
84800                     width: width,
84801                     height: height
84802                 };
84803                 reveal(box, text, options);
84804             }
84805
84806
84807             function addLine() {
84808                 context.enter(modeBrowse(context));
84809                 context.history().reset('initial');
84810
84811                 var msec = transitionTime(tulipRoadStart, context.map().center());
84812                 if (msec) { reveal(null, null, { duration: 0 }); }
84813                 context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
84814
84815                 timeout(function() {
84816                     var tooltip = reveal('button.add-line',
84817                         t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
84818
84819                     tooltip.selectAll('.tooltip-inner')
84820                         .insert('svg', 'span')
84821                         .attr('class', 'tooltip-illustration')
84822                         .append('use')
84823                         .attr('xlink:href', '#iD-graphic-lines');
84824
84825                     context.on('enter.intro', function(mode) {
84826                         if (mode.id !== 'add-line') return;
84827                         continueTo(startLine);
84828                     });
84829                 }, msec + 100);
84830
84831                 function continueTo(nextStep) {
84832                     context.on('enter.intro', null);
84833                     nextStep();
84834                 }
84835             }
84836
84837
84838             function startLine() {
84839                 if (context.mode().id !== 'add-line') return chapter.restart();
84840
84841                 _tulipRoadID = null;
84842
84843                 var padding = 70 * Math.pow(2, context.map().zoom() - 18);
84844                 var box = pad$2(tulipRoadStart, padding, context);
84845                 box.height = box.height + 100;
84846                 reveal(box, t('intro.lines.start_line'));
84847
84848                 context.map().on('move.intro drawn.intro', function() {
84849                     padding = 70 * Math.pow(2, context.map().zoom() - 18);
84850                     box = pad$2(tulipRoadStart, padding, context);
84851                     box.height = box.height + 100;
84852                     reveal(box, t('intro.lines.start_line'), { duration: 0 });
84853                 });
84854
84855                 context.on('enter.intro', function(mode) {
84856                     if (mode.id !== 'draw-line') return chapter.restart();
84857                     continueTo(drawLine);
84858                 });
84859
84860                 function continueTo(nextStep) {
84861                     context.map().on('move.intro drawn.intro', null);
84862                     context.on('enter.intro', null);
84863                     nextStep();
84864                 }
84865             }
84866
84867
84868             function drawLine() {
84869                 if (context.mode().id !== 'draw-line') return chapter.restart();
84870
84871                 _tulipRoadID = context.mode().selectedIDs()[0];
84872                 context.map().centerEase(tulipRoadMidpoint, 500);
84873
84874                 timeout(function() {
84875                     var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
84876                     var box = pad$2(tulipRoadMidpoint, padding, context);
84877                     box.height = box.height * 2;
84878                     reveal(box,
84879                         t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
84880                     );
84881
84882                     context.map().on('move.intro drawn.intro', function() {
84883                         padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
84884                         box = pad$2(tulipRoadMidpoint, padding, context);
84885                         box.height = box.height * 2;
84886                         reveal(box,
84887                             t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
84888                             { duration: 0 }
84889                         );
84890                     });
84891                 }, 550);  // after easing..
84892
84893                 context.history().on('change.intro', function() {
84894                     if (isLineConnected()) {
84895                         continueTo(continueLine);
84896                     }
84897                 });
84898
84899                 context.on('enter.intro', function(mode) {
84900                     if (mode.id === 'draw-line') {
84901                         return;
84902                     } else if (mode.id === 'select') {
84903                         continueTo(retryIntersect);
84904                         return;
84905                     } else {
84906                         return chapter.restart();
84907                     }
84908                 });
84909
84910                 function continueTo(nextStep) {
84911                     context.map().on('move.intro drawn.intro', null);
84912                     context.history().on('change.intro', null);
84913                     context.on('enter.intro', null);
84914                     nextStep();
84915                 }
84916             }
84917
84918
84919             function isLineConnected() {
84920                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
84921                 if (!entity) return false;
84922
84923                 var drawNodes = context.graph().childNodes(entity);
84924                 return drawNodes.some(function(node) {
84925                     return context.graph().parentWays(node).some(function(parent) {
84926                         return parent.id === flowerRoadID;
84927                     });
84928                 });
84929             }
84930
84931
84932             function retryIntersect() {
84933                 d3_select(window).on('mousedown.intro', eventCancel, true);
84934
84935                 var box = pad$2(tulipRoadIntersection, 80, context);
84936                 reveal(box,
84937                     t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
84938                 );
84939
84940                 timeout(chapter.restart, 3000);
84941             }
84942
84943
84944             function continueLine() {
84945                 if (context.mode().id !== 'draw-line') return chapter.restart();
84946                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
84947                 if (!entity) return chapter.restart();
84948
84949                 context.map().centerEase(tulipRoadIntersection, 500);
84950
84951                 reveal('#surface', t('intro.lines.continue_line'));
84952
84953                 context.on('enter.intro', function(mode) {
84954                     if (mode.id === 'draw-line')
84955                         return;
84956                     else if (mode.id === 'select')
84957                         return continueTo(chooseCategoryRoad);
84958                     else
84959                         return chapter.restart();
84960                 });
84961
84962                 function continueTo(nextStep) {
84963                     context.on('enter.intro', null);
84964                     nextStep();
84965                 }
84966             }
84967
84968
84969             function chooseCategoryRoad() {
84970                 if (context.mode().id !== 'select') return chapter.restart();
84971
84972                 context.on('exit.intro', function() {
84973                     return chapter.restart();
84974                 });
84975
84976                 var button = d3_select('.preset-category-road_minor .preset-list-button');
84977                 if (button.empty()) return chapter.restart();
84978
84979                 // disallow scrolling
84980                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84981
84982                 timeout(function() {
84983                     // reset pane, in case user somehow happened to change it..
84984                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
84985
84986                     reveal(button.node(),
84987                         t('intro.lines.choose_category_road', { category: roadCategory.name() })
84988                     );
84989
84990                     button.on('click.intro', function() {
84991                         continueTo(choosePresetResidential);
84992                     });
84993
84994                 }, 400);  // after editor pane visible
84995
84996                 function continueTo(nextStep) {
84997                     d3_select('.inspector-wrap').on('wheel.intro', null);
84998                     d3_select('.preset-list-button').on('click.intro', null);
84999                     context.on('exit.intro', null);
85000                     nextStep();
85001                 }
85002             }
85003
85004
85005             function choosePresetResidential() {
85006                 if (context.mode().id !== 'select') return chapter.restart();
85007
85008                 context.on('exit.intro', function() {
85009                     return chapter.restart();
85010                 });
85011
85012                 var subgrid = d3_select('.preset-category-road_minor .subgrid');
85013                 if (subgrid.empty()) return chapter.restart();
85014
85015                 subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
85016                     .on('click.intro', function() {
85017                         continueTo(retryPresetResidential);
85018                     });
85019
85020                 subgrid.selectAll('.preset-highway-residential .preset-list-button')
85021                     .on('click.intro', function() {
85022                         continueTo(nameRoad);
85023                     });
85024
85025                 timeout(function() {
85026                     reveal(subgrid.node(),
85027                         t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
85028                         { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
85029                     );
85030                 }, 300);
85031
85032                 function continueTo(nextStep) {
85033                     d3_select('.preset-list-button').on('click.intro', null);
85034                     context.on('exit.intro', null);
85035                     nextStep();
85036                 }
85037             }
85038
85039
85040             // selected wrong road type
85041             function retryPresetResidential() {
85042                 if (context.mode().id !== 'select') return chapter.restart();
85043
85044                 context.on('exit.intro', function() {
85045                     return chapter.restart();
85046                 });
85047
85048                 // disallow scrolling
85049                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85050
85051                 timeout(function() {
85052                     var button = d3_select('.entity-editor-pane .preset-list-button');
85053
85054                     reveal(button.node(),
85055                         t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
85056                     );
85057
85058                     button.on('click.intro', function() {
85059                         continueTo(chooseCategoryRoad);
85060                     });
85061
85062                 }, 500);
85063
85064                 function continueTo(nextStep) {
85065                     d3_select('.inspector-wrap').on('wheel.intro', null);
85066                     d3_select('.preset-list-button').on('click.intro', null);
85067                     context.on('exit.intro', null);
85068                     nextStep();
85069                 }
85070             }
85071
85072
85073             function nameRoad() {
85074                 context.on('exit.intro', function() {
85075                     continueTo(didNameRoad);
85076                 });
85077
85078                 timeout(function() {
85079                     reveal('.entity-editor-pane',
85080                         t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
85081                         { tooltipClass: 'intro-lines-name_road' }
85082                     );
85083                 }, 500);
85084
85085                 function continueTo(nextStep) {
85086                     context.on('exit.intro', null);
85087                     nextStep();
85088                 }
85089             }
85090
85091
85092             function didNameRoad() {
85093                 context.history().checkpoint('doneAddLine');
85094
85095                 timeout(function() {
85096                     reveal('#surface', t('intro.lines.did_name_road'), {
85097                         buttonText: t('intro.ok'),
85098                         buttonCallback: function() { continueTo(updateLine); }
85099                     });
85100                 }, 500);
85101
85102                 function continueTo(nextStep) {
85103                     nextStep();
85104                 }
85105             }
85106
85107
85108             function updateLine() {
85109                 context.history().reset('doneAddLine');
85110                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85111                     return chapter.restart();
85112                 }
85113
85114                 var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
85115                 if (msec) { reveal(null, null, { duration: 0 }); }
85116                 context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
85117
85118                 timeout(function() {
85119                     var padding = 250 * Math.pow(2, context.map().zoom() - 19);
85120                     var box = pad$2(woodRoadDragMidpoint, padding, context);
85121                     var advance = function() { continueTo(addNode); };
85122
85123                     reveal(box, t('intro.lines.update_line'),
85124                         { buttonText: t('intro.ok'), buttonCallback: advance }
85125                     );
85126
85127                     context.map().on('move.intro drawn.intro', function() {
85128                         var padding = 250 * Math.pow(2, context.map().zoom() - 19);
85129                         var box = pad$2(woodRoadDragMidpoint, padding, context);
85130                         reveal(box, t('intro.lines.update_line'),
85131                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
85132                         );
85133                     });
85134                 }, msec + 100);
85135
85136                 function continueTo(nextStep) {
85137                     context.map().on('move.intro drawn.intro', null);
85138                     nextStep();
85139                 }
85140             }
85141
85142
85143             function addNode() {
85144                 context.history().reset('doneAddLine');
85145                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85146                     return chapter.restart();
85147                 }
85148
85149                 var padding = 40 * Math.pow(2, context.map().zoom() - 19);
85150                 var box = pad$2(woodRoadAddNode, padding, context);
85151                 reveal(box, t('intro.lines.add_node'));
85152
85153                 context.map().on('move.intro drawn.intro', function() {
85154                     var padding = 40 * Math.pow(2, context.map().zoom() - 19);
85155                     var box = pad$2(woodRoadAddNode, padding, context);
85156                     reveal(box, t('intro.lines.add_node'), { duration: 0 });
85157                 });
85158
85159                 context.history().on('change.intro', function(changed) {
85160                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85161                         return continueTo(updateLine);
85162                     }
85163                     if (changed.created().length === 1) {
85164                         timeout(function() { continueTo(startDragEndpoint); }, 500);
85165                     }
85166                 });
85167
85168                 context.on('enter.intro', function(mode) {
85169                     if (mode.id !== 'select') {
85170                         continueTo(updateLine);
85171                     }
85172                 });
85173
85174                 function continueTo(nextStep) {
85175                     context.map().on('move.intro drawn.intro', null);
85176                     context.history().on('change.intro', null);
85177                     context.on('enter.intro', null);
85178                     nextStep();
85179                 }
85180             }
85181
85182
85183             function startDragEndpoint() {
85184                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85185                     return continueTo(updateLine);
85186                 }
85187                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85188                 var box = pad$2(woodRoadDragEndpoint, padding, context);
85189                 reveal(box, t('intro.lines.start_drag_endpoint'));
85190
85191                 context.map().on('move.intro drawn.intro', function() {
85192                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85193                         return continueTo(updateLine);
85194                     }
85195                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85196                     var box = pad$2(woodRoadDragEndpoint, padding, context);
85197                     reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
85198
85199                     var entity = context.entity(woodRoadEndID);
85200                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
85201                         continueTo(finishDragEndpoint);
85202                     }
85203                 });
85204
85205                 function continueTo(nextStep) {
85206                     context.map().on('move.intro drawn.intro', null);
85207                     nextStep();
85208                 }
85209             }
85210
85211
85212             function finishDragEndpoint() {
85213                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85214                     return continueTo(updateLine);
85215                 }
85216
85217                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85218                 var box = pad$2(woodRoadDragEndpoint, padding, context);
85219                 reveal(box, t('intro.lines.finish_drag_endpoint'));
85220
85221                 context.map().on('move.intro drawn.intro', function() {
85222                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85223                         return continueTo(updateLine);
85224                     }
85225                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85226                     var box = pad$2(woodRoadDragEndpoint, padding, context);
85227                     reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
85228
85229                     var entity = context.entity(woodRoadEndID);
85230                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
85231                         continueTo(startDragEndpoint);
85232                     }
85233                 });
85234
85235                 context.on('enter.intro', function() {
85236                     continueTo(startDragMidpoint);
85237                 });
85238
85239                 function continueTo(nextStep) {
85240                     context.map().on('move.intro drawn.intro', null);
85241                     context.on('enter.intro', null);
85242                     nextStep();
85243                 }
85244             }
85245
85246
85247             function startDragMidpoint() {
85248                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85249                     return continueTo(updateLine);
85250                 }
85251                 if (context.selectedIDs().indexOf(woodRoadID) === -1) {
85252                     context.enter(modeSelect(context, [woodRoadID]));
85253                 }
85254
85255                 var padding = 80 * Math.pow(2, context.map().zoom() - 19);
85256                 var box = pad$2(woodRoadDragMidpoint, padding, context);
85257                 reveal(box, t('intro.lines.start_drag_midpoint'));
85258
85259                 context.map().on('move.intro drawn.intro', function() {
85260                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85261                         return continueTo(updateLine);
85262                     }
85263                     var padding = 80 * Math.pow(2, context.map().zoom() - 19);
85264                     var box = pad$2(woodRoadDragMidpoint, padding, context);
85265                     reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
85266                 });
85267
85268                 context.history().on('change.intro', function(changed) {
85269                     if (changed.created().length === 1) {
85270                         continueTo(continueDragMidpoint);
85271                     }
85272                 });
85273
85274                 context.on('enter.intro', function(mode) {
85275                     if (mode.id !== 'select') {
85276                         // keep Wood Road selected so midpoint triangles are drawn..
85277                         context.enter(modeSelect(context, [woodRoadID]));
85278                     }
85279                 });
85280
85281                 function continueTo(nextStep) {
85282                     context.map().on('move.intro drawn.intro', null);
85283                     context.history().on('change.intro', null);
85284                     context.on('enter.intro', null);
85285                     nextStep();
85286                 }
85287             }
85288
85289
85290             function continueDragMidpoint() {
85291                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85292                     return continueTo(updateLine);
85293                 }
85294
85295                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85296                 var box = pad$2(woodRoadDragEndpoint, padding, context);
85297                 box.height += 400;
85298
85299                 var advance = function() {
85300                     context.history().checkpoint('doneUpdateLine');
85301                     continueTo(deleteLines);
85302                 };
85303
85304                 reveal(box, t('intro.lines.continue_drag_midpoint'),
85305                     { buttonText: t('intro.ok'), buttonCallback: advance }
85306                 );
85307
85308                 context.map().on('move.intro drawn.intro', function() {
85309                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85310                         return continueTo(updateLine);
85311                     }
85312                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85313                     var box = pad$2(woodRoadDragEndpoint, padding, context);
85314                     box.height += 400;
85315                     reveal(box, t('intro.lines.continue_drag_midpoint'),
85316                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
85317                     );
85318                 });
85319
85320                 function continueTo(nextStep) {
85321                     context.map().on('move.intro drawn.intro', null);
85322                     nextStep();
85323                 }
85324             }
85325
85326
85327             function deleteLines() {
85328                 context.history().reset('doneUpdateLine');
85329                 context.enter(modeBrowse(context));
85330
85331                 if (!context.hasEntity(washingtonStreetID) ||
85332                     !context.hasEntity(twelfthAvenueID) ||
85333                     !context.hasEntity(eleventhAvenueEndID)) {
85334                     return chapter.restart();
85335                 }
85336
85337                 var msec = transitionTime(deleteLinesLoc, context.map().center());
85338                 if (msec) { reveal(null, null, { duration: 0 }); }
85339                 context.map().centerZoomEase(deleteLinesLoc, 18, msec);
85340
85341                 timeout(function() {
85342                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85343                     var box = pad$2(deleteLinesLoc, padding, context);
85344                     box.top -= 200;
85345                     box.height += 400;
85346                     var advance = function() { continueTo(rightClickIntersection); };
85347
85348                     reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
85349                         { buttonText: t('intro.ok'), buttonCallback: advance }
85350                     );
85351
85352                     context.map().on('move.intro drawn.intro', function() {
85353                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85354                         var box = pad$2(deleteLinesLoc, padding, context);
85355                         box.top -= 200;
85356                         box.height += 400;
85357                         reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
85358                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
85359                         );
85360                     });
85361
85362                     context.history().on('change.intro', function() {
85363                         timeout(function() {
85364                             continueTo(deleteLines);
85365                         }, 500);  // after any transition (e.g. if user deleted intersection)
85366                     });
85367
85368                 }, msec + 100);
85369
85370                 function continueTo(nextStep) {
85371                     context.map().on('move.intro drawn.intro', null);
85372                     context.history().on('change.intro', null);
85373                     nextStep();
85374                 }
85375             }
85376
85377
85378             function rightClickIntersection() {
85379                 context.history().reset('doneUpdateLine');
85380                 context.enter(modeBrowse(context));
85381
85382                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
85383
85384                 timeout(function() {
85385                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85386                     var box = pad$2(eleventhAvenueEnd, padding, context);
85387                     reveal(box, t('intro.lines.rightclick_intersection',
85388                         { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
85389                     );
85390
85391                     context.map().on('move.intro drawn.intro', function() {
85392                         var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85393                         var box = pad$2(eleventhAvenueEnd, padding, context);
85394                         reveal(box, t('intro.lines.rightclick_intersection',
85395                             { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
85396                             { duration: 0 }
85397                         );
85398                     });
85399
85400                     context.on('enter.intro', function(mode) {
85401                         if (mode.id !== 'select') return;
85402                         var ids = context.selectedIDs();
85403                         if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) return;
85404
85405                         timeout(function() {
85406                             var node = selectMenuItem('split').node();
85407                             if (!node) return;
85408                             continueTo(splitIntersection);
85409                         }, 300);  // after menu visible
85410                     });
85411
85412                     context.history().on('change.intro', function() {
85413                         timeout(function() {
85414                             continueTo(deleteLines);
85415                         }, 300);  // after any transition (e.g. if user deleted intersection)
85416                     });
85417
85418                 }, 600);
85419
85420                 function continueTo(nextStep) {
85421                     context.map().on('move.intro drawn.intro', null);
85422                     context.on('enter.intro', null);
85423                     context.history().on('change.intro', null);
85424                     nextStep();
85425                 }
85426             }
85427
85428
85429             function splitIntersection() {
85430                 if (!context.hasEntity(washingtonStreetID) ||
85431                     !context.hasEntity(twelfthAvenueID) ||
85432                     !context.hasEntity(eleventhAvenueEndID)) {
85433                     return continueTo(deleteLines);
85434                 }
85435
85436                 var node = selectMenuItem('split').node();
85437                 if (!node) { return continueTo(rightClickIntersection); }
85438
85439                 var wasChanged = false;
85440                 var menuCoords = context.map().mouseCoordinates();
85441                 _washingtonSegmentID = null;
85442
85443                 revealEditMenu(menuCoords, t('intro.lines.split_intersection',
85444                     { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
85445                 );
85446
85447                 context.map().on('move.intro drawn.intro', function() {
85448                     var node = selectMenuItem('split').node();
85449                     if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
85450
85451                     revealEditMenu(menuCoords, t('intro.lines.split_intersection',
85452                         { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
85453                         { duration: 0 }
85454                     );
85455                 });
85456
85457                 context.history().on('change.intro', function(changed) {
85458                     wasChanged = true;
85459                     timeout(function() {
85460                         if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
85461                             _washingtonSegmentID = changed.created()[0].id;
85462                             continueTo(didSplit);
85463                         } else {
85464                             _washingtonSegmentID = null;
85465                             continueTo(retrySplit);
85466                         }
85467                     }, 300);  // after any transition (e.g. if user deleted intersection)
85468                 });
85469
85470                 function continueTo(nextStep) {
85471                     context.map().on('move.intro drawn.intro', null);
85472                     context.history().on('change.intro', null);
85473                     nextStep();
85474                 }
85475             }
85476
85477
85478             function retrySplit() {
85479                 context.enter(modeBrowse(context));
85480                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
85481                 var advance = function() { continueTo(rightClickIntersection); };
85482
85483                 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85484                 var box = pad$2(eleventhAvenueEnd, padding, context);
85485                 reveal(box, t('intro.lines.retry_split'),
85486                     { buttonText: t('intro.ok'), buttonCallback: advance }
85487                 );
85488
85489                 context.map().on('move.intro drawn.intro', function() {
85490                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85491                     var box = pad$2(eleventhAvenueEnd, padding, context);
85492                     reveal(box, t('intro.lines.retry_split'),
85493                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
85494                     );
85495                 });
85496
85497                 function continueTo(nextStep) {
85498                     context.map().on('move.intro drawn.intro', null);
85499                     nextStep();
85500                 }
85501             }
85502
85503
85504             function didSplit() {
85505                 if (!_washingtonSegmentID ||
85506                     !context.hasEntity(_washingtonSegmentID) ||
85507                     !context.hasEntity(washingtonStreetID) ||
85508                     !context.hasEntity(twelfthAvenueID) ||
85509                     !context.hasEntity(eleventhAvenueEndID)) {
85510                     return continueTo(rightClickIntersection);
85511                 }
85512
85513                 var ids = context.selectedIDs();
85514                 var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
85515                 var street = t('intro.graph.name.washington-street');
85516
85517                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85518                 var box = pad$2(twelfthAvenue, padding, context);
85519                 box.width = box.width / 2;
85520                 reveal(box, t(string, { street1: street, street2: street }),
85521                     { duration: 500 }
85522                 );
85523
85524                 timeout(function() {
85525                     context.map().centerZoomEase(twelfthAvenue, 18, 500);
85526
85527                     context.map().on('move.intro drawn.intro', function() {
85528                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85529                         var box = pad$2(twelfthAvenue, padding, context);
85530                         box.width = box.width / 2;
85531                         reveal(box, t(string, { street1: street, street2: street }),
85532                             { duration: 0 }
85533                         );
85534                     });
85535                 }, 600);  // after initial reveal and curtain cut
85536
85537                 context.on('enter.intro', function() {
85538                     var ids = context.selectedIDs();
85539                     if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
85540                         continueTo(multiSelect);
85541                     }
85542                 });
85543
85544                 context.history().on('change.intro', function() {
85545                     if (!_washingtonSegmentID ||
85546                         !context.hasEntity(_washingtonSegmentID) ||
85547                         !context.hasEntity(washingtonStreetID) ||
85548                         !context.hasEntity(twelfthAvenueID) ||
85549                         !context.hasEntity(eleventhAvenueEndID)) {
85550                         return continueTo(rightClickIntersection);
85551                     }
85552                 });
85553
85554                 function continueTo(nextStep) {
85555                     context.map().on('move.intro drawn.intro', null);
85556                     context.on('enter.intro', null);
85557                     context.history().on('change.intro', null);
85558                     nextStep();
85559                 }
85560             }
85561
85562
85563             function multiSelect() {
85564                 if (!_washingtonSegmentID ||
85565                     !context.hasEntity(_washingtonSegmentID) ||
85566                     !context.hasEntity(washingtonStreetID) ||
85567                     !context.hasEntity(twelfthAvenueID) ||
85568                     !context.hasEntity(eleventhAvenueEndID)) {
85569                     return continueTo(rightClickIntersection);
85570                 }
85571
85572                 var ids = context.selectedIDs();
85573                 var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
85574                 var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
85575
85576                 if (hasWashington && hasTwelfth) {
85577                     return continueTo(multiRightClick);
85578                 } else if (!hasWashington && !hasTwelfth) {
85579                     return continueTo(didSplit);
85580                 }
85581
85582                 context.map().centerZoomEase(twelfthAvenue, 18, 500);
85583
85584                 timeout(function() {
85585                     var selected, other, padding, box;
85586                     if (hasWashington) {
85587                         selected = t('intro.graph.name.washington-street');
85588                         other = t('intro.graph.name.12th-avenue');
85589                         padding = 60 * Math.pow(2, context.map().zoom() - 18);
85590                         box = pad$2(twelfthAvenueEnd, padding, context);
85591                         box.width *= 3;
85592                     } else {
85593                         selected = t('intro.graph.name.12th-avenue');
85594                         other = t('intro.graph.name.washington-street');
85595                         padding = 200 * Math.pow(2, context.map().zoom() - 18);
85596                         box = pad$2(twelfthAvenue, padding, context);
85597                         box.width /= 2;
85598                     }
85599
85600                     reveal(box,
85601                         t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
85602                     );
85603
85604                     context.map().on('move.intro drawn.intro', function() {
85605                         if (hasWashington) {
85606                             selected = t('intro.graph.name.washington-street');
85607                             other = t('intro.graph.name.12th-avenue');
85608                             padding = 60 * Math.pow(2, context.map().zoom() - 18);
85609                             box = pad$2(twelfthAvenueEnd, padding, context);
85610                             box.width *= 3;
85611                         } else {
85612                             selected = t('intro.graph.name.12th-avenue');
85613                             other = t('intro.graph.name.washington-street');
85614                             padding = 200 * Math.pow(2, context.map().zoom() - 18);
85615                             box = pad$2(twelfthAvenue, padding, context);
85616                             box.width /= 2;
85617                         }
85618
85619                         reveal(box,
85620                             t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
85621                             { duration: 0 }
85622                         );
85623                     });
85624
85625                     context.on('enter.intro', function() {
85626                         continueTo(multiSelect);
85627                     });
85628
85629                     context.history().on('change.intro', function() {
85630                         if (!_washingtonSegmentID ||
85631                             !context.hasEntity(_washingtonSegmentID) ||
85632                             !context.hasEntity(washingtonStreetID) ||
85633                             !context.hasEntity(twelfthAvenueID) ||
85634                             !context.hasEntity(eleventhAvenueEndID)) {
85635                             return continueTo(rightClickIntersection);
85636                         }
85637                     });
85638                 }, 600);
85639
85640                 function continueTo(nextStep) {
85641                     context.map().on('move.intro drawn.intro', null);
85642                     context.on('enter.intro', null);
85643                     context.history().on('change.intro', null);
85644                     nextStep();
85645                 }
85646             }
85647
85648
85649             function multiRightClick() {
85650                 if (!_washingtonSegmentID ||
85651                     !context.hasEntity(_washingtonSegmentID) ||
85652                     !context.hasEntity(washingtonStreetID) ||
85653                     !context.hasEntity(twelfthAvenueID) ||
85654                     !context.hasEntity(eleventhAvenueEndID)) {
85655                     return continueTo(rightClickIntersection);
85656                 }
85657
85658                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85659                 var box = pad$2(twelfthAvenue, padding, context);
85660                 reveal(box, t('intro.lines.multi_rightclick'));
85661
85662                 context.map().on('move.intro drawn.intro', function() {
85663                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85664                     var box = pad$2(twelfthAvenue, padding, context);
85665                     reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
85666                 });
85667
85668                 d3_select(window).on('click.intro contextmenu.intro', function() {
85669                     timeout(function() {
85670                         var ids = context.selectedIDs();
85671                         if (ids.length === 2 &&
85672                             ids.indexOf(twelfthAvenueID) !== -1 &&
85673                             ids.indexOf(_washingtonSegmentID) !== -1) {
85674                                 var node = selectMenuItem('delete').node();
85675                                 if (!node) return;
85676                                 continueTo(multiDelete);
85677                         } else if (ids.length === 1 &&
85678                             ids.indexOf(_washingtonSegmentID) !== -1) {
85679                             return continueTo(multiSelect);
85680                         } else {
85681                             return continueTo(didSplit);
85682                         }
85683                     }, 300);  // after edit menu visible
85684                 }, true);
85685
85686                 context.history().on('change.intro', function() {
85687                     if (!_washingtonSegmentID ||
85688                         !context.hasEntity(_washingtonSegmentID) ||
85689                         !context.hasEntity(washingtonStreetID) ||
85690                         !context.hasEntity(twelfthAvenueID) ||
85691                         !context.hasEntity(eleventhAvenueEndID)) {
85692                         return continueTo(rightClickIntersection);
85693                     }
85694                 });
85695
85696                 function continueTo(nextStep) {
85697                     context.map().on('move.intro drawn.intro', null);
85698                     d3_select(window).on('click.intro contextmenu.intro', null, true);
85699                     context.history().on('change.intro', null);
85700                     nextStep();
85701                 }
85702             }
85703
85704
85705             function multiDelete() {
85706                 if (!_washingtonSegmentID ||
85707                     !context.hasEntity(_washingtonSegmentID) ||
85708                     !context.hasEntity(washingtonStreetID) ||
85709                     !context.hasEntity(twelfthAvenueID) ||
85710                     !context.hasEntity(eleventhAvenueEndID)) {
85711                     return continueTo(rightClickIntersection);
85712                 }
85713
85714                 var node = selectMenuItem('delete').node();
85715                 if (!node) return continueTo(multiRightClick);
85716
85717                 var menuCoords = context.map().mouseCoordinates();
85718                 revealEditMenu(menuCoords,
85719                     t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
85720                 );
85721
85722                 context.map().on('move.intro drawn.intro', function() {
85723                     revealEditMenu(menuCoords,
85724                         t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
85725                         { duration: 0 }
85726                     );
85727                 });
85728
85729                 context.on('exit.intro', function() {
85730                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
85731                         return continueTo(multiSelect);  // left select mode but roads still exist
85732                     }
85733                 });
85734
85735                 context.history().on('change.intro', function() {
85736                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
85737                         continueTo(retryDelete);         // changed something but roads still exist
85738                     } else {
85739                         continueTo(play);
85740                     }
85741                 });
85742
85743                 function continueTo(nextStep) {
85744                     context.map().on('move.intro drawn.intro', null);
85745                     context.on('exit.intro', null);
85746                     context.history().on('change.intro', null);
85747                     nextStep();
85748                 }
85749             }
85750
85751
85752             function retryDelete() {
85753                 context.enter(modeBrowse(context));
85754
85755                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85756                 var box = pad$2(twelfthAvenue, padding, context);
85757                 reveal(box, t('intro.lines.retry_delete'), {
85758                     buttonText: t('intro.ok'),
85759                     buttonCallback: function() { continueTo(multiSelect); }
85760                 });
85761
85762                 function continueTo(nextStep) {
85763                     nextStep();
85764                 }
85765             }
85766
85767
85768             function play() {
85769                 dispatch$1.call('done');
85770                 reveal('#id-container',
85771                     t('intro.lines.play', { next: t('intro.buildings.title') }), {
85772                         tooltipBox: '.intro-nav-wrap .chapter-building',
85773                         buttonText: t('intro.ok'),
85774                         buttonCallback: function() { reveal('#id-container'); }
85775                     }
85776                 );
85777            }
85778
85779
85780             chapter.enter = function() {
85781                 addLine();
85782             };
85783
85784
85785             chapter.exit = function() {
85786                 timeouts.forEach(window.clearTimeout);
85787                 d3_select(window).on('mousedown.intro', null, true);
85788                 context.on('enter.intro exit.intro', null);
85789                 context.map().on('move.intro drawn.intro', null);
85790                 context.history().on('change.intro', null);
85791                 d3_select('.inspector-wrap').on('wheel.intro', null);
85792                 d3_select('.preset-list-button').on('click.intro', null);
85793             };
85794
85795
85796             chapter.restart = function() {
85797                 chapter.exit();
85798                 chapter.enter();
85799             };
85800
85801
85802             return utilRebind(chapter, dispatch$1, 'on');
85803         }
85804
85805         function uiIntroBuilding(context, reveal) {
85806             var dispatch$1 = dispatch('done');
85807             var house = [-85.62815, 41.95638];
85808             var tank = [-85.62732, 41.95347];
85809             var buildingCatetory = context.presets().item('category-building');
85810             var housePreset = context.presets().item('building/house');
85811             var tankPreset = context.presets().item('man_made/storage_tank');
85812             var timeouts = [];
85813             var _houseID = null;
85814             var _tankID = null;
85815
85816
85817             var chapter = {
85818                 title: 'intro.buildings.title'
85819             };
85820
85821
85822             function timeout(f, t) {
85823                 timeouts.push(window.setTimeout(f, t));
85824             }
85825
85826
85827             function eventCancel() {
85828                 event.stopPropagation();
85829                 event.preventDefault();
85830             }
85831
85832
85833             function revealHouse(center, text, options) {
85834                 var padding = 160 * Math.pow(2, context.map().zoom() - 20);
85835                 var box = pad$2(center, padding, context);
85836                 reveal(box, text, options);
85837             }
85838
85839
85840             function revealTank(center, text, options) {
85841                 var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
85842                 var box = pad$2(center, padding, context);
85843                 reveal(box, text, options);
85844             }
85845
85846
85847             function revealEditMenu(loc, text, options) {
85848                 var rect = context.surfaceRect();
85849                 var point = context.curtainProjection(loc);
85850                 var pad = 40;
85851                 var width = 250 + (2 * pad);
85852                 var height = 350;
85853                 var startX = rect.left + point[0];
85854                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
85855                 var box = {
85856                     left: left,
85857                     top: point[1] + rect.top - 60,
85858                     width: width,
85859                     height: height
85860                 };
85861                 reveal(box, text, options);
85862             }
85863
85864
85865             function addHouse() {
85866                 context.enter(modeBrowse(context));
85867                 context.history().reset('initial');
85868                 _houseID = null;
85869
85870                 var msec = transitionTime(house, context.map().center());
85871                 if (msec) { reveal(null, null, { duration: 0 }); }
85872                 context.map().centerZoomEase(house, 19, msec);
85873
85874                 timeout(function() {
85875                     var tooltip = reveal('button.add-area',
85876                         t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
85877
85878                     tooltip.selectAll('.tooltip-inner')
85879                         .insert('svg', 'span')
85880                         .attr('class', 'tooltip-illustration')
85881                         .append('use')
85882                         .attr('xlink:href', '#iD-graphic-buildings');
85883
85884                     context.on('enter.intro', function(mode) {
85885                         if (mode.id !== 'add-area') return;
85886                         continueTo(startHouse);
85887                     });
85888                 }, msec + 100);
85889
85890                 function continueTo(nextStep) {
85891                     context.on('enter.intro', null);
85892                     nextStep();
85893                 }
85894             }
85895
85896
85897             function startHouse() {
85898                 if (context.mode().id !== 'add-area') {
85899                     return continueTo(addHouse);
85900                 }
85901
85902                 _houseID = null;
85903                 context.map().zoomEase(20, 500);
85904
85905                 timeout(function() {
85906                     revealHouse(house, t('intro.buildings.start_building'));
85907
85908                     context.map().on('move.intro drawn.intro', function() {
85909                         revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
85910                     });
85911
85912                     context.on('enter.intro', function(mode) {
85913                         if (mode.id !== 'draw-area') return chapter.restart();
85914                         continueTo(continueHouse);
85915                     });
85916
85917                 }, 550);  // after easing
85918
85919                 function continueTo(nextStep) {
85920                     context.map().on('move.intro drawn.intro', null);
85921                     context.on('enter.intro', null);
85922                     nextStep();
85923                 }
85924             }
85925
85926
85927             function continueHouse() {
85928                 if (context.mode().id !== 'draw-area') {
85929                     return continueTo(addHouse);
85930                 }
85931
85932                 _houseID = null;
85933
85934                 revealHouse(house, t('intro.buildings.continue_building'));
85935
85936                 context.map().on('move.intro drawn.intro', function() {
85937                     revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
85938                 });
85939
85940                 context.on('enter.intro', function(mode) {
85941                     if (mode.id === 'draw-area') {
85942                         return;
85943                     } else if (mode.id === 'select') {
85944                         var graph = context.graph();
85945                         var way = context.entity(context.selectedIDs()[0]);
85946                         var nodes = graph.childNodes(way);
85947                         var points = utilArrayUniq(nodes)
85948                             .map(function(n) { return context.projection(n.loc); });
85949
85950                         if (isMostlySquare(points)) {
85951                             _houseID = way.id;
85952                             return continueTo(chooseCategoryBuilding);
85953                         } else {
85954                             return continueTo(retryHouse);
85955                         }
85956
85957                     } else {
85958                         return chapter.restart();
85959                     }
85960                 });
85961
85962                 function continueTo(nextStep) {
85963                     context.map().on('move.intro drawn.intro', null);
85964                     context.on('enter.intro', null);
85965                     nextStep();
85966                 }
85967             }
85968
85969
85970             function retryHouse() {
85971                 var onClick = function() { continueTo(addHouse); };
85972
85973                 revealHouse(house, t('intro.buildings.retry_building'),
85974                     { buttonText: t('intro.ok'), buttonCallback: onClick }
85975                 );
85976
85977                 context.map().on('move.intro drawn.intro', function() {
85978                     revealHouse(house, t('intro.buildings.retry_building'),
85979                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
85980                     );
85981                 });
85982
85983                 function continueTo(nextStep) {
85984                     context.map().on('move.intro drawn.intro', null);
85985                     nextStep();
85986                 }
85987             }
85988
85989
85990             function chooseCategoryBuilding() {
85991                 if (!_houseID || !context.hasEntity(_houseID)) {
85992                     return addHouse();
85993                 }
85994                 var ids = context.selectedIDs();
85995                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
85996                     context.enter(modeSelect(context, [_houseID]));
85997                 }
85998
85999                 // disallow scrolling
86000                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86001
86002                 timeout(function() {
86003                     // reset pane, in case user somehow happened to change it..
86004                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86005
86006                     var button = d3_select('.preset-category-building .preset-list-button');
86007
86008                     reveal(button.node(),
86009                         t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
86010                     );
86011
86012                     button.on('click.intro', function() {
86013                         button.on('click.intro', null);
86014                         continueTo(choosePresetHouse);
86015                     });
86016
86017                 }, 400);  // after preset list pane visible..
86018
86019
86020                 context.on('enter.intro', function(mode) {
86021                     if (!_houseID || !context.hasEntity(_houseID)) {
86022                         return continueTo(addHouse);
86023                     }
86024                     var ids = context.selectedIDs();
86025                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
86026                         return continueTo(chooseCategoryBuilding);
86027                     }
86028                 });
86029
86030                 function continueTo(nextStep) {
86031                     d3_select('.inspector-wrap').on('wheel.intro', null);
86032                     d3_select('.preset-list-button').on('click.intro', null);
86033                     context.on('enter.intro', null);
86034                     nextStep();
86035                 }
86036             }
86037
86038
86039             function choosePresetHouse() {
86040                 if (!_houseID || !context.hasEntity(_houseID)) {
86041                     return addHouse();
86042                 }
86043                 var ids = context.selectedIDs();
86044                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
86045                     context.enter(modeSelect(context, [_houseID]));
86046                 }
86047
86048                 // disallow scrolling
86049                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86050
86051                 timeout(function() {
86052                     // reset pane, in case user somehow happened to change it..
86053                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86054
86055                     var button = d3_select('.preset-building-house .preset-list-button');
86056
86057                     reveal(button.node(),
86058                         t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
86059                         { duration: 300 }
86060                     );
86061
86062                     button.on('click.intro', function() {
86063                         button.on('click.intro', null);
86064                         continueTo(closeEditorHouse);
86065                     });
86066
86067                 }, 400);  // after preset list pane visible..
86068
86069                 context.on('enter.intro', function(mode) {
86070                     if (!_houseID || !context.hasEntity(_houseID)) {
86071                         return continueTo(addHouse);
86072                     }
86073                     var ids = context.selectedIDs();
86074                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
86075                         return continueTo(chooseCategoryBuilding);
86076                     }
86077                 });
86078
86079                 function continueTo(nextStep) {
86080                     d3_select('.inspector-wrap').on('wheel.intro', null);
86081                     d3_select('.preset-list-button').on('click.intro', null);
86082                     context.on('enter.intro', null);
86083                     nextStep();
86084                 }
86085             }
86086
86087
86088             function closeEditorHouse() {
86089                 if (!_houseID || !context.hasEntity(_houseID)) {
86090                     return addHouse();
86091                 }
86092                 var ids = context.selectedIDs();
86093                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
86094                     context.enter(modeSelect(context, [_houseID]));
86095                 }
86096
86097                 context.history().checkpoint('hasHouse');
86098
86099                 context.on('exit.intro', function() {
86100                     continueTo(rightClickHouse);
86101                 });
86102
86103                 timeout(function() {
86104                     reveal('.entity-editor-pane',
86105                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
86106                     );
86107                 }, 500);
86108
86109                 function continueTo(nextStep) {
86110                     context.on('exit.intro', null);
86111                     nextStep();
86112                 }
86113             }
86114
86115
86116             function rightClickHouse() {
86117                 if (!_houseID) return chapter.restart();
86118
86119                 context.enter(modeBrowse(context));
86120                 context.history().reset('hasHouse');
86121                 var zoom = context.map().zoom();
86122                 if (zoom < 20) {
86123                     zoom = 20;
86124                 }
86125                 context.map().centerZoomEase(house, zoom, 500);
86126
86127                 context.on('enter.intro', function(mode) {
86128                     if (mode.id !== 'select') return;
86129                     var ids = context.selectedIDs();
86130                     if (ids.length !== 1 || ids[0] !== _houseID) return;
86131
86132                     timeout(function() {
86133                         var node = selectMenuItem('orthogonalize').node();
86134                         if (!node) return;
86135                         continueTo(clickSquare);
86136                     }, 300);  // after menu visible
86137                 });
86138
86139                 context.map().on('move.intro drawn.intro', function() {
86140                     revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
86141                 });
86142
86143                 context.history().on('change.intro', function() {
86144                     continueTo(rightClickHouse);
86145                 });
86146
86147                 function continueTo(nextStep) {
86148                     context.on('enter.intro', null);
86149                     context.map().on('move.intro drawn.intro', null);
86150                     context.history().on('change.intro', null);
86151                     nextStep();
86152                 }
86153             }
86154
86155
86156             function clickSquare() {
86157                 if (!_houseID) return chapter.restart();
86158                 var entity = context.hasEntity(_houseID);
86159                 if (!entity) return continueTo(rightClickHouse);
86160
86161                 var node = selectMenuItem('orthogonalize').node();
86162                 if (!node) { return continueTo(rightClickHouse); }
86163
86164                 var wasChanged = false;
86165                 var menuCoords = context.map().mouseCoordinates();
86166
86167                 revealEditMenu(menuCoords,
86168                     t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
86169                 );
86170
86171                 context.on('enter.intro', function(mode) {
86172                     if (mode.id === 'browse') {
86173                         continueTo(rightClickHouse);
86174                     } else if (mode.id === 'move' || mode.id === 'rotate') {
86175                         continueTo(retryClickSquare);
86176                     }
86177                 });
86178
86179                 context.map().on('move.intro drawn.intro', function() {
86180                     var node = selectMenuItem('orthogonalize').node();
86181                     if (!wasChanged && !node) { return continueTo(rightClickHouse); }
86182
86183                     revealEditMenu(menuCoords,
86184                         t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
86185                         { duration: 0 }
86186                     );
86187                 });
86188
86189                 context.history().on('change.intro', function() {
86190                     wasChanged = true;
86191                     context.history().on('change.intro', null);
86192
86193                     // Something changed.  Wait for transition to complete and check undo annotation.
86194                     timeout(function() {
86195                         if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) {
86196                             continueTo(doneSquare);
86197                         } else {
86198                             continueTo(retryClickSquare);
86199                         }
86200                     }, 500);  // after transitioned actions
86201                 });
86202
86203                 function continueTo(nextStep) {
86204                     context.on('enter.intro', null);
86205                     context.map().on('move.intro drawn.intro', null);
86206                     context.history().on('change.intro', null);
86207                     nextStep();
86208                 }
86209             }
86210
86211
86212             function retryClickSquare() {
86213                 context.enter(modeBrowse(context));
86214
86215                 revealHouse(house, t('intro.buildings.retry_square'), {
86216                     buttonText: t('intro.ok'),
86217                     buttonCallback: function() { continueTo(rightClickHouse); }
86218                 });
86219
86220                 function continueTo(nextStep) {
86221                     nextStep();
86222                 }
86223             }
86224
86225
86226             function doneSquare() {
86227                 context.history().checkpoint('doneSquare');
86228
86229                 revealHouse(house, t('intro.buildings.done_square'), {
86230                     buttonText: t('intro.ok'),
86231                     buttonCallback: function() { continueTo(addTank); }
86232                 });
86233
86234                 function continueTo(nextStep) {
86235                     nextStep();
86236                 }
86237             }
86238
86239
86240             function addTank() {
86241                 context.enter(modeBrowse(context));
86242                 context.history().reset('doneSquare');
86243                 _tankID = null;
86244
86245                 var msec = transitionTime(tank, context.map().center());
86246                 if (msec) { reveal(null, null, { duration: 0 }); }
86247                 context.map().centerZoomEase(tank, 19.5, msec);
86248
86249                 timeout(function() {
86250                     reveal('button.add-area',
86251                         t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
86252                     );
86253
86254                     context.on('enter.intro', function(mode) {
86255                         if (mode.id !== 'add-area') return;
86256                         continueTo(startTank);
86257                     });
86258                 }, msec + 100);
86259
86260                 function continueTo(nextStep) {
86261                     context.on('enter.intro', null);
86262                     nextStep();
86263                 }
86264             }
86265
86266
86267             function startTank() {
86268                 if (context.mode().id !== 'add-area') {
86269                     return continueTo(addTank);
86270                 }
86271
86272                 _tankID = null;
86273
86274                 timeout(function() {
86275                     revealTank(tank, t('intro.buildings.start_tank'));
86276
86277                     context.map().on('move.intro drawn.intro', function() {
86278                         revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
86279                     });
86280
86281                     context.on('enter.intro', function(mode) {
86282                         if (mode.id !== 'draw-area') return chapter.restart();
86283                         continueTo(continueTank);
86284                     });
86285
86286                 }, 550);  // after easing
86287
86288                 function continueTo(nextStep) {
86289                     context.map().on('move.intro drawn.intro', null);
86290                     context.on('enter.intro', null);
86291                     nextStep();
86292                 }
86293             }
86294
86295
86296             function continueTank() {
86297                 if (context.mode().id !== 'draw-area') {
86298                     return continueTo(addTank);
86299                 }
86300
86301                 _tankID = null;
86302
86303                 revealTank(tank, t('intro.buildings.continue_tank'));
86304
86305                 context.map().on('move.intro drawn.intro', function() {
86306                     revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
86307                 });
86308
86309                 context.on('enter.intro', function(mode) {
86310                     if (mode.id === 'draw-area') {
86311                         return;
86312                     } else if (mode.id === 'select') {
86313                         _tankID = context.selectedIDs()[0];
86314                         return continueTo(searchPresetTank);
86315                     } else {
86316                         return continueTo(addTank);
86317                     }
86318                 });
86319
86320                 function continueTo(nextStep) {
86321                     context.map().on('move.intro drawn.intro', null);
86322                     context.on('enter.intro', null);
86323                     nextStep();
86324                 }
86325             }
86326
86327
86328             function searchPresetTank() {
86329                 if (!_tankID || !context.hasEntity(_tankID)) {
86330                     return addTank();
86331                 }
86332                 var ids = context.selectedIDs();
86333                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
86334                     context.enter(modeSelect(context, [_tankID]));
86335                 }
86336
86337                 // disallow scrolling
86338                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86339
86340                 timeout(function() {
86341                     // reset pane, in case user somehow happened to change it..
86342                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86343
86344                     d3_select('.preset-search-input')
86345                         .on('keydown.intro', null)
86346                         .on('keyup.intro', checkPresetSearch);
86347
86348                     reveal('.preset-search-input',
86349                         t('intro.buildings.search_tank', { preset: tankPreset.name() })
86350                     );
86351                 }, 400);  // after preset list pane visible..
86352
86353                 context.on('enter.intro', function(mode) {
86354                     if (!_tankID || !context.hasEntity(_tankID)) {
86355                         return continueTo(addTank);
86356                     }
86357
86358                     var ids = context.selectedIDs();
86359                     if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
86360                         // keep the user's area selected..
86361                         context.enter(modeSelect(context, [_tankID]));
86362
86363                         // reset pane, in case user somehow happened to change it..
86364                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86365                         // disallow scrolling
86366                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86367
86368                         d3_select('.preset-search-input')
86369                             .on('keydown.intro', null)
86370                             .on('keyup.intro', checkPresetSearch);
86371
86372                         reveal('.preset-search-input',
86373                             t('intro.buildings.search_tank', { preset: tankPreset.name() })
86374                         );
86375
86376                         context.history().on('change.intro', null);
86377                     }
86378                 });
86379
86380                 function checkPresetSearch() {
86381                     var first = d3_select('.preset-list-item:first-child');
86382
86383                     if (first.classed('preset-man_made-storage_tank')) {
86384                         reveal(first.select('.preset-list-button').node(),
86385                             t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
86386                             { duration: 300 }
86387                         );
86388
86389                         d3_select('.preset-search-input')
86390                             .on('keydown.intro', eventCancel, true)
86391                             .on('keyup.intro', null);
86392
86393                         context.history().on('change.intro', function() {
86394                             continueTo(closeEditorTank);
86395                         });
86396                     }
86397                 }
86398
86399                 function continueTo(nextStep) {
86400                     d3_select('.inspector-wrap').on('wheel.intro', null);
86401                     context.on('enter.intro', null);
86402                     context.history().on('change.intro', null);
86403                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
86404                     nextStep();
86405                 }
86406             }
86407
86408
86409             function closeEditorTank() {
86410                 if (!_tankID || !context.hasEntity(_tankID)) {
86411                     return addTank();
86412                 }
86413                 var ids = context.selectedIDs();
86414                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
86415                     context.enter(modeSelect(context, [_tankID]));
86416                 }
86417
86418                 context.history().checkpoint('hasTank');
86419
86420                 context.on('exit.intro', function() {
86421                     continueTo(rightClickTank);
86422                 });
86423
86424                 timeout(function() {
86425                     reveal('.entity-editor-pane',
86426                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
86427                     );
86428                 }, 500);
86429
86430                 function continueTo(nextStep) {
86431                     context.on('exit.intro', null);
86432                     nextStep();
86433                 }
86434             }
86435
86436
86437             function rightClickTank() {
86438                 if (!_tankID) return continueTo(addTank);
86439
86440                 context.enter(modeBrowse(context));
86441                 context.history().reset('hasTank');
86442                 context.map().centerEase(tank, 500);
86443
86444                 timeout(function() {
86445                     context.on('enter.intro', function(mode) {
86446                         if (mode.id !== 'select') return;
86447                         var ids = context.selectedIDs();
86448                         if (ids.length !== 1 || ids[0] !== _tankID) return;
86449
86450                         timeout(function() {
86451                             var node = selectMenuItem('circularize').node();
86452                             if (!node) return;
86453                             continueTo(clickCircle);
86454                         }, 300);  // after menu visible
86455                     });
86456
86457                     revealTank(tank, t('intro.buildings.rightclick_tank'));
86458
86459                     context.map().on('move.intro drawn.intro', function() {
86460                         revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
86461                     });
86462
86463                     context.history().on('change.intro', function() {
86464                         continueTo(rightClickTank);
86465                     });
86466
86467                 }, 600);
86468
86469                 function continueTo(nextStep) {
86470                     context.on('enter.intro', null);
86471                     context.map().on('move.intro drawn.intro', null);
86472                     context.history().on('change.intro', null);
86473                     nextStep();
86474                 }
86475             }
86476
86477
86478             function clickCircle() {
86479                 if (!_tankID) return chapter.restart();
86480                 var entity = context.hasEntity(_tankID);
86481                 if (!entity) return continueTo(rightClickTank);
86482
86483                 var node = selectMenuItem('circularize').node();
86484                 if (!node) { return continueTo(rightClickTank); }
86485
86486                 var wasChanged = false;
86487                 var menuCoords = context.map().mouseCoordinates();
86488
86489                 revealEditMenu(menuCoords,
86490                     t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
86491                 );
86492
86493                 context.on('enter.intro', function(mode) {
86494                     if (mode.id === 'browse') {
86495                         continueTo(rightClickTank);
86496                     } else if (mode.id === 'move' || mode.id === 'rotate') {
86497                         continueTo(retryClickCircle);
86498                     }
86499                 });
86500
86501                 context.map().on('move.intro drawn.intro', function() {
86502                     var node = selectMenuItem('circularize').node();
86503                     if (!wasChanged && !node) { return continueTo(rightClickTank); }
86504
86505                     revealEditMenu(menuCoords,
86506                         t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
86507                         { duration: 0 }
86508                     );
86509                 });
86510
86511                 context.history().on('change.intro', function() {
86512                     wasChanged = true;
86513                     context.history().on('change.intro', null);
86514
86515                     // Something changed.  Wait for transition to complete and check undo annotation.
86516                     timeout(function() {
86517                         if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
86518                             continueTo(play);
86519                         } else {
86520                             continueTo(retryClickCircle);
86521                         }
86522                     }, 500);  // after transitioned actions
86523                 });
86524
86525                 function continueTo(nextStep) {
86526                     context.on('enter.intro', null);
86527                     context.map().on('move.intro drawn.intro', null);
86528                     context.history().on('change.intro', null);
86529                     nextStep();
86530                 }
86531             }
86532
86533
86534             function retryClickCircle() {
86535                 context.enter(modeBrowse(context));
86536
86537                 revealTank(tank, t('intro.buildings.retry_circle'), {
86538                     buttonText: t('intro.ok'),
86539                     buttonCallback: function() { continueTo(rightClickTank); }
86540                 });
86541
86542                 function continueTo(nextStep) {
86543                     nextStep();
86544                 }
86545             }
86546
86547
86548             function play() {
86549                 dispatch$1.call('done');
86550                 reveal('#id-container',
86551                     t('intro.buildings.play', { next: t('intro.startediting.title') }), {
86552                         tooltipBox: '.intro-nav-wrap .chapter-startEditing',
86553                         buttonText: t('intro.ok'),
86554                         buttonCallback: function() { reveal('#id-container'); }
86555                     }
86556                 );
86557             }
86558
86559
86560             chapter.enter = function() {
86561                 addHouse();
86562             };
86563
86564
86565             chapter.exit = function() {
86566                 timeouts.forEach(window.clearTimeout);
86567                 context.on('enter.intro exit.intro', null);
86568                 context.map().on('move.intro drawn.intro', null);
86569                 context.history().on('change.intro', null);
86570                 d3_select('.inspector-wrap').on('wheel.intro', null);
86571                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
86572                 d3_select('.more-fields .combobox-input').on('click.intro', null);
86573             };
86574
86575
86576             chapter.restart = function() {
86577                 chapter.exit();
86578                 chapter.enter();
86579             };
86580
86581
86582             return utilRebind(chapter, dispatch$1, 'on');
86583         }
86584
86585         function uiIntroStartEditing(context, reveal) {
86586             var dispatch$1 = dispatch('done', 'startEditing');
86587             var modalSelection = d3_select(null);
86588
86589
86590             var chapter = {
86591                 title: 'intro.startediting.title'
86592             };
86593
86594             function showHelp() {
86595                 reveal('.map-control.help-control',
86596                     t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
86597                         buttonText: t('intro.ok'),
86598                         buttonCallback: function() { shortcuts(); }
86599                     }
86600                 );
86601             }
86602
86603             function shortcuts() {
86604                 reveal('.map-control.help-control',
86605                     t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
86606                         buttonText: t('intro.ok'),
86607                         buttonCallback: function() { showSave(); }
86608                     }
86609                 );
86610             }
86611
86612             function showSave() {
86613                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
86614                 reveal('#bar button.save',
86615                     t('intro.startediting.save'), {
86616                         buttonText: t('intro.ok'),
86617                         buttonCallback: function() { showStart(); }
86618                     }
86619                 );
86620             }
86621
86622             function showStart() {
86623                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
86624
86625                 modalSelection = uiModal(context.container());
86626
86627                 modalSelection.select('.modal')
86628                     .attr('class', 'modal-splash modal col6');
86629
86630                 modalSelection.selectAll('.close').remove();
86631
86632                 var startbutton = modalSelection.select('.content')
86633                     .attr('class', 'fillL')
86634                     .append('button')
86635                         .attr('class', 'modal-section huge-modal-button')
86636                         .on('click', function() {
86637                             modalSelection.remove();
86638                         });
86639
86640                     startbutton
86641                         .append('svg')
86642                         .attr('class', 'illustration')
86643                         .append('use')
86644                         .attr('xlink:href', '#iD-logo-walkthrough');
86645
86646                     startbutton
86647                         .append('h2')
86648                         .text(t('intro.startediting.start'));
86649
86650                 dispatch$1.call('startEditing');
86651             }
86652
86653
86654             chapter.enter = function() {
86655                 showHelp();
86656             };
86657
86658
86659             chapter.exit = function() {
86660                 modalSelection.remove();
86661                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
86662             };
86663
86664
86665             return utilRebind(chapter, dispatch$1, 'on');
86666         }
86667
86668         var chapterUi = {
86669             welcome: uiIntroWelcome,
86670             navigation: uiIntroNavigation,
86671             point: uiIntroPoint,
86672             area: uiIntroArea,
86673             line: uiIntroLine,
86674             building: uiIntroBuilding,
86675             startEditing: uiIntroStartEditing
86676         };
86677
86678         var chapterFlow = [
86679             'welcome',
86680             'navigation',
86681             'point',
86682             'area',
86683             'line',
86684             'building',
86685             'startEditing'
86686         ];
86687
86688
86689         function uiIntro(context) {
86690             var INTRO_IMAGERY = 'EsriWorldImageryClarity';
86691             var introGraph = {};
86692             var _currChapter;
86693
86694             // create entities for intro graph and localize names
86695             for (var id in dataIntroGraph) {
86696                 introGraph[id] = osmEntity(localize(dataIntroGraph[id]));
86697             }
86698
86699
86700             function intro(selection) {
86701                 context.enter(modeBrowse(context));
86702
86703                 // Save current map state
86704                 var osm = context.connection();
86705                 var history = context.history().toJSON();
86706                 var hash = window.location.hash;
86707                 var center = context.map().center();
86708                 var zoom = context.map().zoom();
86709                 var background = context.background().baseLayerSource();
86710                 var overlays = context.background().overlayLayerSources();
86711                 var opacity = d3_selectAll('#map .layer-background').style('opacity');
86712                 var caches = osm && osm.caches();
86713                 var baseEntities = context.history().graph().base().entities;
86714                 var countryCode = services$1.geocoder.countryCode;
86715
86716                 // Show sidebar and disable the sidebar resizing button
86717                 // (this needs to be before `context.inIntro(true)`)
86718                 context.ui().sidebar.expand();
86719                 d3_selectAll('button.sidebar-toggle').classed('disabled', true);
86720
86721                 // Block saving
86722                 context.inIntro(true);
86723
86724                 // Load semi-real data used in intro
86725                 if (osm) { osm.toggle(false).reset(); }
86726                 context.history().reset();
86727                 context.history().merge(Object.values(coreGraph().load(introGraph).entities));
86728                 context.history().checkpoint('initial');
86729
86730                 // Setup imagery
86731                 var imagery = context.background().findSource(INTRO_IMAGERY);
86732                 if (imagery) {
86733                     context.background().baseLayerSource(imagery);
86734                 } else {
86735                     context.background().bing();
86736                 }
86737                 overlays.forEach(function(d) {
86738                     context.background().toggleOverlayLayer(d);
86739                 });
86740
86741                 // Setup data layers (only OSM)
86742                 var layers = context.layers();
86743                 layers.all().forEach(function(item) {
86744                     // if the layer has the function `enabled`
86745                     if (typeof item.layer.enabled === 'function') {
86746                         item.layer.enabled(item.id === 'osm');
86747                     }
86748                 });
86749
86750                 // Mock geocoder
86751                 services$1.geocoder.countryCode = function(location, callback) {
86752                     callback(null, t('intro.graph.countrycode'));
86753                 };
86754
86755
86756                 d3_selectAll('#map .layer-background').style('opacity', 1);
86757
86758                 var curtain = uiCurtain();
86759                 selection.call(curtain);
86760
86761                 // Store that the user started the walkthrough..
86762                 context.storage('walkthrough_started', 'yes');
86763
86764                 // Restore previous walkthrough progress..
86765                 var storedProgress = context.storage('walkthrough_progress') || '';
86766                 var progress = storedProgress.split(';').filter(Boolean);
86767
86768                 var chapters = chapterFlow.map(function(chapter, i) {
86769                     var s = chapterUi[chapter](context, curtain.reveal)
86770                         .on('done', function() {
86771                             context.presets().init();  // clear away "recent" presets
86772
86773                             buttons.filter(function(d) {
86774                                 return d.title === s.title;
86775                             }).classed('finished', true);
86776
86777                             if (i < chapterFlow.length - 1) {
86778                                 var next = chapterFlow[i + 1];
86779                                 d3_select('button.chapter-' + next)
86780                                     .classed('next', true);
86781                             }
86782
86783                             // Store walkthrough progress..
86784                             progress.push(chapter);
86785                             context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
86786                         });
86787                     return s;
86788                 });
86789
86790                 chapters[chapters.length - 1].on('startEditing', function() {
86791                     // Store walkthrough progress..
86792                     progress.push('startEditing');
86793                     context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
86794
86795                     // Store if walkthrough is completed..
86796                     var incomplete = utilArrayDifference(chapterFlow, progress);
86797                     if (!incomplete.length) {
86798                         context.storage('walkthrough_completed', 'yes');
86799                     }
86800
86801                     curtain.remove();
86802                     navwrap.remove();
86803                     d3_selectAll('#map .layer-background').style('opacity', opacity);
86804                     d3_selectAll('button.sidebar-toggle').classed('disabled', false);
86805                     if (osm) { osm.toggle(true).reset().caches(caches); }
86806                     context.history().reset().merge(Object.values(baseEntities));
86807                     context.background().baseLayerSource(background);
86808                     overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
86809                     if (history) { context.history().fromJSON(history, false); }
86810                     context.map().centerZoom(center, zoom);
86811                     window.location.replace(hash);
86812                     services$1.geocoder.countryCode = countryCode;
86813                     context.inIntro(false);
86814                 });
86815
86816                 var navwrap = selection
86817                     .append('div')
86818                     .attr('class', 'intro-nav-wrap fillD');
86819
86820                 navwrap
86821                     .append('svg')
86822                     .attr('class', 'intro-nav-wrap-logo')
86823                     .append('use')
86824                     .attr('xlink:href', '#iD-logo-walkthrough');
86825
86826                 var buttonwrap = navwrap
86827                     .append('div')
86828                     .attr('class', 'joined')
86829                     .selectAll('button.chapter');
86830
86831                 var buttons = buttonwrap
86832                     .data(chapters)
86833                     .enter()
86834                     .append('button')
86835                     .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
86836                     .on('click', enterChapter);
86837
86838                 buttons
86839                     .append('span')
86840                     .text(function(d) { return t(d.title); });
86841
86842                 buttons
86843                     .append('span')
86844                     .attr('class', 'status')
86845                     .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
86846
86847                 enterChapter(chapters[0]);
86848
86849
86850                 function enterChapter(newChapter) {
86851                     if (_currChapter) { _currChapter.exit(); }
86852                     context.enter(modeBrowse(context));
86853
86854                     _currChapter = newChapter;
86855                     _currChapter.enter();
86856
86857                     buttons
86858                         .classed('next', false)
86859                         .classed('active', function(d) {
86860                             return d.title === _currChapter.title;
86861                         });
86862                 }
86863             }
86864
86865
86866             return intro;
86867         }
86868
86869         function uiShortcuts(context) {
86870             var detected = utilDetect();
86871             var _activeTab = 0;
86872             var _modalSelection;
86873             var _selection = d3_select(null);
86874
86875
86876             context.keybinding()
86877                 .on([t('shortcuts.toggle.key'), '?'], function () {
86878                     if (d3_selectAll('.modal-shortcuts').size()) {  // already showing
86879                         if (_modalSelection) {
86880                             _modalSelection.close();
86881                             _modalSelection = null;
86882                         }
86883                     } else {
86884                         _modalSelection = uiModal(_selection);
86885                         shortcutsModal(_modalSelection);
86886                     }
86887                 });
86888
86889
86890             function shortcutsModal(_modalSelection) {
86891                 _modalSelection.select('.modal')
86892                     .classed('modal-shortcuts', true);
86893
86894                 var shortcutsModal = _modalSelection.select('.content');
86895
86896                 shortcutsModal
86897                     .append('div')
86898                     .attr('class', 'modal-section')
86899                     .append('h3')
86900                     .text(t('shortcuts.title'));
86901
86902                 shortcutsModal
86903                     .call(render);
86904             }
86905
86906
86907             function render(selection) {
86908                 var wrapper = selection
86909                     .selectAll('.wrapper')
86910                     .data([0]);
86911
86912                 var wrapperEnter = wrapper
86913                     .enter()
86914                     .append('div')
86915                     .attr('class', 'wrapper modal-section');
86916
86917                 var tabsBar = wrapperEnter
86918                     .append('div')
86919                     .attr('class', 'tabs-bar');
86920
86921                 var shortcutsList = wrapperEnter
86922                     .append('div')
86923                     .attr('class', 'shortcuts-list');
86924
86925                 wrapper = wrapper.merge(wrapperEnter);
86926
86927                 var tabs = tabsBar
86928                     .selectAll('.tab')
86929                     .data(dataShortcuts);
86930
86931                 var tabsEnter = tabs
86932                     .enter()
86933                     .append('div')
86934                     .attr('class', 'tab')
86935                     .on('click', function (d, i) {
86936                         _activeTab = i;
86937                         render(selection);
86938                     });
86939
86940                 tabsEnter
86941                     .append('span')
86942                     .text(function (d) { return t(d.text); });
86943
86944                 tabs = tabs
86945                     .merge(tabsEnter);
86946
86947                 // Update
86948                 wrapper.selectAll('.tab')
86949                     .classed('active', function (d, i) {
86950                         return i === _activeTab;
86951                     });
86952
86953
86954                 var shortcuts = shortcutsList
86955                     .selectAll('.shortcut-tab')
86956                     .data(dataShortcuts);
86957
86958                 var shortcutsEnter = shortcuts
86959                     .enter()
86960                     .append('div')
86961                     .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
86962
86963                 var columnsEnter = shortcutsEnter
86964                     .selectAll('.shortcut-column')
86965                     .data(function (d) { return d.columns; })
86966                     .enter()
86967                     .append('table')
86968                     .attr('class', 'shortcut-column');
86969
86970                 var rowsEnter = columnsEnter
86971                     .selectAll('.shortcut-row')
86972                     .data(function (d) { return d.rows; })
86973                     .enter()
86974                     .append('tr')
86975                     .attr('class', 'shortcut-row');
86976
86977
86978                 var sectionRows = rowsEnter
86979                     .filter(function (d) { return !d.shortcuts; });
86980
86981                 sectionRows
86982                     .append('td');
86983
86984                 sectionRows
86985                     .append('td')
86986                     .attr('class', 'shortcut-section')
86987                     .append('h3')
86988                     .text(function (d) { return t(d.text); });
86989
86990
86991                 var shortcutRows = rowsEnter
86992                     .filter(function (d) { return d.shortcuts; });
86993
86994                 var shortcutKeys = shortcutRows
86995                     .append('td')
86996                     .attr('class', 'shortcut-keys');
86997
86998                 var modifierKeys = shortcutKeys
86999                     .filter(function (d) { return d.modifiers; });
87000
87001                 modifierKeys
87002                     .selectAll('kbd.modifier')
87003                     .data(function (d) {
87004                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
87005                             return ['⌘'];
87006                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
87007                             return [];
87008                         } else {
87009                             return d.modifiers;
87010                         }
87011                     })
87012                     .enter()
87013                     .each(function () {
87014                         var selection = d3_select(this);
87015
87016                         selection
87017                             .append('kbd')
87018                             .attr('class', 'modifier')
87019                             .text(function (d) { return uiCmd.display(d); });
87020
87021                         selection
87022                             .append('span')
87023                             .text('+');
87024                     });
87025
87026
87027                 shortcutKeys
87028                     .selectAll('kbd.shortcut')
87029                     .data(function (d) {
87030                         var arr = d.shortcuts;
87031                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
87032                             arr = ['Y'];
87033                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
87034                             arr = ['F11'];
87035                         }
87036
87037                         // replace translations
87038                         arr = arr.map(function(s) {
87039                             return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
87040                         });
87041
87042                         return utilArrayUniq(arr).map(function(s) {
87043                             return {
87044                                 shortcut: s,
87045                                 separator: d.separator,
87046                                 suffix: d.suffix
87047                             };
87048                         });
87049                     })
87050                     .enter()
87051                     .each(function (d, i, nodes) {
87052                         var selection = d3_select(this);
87053                         var click = d.shortcut.toLowerCase().match(/(.*).click/);
87054
87055                         if (click && click[1]) {   // replace "left_click", "right_click" with mouse icon
87056                             selection
87057                                 .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
87058                         } else {
87059                             selection
87060                                 .append('kbd')
87061                                 .attr('class', 'shortcut')
87062                                 .text(function (d) { return d.shortcut; });
87063                         }
87064
87065                         if (i < nodes.length - 1) {
87066                             selection
87067                                 .append('span')
87068                                 .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
87069                         } else if (i === nodes.length - 1 && d.suffix) {
87070                             selection
87071                                 .append('span')
87072                                 .text(d.suffix);
87073                         }
87074                     });
87075
87076
87077                 shortcutKeys
87078                     .filter(function(d) { return d.gesture; })
87079                     .each(function () {
87080                         var selection = d3_select(this);
87081
87082                         selection
87083                             .append('span')
87084                             .text('+');
87085
87086                         selection
87087                             .append('span')
87088                             .attr('class', 'gesture')
87089                             .text(function (d) { return t(d.gesture); });
87090                     });
87091
87092
87093                 shortcutRows
87094                     .append('td')
87095                     .attr('class', 'shortcut-desc')
87096                     .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
87097
87098
87099                 shortcuts = shortcuts
87100                     .merge(shortcutsEnter);
87101
87102                 // Update
87103                 wrapper.selectAll('.shortcut-tab')
87104                     .style('display', function (d, i) {
87105                         return i === _activeTab ? 'flex' : 'none';
87106                     });
87107             }
87108
87109
87110             return function(selection, show) {
87111                 _selection = selection;
87112                 if (show) {
87113                     _modalSelection = uiModal(selection);
87114                     shortcutsModal(_modalSelection);
87115                 }
87116             };
87117         }
87118
87119         function uiHelp(context) {
87120             var key = t('help.key');
87121
87122             var _pane = d3_select(null), _toggleButton = d3_select(null);
87123
87124             var docKeys = [
87125                 ['help', [
87126                     'welcome',
87127                     'open_data_h',
87128                     'open_data',
87129                     'before_start_h',
87130                     'before_start',
87131                     'open_source_h',
87132                     'open_source',
87133                     'open_source_help'
87134                 ]],
87135                 ['overview', [
87136                     'navigation_h',
87137                     'navigation_drag',
87138                     'navigation_zoom',
87139                     'features_h',
87140                     'features',
87141                     'nodes_ways'
87142                 ]],
87143                 ['editing', [
87144                     'select_h',
87145                     'select_left_click',
87146                     'select_right_click',
87147                     'multiselect_h',
87148                     'multiselect_shift_click',
87149                     'multiselect_lasso',
87150                     'undo_redo_h',
87151                     'undo_redo',
87152                     'save_h',
87153                     'save',
87154                     'save_validation',
87155                     'upload_h',
87156                     'upload',
87157                     'backups_h',
87158                     'backups',
87159                     'keyboard_h',
87160                     'keyboard'
87161                 ]],
87162                 ['feature_editor', [
87163                     'intro',
87164                     'definitions',
87165                     'type_h',
87166                     'type',
87167                     'type_picker',
87168                     'fields_h',
87169                     'fields_all_fields',
87170                     'fields_example',
87171                     'fields_add_field',
87172                     'tags_h',
87173                     'tags_all_tags',
87174                     'tags_resources'
87175                 ]],
87176                 ['points', [
87177                     'intro',
87178                     'add_point_h',
87179                     'add_point',
87180                     'add_point_finish',
87181                     'move_point_h',
87182                     'move_point',
87183                     'delete_point_h',
87184                     'delete_point',
87185                     'delete_point_command'
87186                 ]],
87187                 ['lines', [
87188                     'intro',
87189                     'add_line_h',
87190                     'add_line',
87191                     'add_line_draw',
87192                     'add_line_finish',
87193                     'modify_line_h',
87194                     'modify_line_dragnode',
87195                     'modify_line_addnode',
87196                     'connect_line_h',
87197                     'connect_line',
87198                     'connect_line_display',
87199                     'connect_line_drag',
87200                     'connect_line_tag',
87201                     'disconnect_line_h',
87202                     'disconnect_line_command',
87203                     'move_line_h',
87204                     'move_line_command',
87205                     'move_line_connected',
87206                     'delete_line_h',
87207                     'delete_line',
87208                     'delete_line_command'
87209                 ]],
87210                 ['areas', [
87211                     'intro',
87212                     'point_or_area_h',
87213                     'point_or_area',
87214                     'add_area_h',
87215                     'add_area_command',
87216                     'add_area_draw',
87217                     'add_area_finish',
87218                     'square_area_h',
87219                     'square_area_command',
87220                     'modify_area_h',
87221                     'modify_area_dragnode',
87222                     'modify_area_addnode',
87223                     'delete_area_h',
87224                     'delete_area',
87225                     'delete_area_command'
87226                 ]],
87227                 ['relations', [
87228                     'intro',
87229                     'edit_relation_h',
87230                     'edit_relation',
87231                     'edit_relation_add',
87232                     'edit_relation_delete',
87233                     'maintain_relation_h',
87234                     'maintain_relation',
87235                     'relation_types_h',
87236                     'multipolygon_h',
87237                     'multipolygon',
87238                     'multipolygon_create',
87239                     'multipolygon_merge',
87240                     'turn_restriction_h',
87241                     'turn_restriction',
87242                     'turn_restriction_field',
87243                     'turn_restriction_editing',
87244                     'route_h',
87245                     'route',
87246                     'route_add',
87247                     'boundary_h',
87248                     'boundary',
87249                     'boundary_add'
87250                 ]],
87251                 ['notes', [
87252                     'intro',
87253                     'add_note_h',
87254                     'add_note',
87255                     'move_note',
87256                     'update_note_h',
87257                     'update_note',
87258                     'save_note_h',
87259                     'save_note'
87260                 ]],
87261
87262                 ['imagery', [
87263                     'intro',
87264                     'sources_h',
87265                     'choosing',
87266                     'sources',
87267                     'offsets_h',
87268                     'offset',
87269                     'offset_change'
87270                 ]],
87271                 ['streetlevel', [
87272                     'intro',
87273                     'using_h',
87274                     'using',
87275                     'photos',
87276                     'viewer'
87277                 ]],
87278                 ['gps', [
87279                     'intro',
87280                     'survey',
87281                     'using_h',
87282                     'using',
87283                     'tracing',
87284                     'upload'
87285                 ]],
87286                 ['qa', [
87287                     'intro',
87288                     'tools_h',
87289                     'tools',
87290                     'issues_h',
87291                     'issues'
87292                 ]]
87293             ];
87294
87295             var headings = {
87296                 'help.help.open_data_h': 3,
87297                 'help.help.before_start_h': 3,
87298                 'help.help.open_source_h': 3,
87299                 'help.overview.navigation_h': 3,
87300                 'help.overview.features_h': 3,
87301                 'help.editing.select_h': 3,
87302                 'help.editing.multiselect_h': 3,
87303                 'help.editing.undo_redo_h': 3,
87304                 'help.editing.save_h': 3,
87305                 'help.editing.upload_h': 3,
87306                 'help.editing.backups_h': 3,
87307                 'help.editing.keyboard_h': 3,
87308                 'help.feature_editor.type_h': 3,
87309                 'help.feature_editor.fields_h': 3,
87310                 'help.feature_editor.tags_h': 3,
87311                 'help.points.add_point_h': 3,
87312                 'help.points.move_point_h': 3,
87313                 'help.points.delete_point_h': 3,
87314                 'help.lines.add_line_h': 3,
87315                 'help.lines.modify_line_h': 3,
87316                 'help.lines.connect_line_h': 3,
87317                 'help.lines.disconnect_line_h': 3,
87318                 'help.lines.move_line_h': 3,
87319                 'help.lines.delete_line_h': 3,
87320                 'help.areas.point_or_area_h': 3,
87321                 'help.areas.add_area_h': 3,
87322                 'help.areas.square_area_h': 3,
87323                 'help.areas.modify_area_h': 3,
87324                 'help.areas.delete_area_h': 3,
87325                 'help.relations.edit_relation_h': 3,
87326                 'help.relations.maintain_relation_h': 3,
87327                 'help.relations.relation_types_h': 2,
87328                 'help.relations.multipolygon_h': 3,
87329                 'help.relations.turn_restriction_h': 3,
87330                 'help.relations.route_h': 3,
87331                 'help.relations.boundary_h': 3,
87332                 'help.notes.add_note_h': 3,
87333                 'help.notes.update_note_h': 3,
87334                 'help.notes.save_note_h': 3,
87335                 'help.imagery.sources_h': 3,
87336                 'help.imagery.offsets_h': 3,
87337                 'help.streetlevel.using_h': 3,
87338                 'help.gps.using_h': 3,
87339                 'help.qa.tools_h': 3,
87340                 'help.qa.issues_h': 3
87341             };
87342
87343             var replacements = {
87344                 point: icon('#iD-icon-point', 'pre-text'),
87345                 line: icon('#iD-icon-line', 'pre-text'),
87346                 area: icon('#iD-icon-area', 'pre-text'),
87347                 note: icon('#iD-icon-note', 'pre-text add-note'),
87348                 plus: icon('#iD-icon-plus', 'pre-text'),
87349                 minus: icon('#iD-icon-minus', 'pre-text'),
87350                 orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
87351                 disconnect: icon('#iD-operation-disconnect', 'pre-text'),
87352                 layers: icon('#iD-icon-layers', 'pre-text'),
87353                 data: icon('#iD-icon-data', 'pre-text'),
87354                 inspect: icon('#iD-icon-inspect', 'pre-text'),
87355                 move: icon('#iD-operation-move', 'pre-text'),
87356                 merge: icon('#iD-operation-merge', 'pre-text'),
87357                 delete: icon('#iD-operation-delete', 'pre-text'),
87358                 close: icon('#iD-icon-close', 'pre-text'),
87359                 undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
87360                 redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
87361                 save: icon('#iD-icon-save', 'pre-text'),
87362                 leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
87363                 rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
87364                 shift: uiCmd.display('⇧'),
87365                 alt: uiCmd.display('⌥'),
87366                 return: uiCmd.display('↵'),
87367                 version: context.version
87368             };
87369
87370             // For each section, squash all the texts into a single markdown document
87371             var docs = docKeys.map(function(key) {
87372                 var helpkey = 'help.' + key[0];
87373                 var text = key[1].reduce(function(all, part) {
87374                     var subkey = helpkey + '.' + part;
87375                     var depth = headings[subkey];                              // is this subkey a heading?
87376                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
87377                     return all + hhh + t(subkey, replacements) + '\n\n';
87378                 }, '');
87379
87380                 return {
87381                     title: t(helpkey + '.title'),
87382                     html: marked(text.trim())
87383                 };
87384             });
87385
87386             var paneTooltip = tooltip()
87387                 .placement((textDirection === 'rtl') ? 'right' : 'left')
87388                 .html(true)
87389                 .title(uiTooltipHtml(t('help.title'), key));
87390
87391             function hidePane() {
87392                 context.ui().togglePanes();
87393             }
87394
87395             uiHelp.togglePane = function() {
87396                 if (event) event.preventDefault();
87397                 paneTooltip.hide(_toggleButton);
87398                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
87399             };
87400
87401             uiHelp.renderToggleButton = function(selection) {
87402
87403                 _toggleButton = selection.append('button')
87404                     .on('click', uiHelp.togglePane)
87405                     .call(svgIcon('#iD-icon-help', 'light'))
87406                     .call(paneTooltip);
87407             };
87408
87409
87410             uiHelp.renderPane = function(selection) {
87411
87412                 function clickHelp(d, i) {
87413                     var rtl = (textDirection === 'rtl');
87414                     content.property('scrollTop', 0);
87415                     doctitle.html(d.title);
87416
87417                     body.html(d.html);
87418                     body.selectAll('a')
87419                         .attr('target', '_blank');
87420                     menuItems.classed('selected', function(m) {
87421                         return m.title === d.title;
87422                     });
87423
87424                     nav.html('');
87425                     if (rtl) {
87426                         nav.call(drawNext).call(drawPrevious);
87427                     } else {
87428                         nav.call(drawPrevious).call(drawNext);
87429                     }
87430
87431
87432                     function drawNext(selection) {
87433                         if (i < docs.length - 1) {
87434                             var nextLink = selection
87435                                 .append('a')
87436                                 .attr('class', 'next')
87437                                 .on('click', function() {
87438                                     clickHelp(docs[i + 1], i + 1);
87439                                 });
87440
87441                             nextLink
87442                                 .append('span')
87443                                 .text(docs[i + 1].title)
87444                                 .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
87445                         }
87446                     }
87447
87448
87449                     function drawPrevious(selection) {
87450                         if (i > 0) {
87451                             var prevLink = selection
87452                                 .append('a')
87453                                 .attr('class', 'previous')
87454                                 .on('click', function() {
87455                                     clickHelp(docs[i - 1], i - 1);
87456                                 });
87457
87458                             prevLink
87459                                 .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
87460                                 .append('span')
87461                                 .text(docs[i - 1].title);
87462                         }
87463                     }
87464                 }
87465
87466
87467                 function clickWalkthrough() {
87468                     if (context.inIntro()) return;
87469                     context.container().call(uiIntro(context));
87470                     context.ui().togglePanes();
87471                 }
87472
87473
87474                 function clickShortcuts() {
87475                     context.container().call(uiShortcuts(context), true);
87476                 }
87477
87478
87479                 _pane = selection.append('div')
87480                     .attr('class', 'help-wrap map-pane fillL hide')
87481                     .attr('pane', 'help');
87482
87483                 var heading = _pane
87484                     .append('div')
87485                     .attr('class', 'pane-heading');
87486
87487                 var doctitle = heading
87488                     .append('h2')
87489                     .text(t('help.title'));
87490
87491                 heading
87492                     .append('button')
87493                     .on('click', hidePane)
87494                     .call(svgIcon('#iD-icon-close'));
87495
87496
87497                 var content = _pane
87498                     .append('div')
87499                     .attr('class', 'pane-content');
87500
87501                 var toc = content
87502                     .append('ul')
87503                     .attr('class', 'toc');
87504
87505                 var menuItems = toc.selectAll('li')
87506                     .data(docs)
87507                     .enter()
87508                     .append('li')
87509                     .append('a')
87510                     .html(function(d) { return d.title; })
87511                     .on('click', clickHelp);
87512
87513                 var shortcuts = toc
87514                     .append('li')
87515                     .attr('class', 'shortcuts')
87516                     .call(tooltip()
87517                         .html(true)
87518                         .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
87519                         .placement('top')
87520                     )
87521                     .append('a')
87522                     .on('click', clickShortcuts);
87523
87524                 shortcuts
87525                     .append('div')
87526                     .text(t('shortcuts.title'));
87527
87528                 var walkthrough = toc
87529                     .append('li')
87530                     .attr('class', 'walkthrough')
87531                     .append('a')
87532                     .on('click', clickWalkthrough);
87533
87534                 walkthrough
87535                     .append('svg')
87536                     .attr('class', 'logo logo-walkthrough')
87537                     .append('use')
87538                     .attr('xlink:href', '#iD-logo-walkthrough');
87539
87540                 walkthrough
87541                     .append('div')
87542                     .text(t('splash.walkthrough'));
87543
87544
87545                 var helpContent = content
87546                     .append('div')
87547                     .attr('class', 'left-content');
87548
87549                 var body = helpContent
87550                     .append('div')
87551                     .attr('class', 'body');
87552
87553                 var nav = helpContent
87554                     .append('div')
87555                     .attr('class', 'nav');
87556
87557                 clickHelp(docs[0], 0);
87558
87559                 context.keybinding()
87560                     .on(key, uiHelp.togglePane);
87561
87562             };
87563
87564             return uiHelp;
87565         }
87566
87567         function uiPanelBackground(context) {
87568             var background = context.background();
87569             var currSourceName = null;
87570             var metadata = {};
87571             var metadataKeys = [
87572                 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
87573             ];
87574
87575             var debouncedRedraw = debounce(redraw, 250);
87576
87577             function redraw(selection) {
87578                 var source = background.baseLayerSource();
87579                 var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
87580
87581                 if (currSourceName !== source.name()) {
87582                     currSourceName = source.name();
87583                     metadata = {};
87584                 }
87585
87586                 selection.html('');
87587
87588                 var list = selection
87589                     .append('ul')
87590                     .attr('class', 'background-info');
87591
87592                 list
87593                     .append('li')
87594                     .text(currSourceName);
87595
87596                 metadataKeys.forEach(function(k) {
87597                     // DigitalGlobe vintage is available in raster layers for now.
87598                     if (isDG && k === 'vintage') return;
87599
87600                     list
87601                         .append('li')
87602                         .attr('class', 'background-info-list-' + k)
87603                         .classed('hide', !metadata[k])
87604                         .text(t('info_panels.background.' + k) + ':')
87605                         .append('span')
87606                         .attr('class', 'background-info-span-' + k)
87607                         .text(metadata[k]);
87608                 });
87609
87610                 debouncedGetMetadata(selection);
87611
87612                 var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
87613
87614                 selection
87615                     .append('a')
87616                     .text(t('info_panels.background.' + toggleTiles))
87617                     .attr('href', '#')
87618                     .attr('class', 'button button-toggle-tiles')
87619                     .on('click', function() {
87620                         event.preventDefault();
87621                         context.setDebug('tile', !context.getDebug('tile'));
87622                         selection.call(redraw);
87623                     });
87624
87625                 if (isDG) {
87626                     var key = source.id + '-vintage';
87627                     var sourceVintage = context.background().findSource(key);
87628                     var showsVintage = context.background().showsLayer(sourceVintage);
87629                     var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
87630                     selection
87631                         .append('a')
87632                         .text(t('info_panels.background.' + toggleVintage))
87633                         .attr('href', '#')
87634                         .attr('class', 'button button-toggle-vintage')
87635                         .on('click', function() {
87636                             event.preventDefault();
87637                             context.background().toggleOverlayLayer(sourceVintage);
87638                             selection.call(redraw);
87639                         });
87640                 }
87641
87642                 // disable if necessary
87643                 ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
87644                     if (source.id !== layerId) {
87645                         var key = layerId + '-vintage';
87646                         var sourceVintage = context.background().findSource(key);
87647                         if (context.background().showsLayer(sourceVintage)) {
87648                             context.background().toggleOverlayLayer(sourceVintage);
87649                         }
87650                     }
87651                 });
87652             }
87653
87654
87655             var debouncedGetMetadata = debounce(getMetadata, 250);
87656
87657             function getMetadata(selection) {
87658                 var tile = d3_select('.layer-background img.tile-center');   // tile near viewport center
87659                 if (tile.empty()) return;
87660
87661                 var sourceName = currSourceName;
87662                 var d = tile.datum();
87663                 var zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom());
87664                 var center = context.map().center();
87665
87666                 // update zoom
87667                 metadata.zoom = String(zoom);
87668                 selection.selectAll('.background-info-list-zoom')
87669                     .classed('hide', false)
87670                     .selectAll('.background-info-span-zoom')
87671                     .text(metadata.zoom);
87672
87673                 if (!d || !d.length >= 3) return;
87674
87675                 background.baseLayerSource().getMetadata(center, d, function(err, result) {
87676                     if (err || currSourceName !== sourceName) return;
87677
87678                     // update vintage
87679                     var vintage = result.vintage;
87680                     metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
87681                     selection.selectAll('.background-info-list-vintage')
87682                         .classed('hide', false)
87683                         .selectAll('.background-info-span-vintage')
87684                         .text(metadata.vintage);
87685
87686                     // update other metdata
87687                     metadataKeys.forEach(function(k) {
87688                         if (k === 'zoom' || k === 'vintage') return;  // done already
87689                         var val = result[k];
87690                         metadata[k] = val;
87691                         selection.selectAll('.background-info-list-' + k)
87692                             .classed('hide', !val)
87693                             .selectAll('.background-info-span-' + k)
87694                             .text(val);
87695                     });
87696                 });
87697             }
87698
87699
87700             var panel = function(selection) {
87701                 selection.call(redraw);
87702
87703                 context.map()
87704                     .on('drawn.info-background', function() {
87705                         selection.call(debouncedRedraw);
87706                     })
87707                     .on('move.info-background', function() {
87708                         selection.call(debouncedGetMetadata);
87709                     });
87710
87711             };
87712
87713             panel.off = function() {
87714                 context.map()
87715                     .on('drawn.info-background', null)
87716                     .on('move.info-background', null);
87717             };
87718
87719             panel.id = 'background';
87720             panel.title = t('info_panels.background.title');
87721             panel.key = t('info_panels.background.key');
87722
87723
87724             return panel;
87725         }
87726
87727         function uiPanelHistory(context) {
87728             var osm;
87729
87730             function displayTimestamp(timestamp) {
87731                 if (!timestamp) return t('info_panels.history.unknown');
87732                 var detected = utilDetect();
87733                 var options = {
87734                     day: 'numeric', month: 'short', year: 'numeric',
87735                     hour: 'numeric', minute: 'numeric', second: 'numeric'
87736                 };
87737                 var d = new Date(timestamp);
87738                 if (isNaN(d.getTime())) return t('info_panels.history.unknown');
87739                 return d.toLocaleString(detected.locale, options);
87740             }
87741
87742
87743             function displayUser(selection, userName) {
87744                 if (!userName) {
87745                     selection
87746                         .append('span')
87747                         .text(t('info_panels.history.unknown'));
87748                     return;
87749                 }
87750
87751                 selection
87752                     .append('span')
87753                     .attr('class', 'user-name')
87754                     .text(userName);
87755
87756                 var links = selection
87757                     .append('div')
87758                     .attr('class', 'links');
87759
87760                 if (osm) {
87761                     links
87762                         .append('a')
87763                         .attr('class', 'user-osm-link')
87764                         .attr('href', osm.userURL(userName))
87765                         .attr('target', '_blank')
87766                         .attr('tabindex', -1)
87767                         .text('OSM');
87768                 }
87769
87770                 links
87771                     .append('a')
87772                     .attr('class', 'user-hdyc-link')
87773                     .attr('href', 'https://hdyc.neis-one.org/?' + userName)
87774                     .attr('target', '_blank')
87775                     .attr('tabindex', -1)
87776                     .text('HDYC');
87777             }
87778
87779
87780             function displayChangeset(selection, changeset) {
87781                 if (!changeset) {
87782                     selection
87783                         .append('span')
87784                         .text(t('info_panels.history.unknown'));
87785                     return;
87786                 }
87787
87788                 selection
87789                     .append('span')
87790                     .attr('class', 'changeset-id')
87791                     .text(changeset);
87792
87793                 var links = selection
87794                     .append('div')
87795                     .attr('class', 'links');
87796
87797                 if (osm) {
87798                     links
87799                         .append('a')
87800                         .attr('class', 'changeset-osm-link')
87801                         .attr('href', osm.changesetURL(changeset))
87802                         .attr('target', '_blank')
87803                         .attr('tabindex', -1)
87804                         .text('OSM');
87805                 }
87806
87807                 links
87808                     .append('a')
87809                     .attr('class', 'changeset-osmcha-link')
87810                     .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
87811                     .attr('target', '_blank')
87812                     .attr('tabindex', -1)
87813                     .text('OSMCha');
87814             }
87815
87816
87817             function redraw(selection) {
87818                 var selectedNoteID = context.selectedNoteID();
87819                 osm = context.connection();
87820
87821                 var selected, note, entity;
87822                 if (selectedNoteID && osm) {       // selected 1 note
87823                     selected = [ t('note.note') + ' ' + selectedNoteID ];
87824                     note = osm.getNote(selectedNoteID);
87825                 } else {                           // selected 1..n entities
87826                     selected = context.selectedIDs()
87827                         .filter(function(e) { return context.hasEntity(e); });
87828                     if (selected.length) {
87829                         entity = context.entity(selected[0]);
87830                     }
87831                 }
87832
87833                 var singular = selected.length === 1 ? selected[0] : null;
87834
87835                 selection.html('');
87836
87837                 selection
87838                     .append('h4')
87839                     .attr('class', 'history-heading')
87840                     .text(singular || t('info_panels.history.selected', { n: selected.length }));
87841
87842                 if (!singular) return;
87843
87844                 if (entity) {
87845                     selection.call(redrawEntity, entity);
87846                 } else if (note) {
87847                     selection.call(redrawNote, note);
87848                 }
87849             }
87850
87851
87852             function redrawNote(selection, note) {
87853                 if (!note || note.isNew()) {
87854                     selection
87855                         .append('div')
87856                         .text(t('info_panels.history.note_no_history'));
87857                     return;
87858                 }
87859
87860                 var list = selection
87861                     .append('ul');
87862
87863                 list
87864                     .append('li')
87865                     .text(t('info_panels.history.note_comments') + ':')
87866                     .append('span')
87867                     .text(note.comments.length);
87868
87869                 if (note.comments.length) {
87870                     list
87871                         .append('li')
87872                         .text(t('info_panels.history.note_created_date') + ':')
87873                         .append('span')
87874                         .text(displayTimestamp(note.comments[0].date));
87875
87876                     list
87877                         .append('li')
87878                         .text(t('info_panels.history.note_created_user') + ':')
87879                         .call(displayUser, note.comments[0].user);
87880                 }
87881
87882                 if (osm) {
87883                     selection
87884                         .append('a')
87885                         .attr('class', 'view-history-on-osm')
87886                         .attr('target', '_blank')
87887                         .attr('tabindex', -1)
87888                         .attr('href', osm.noteURL(note))
87889                         .call(svgIcon('#iD-icon-out-link', 'inline'))
87890                         .append('span')
87891                         .text(t('info_panels.history.note_link_text'));
87892                 }
87893             }
87894
87895
87896             function redrawEntity(selection, entity) {
87897                 if (!entity || entity.isNew()) {
87898                     selection
87899                         .append('div')
87900                         .text(t('info_panels.history.no_history'));
87901                     return;
87902                 }
87903
87904                 var links = selection
87905                     .append('div')
87906                     .attr('class', 'links');
87907
87908                 if (osm) {
87909                     links
87910                         .append('a')
87911                         .attr('class', 'view-history-on-osm')
87912                         .attr('href', osm.historyURL(entity))
87913                         .attr('target', '_blank')
87914                         .attr('tabindex', -1)
87915                         .attr('title', t('info_panels.history.link_text'))
87916                         .text('OSM');
87917                 }
87918                 links
87919                     .append('a')
87920                     .attr('class', 'pewu-history-viewer-link')
87921                     .attr('href', 'https://pewu.github.io/osm-history/#/' + entity.type + '/' + entity.osmId())
87922                     .attr('target', '_blank')
87923                     .attr('tabindex', -1)
87924                     .text('PeWu');
87925
87926                 var list = selection
87927                     .append('ul');
87928
87929                 list
87930                     .append('li')
87931                     .text(t('info_panels.history.version') + ':')
87932                     .append('span')
87933                     .text(entity.version);
87934
87935                 list
87936                     .append('li')
87937                     .text(t('info_panels.history.last_edit') + ':')
87938                     .append('span')
87939                     .text(displayTimestamp(entity.timestamp));
87940
87941                 list
87942                     .append('li')
87943                     .text(t('info_panels.history.edited_by') + ':')
87944                     .call(displayUser, entity.user);
87945
87946                 list
87947                     .append('li')
87948                     .text(t('info_panels.history.changeset') + ':')
87949                     .call(displayChangeset, entity.changeset);
87950             }
87951
87952
87953             var panel = function(selection) {
87954                 selection.call(redraw);
87955
87956                 context.map()
87957                     .on('drawn.info-history', function() {
87958                         selection.call(redraw);
87959                     });
87960
87961                 context
87962                     .on('enter.info-history', function() {
87963                         selection.call(redraw);
87964                     });
87965             };
87966
87967             panel.off = function() {
87968                 context.map().on('drawn.info-history', null);
87969                 context.on('enter.info-history', null);
87970             };
87971
87972             panel.id = 'history';
87973             panel.title = t('info_panels.history.title');
87974             panel.key = t('info_panels.history.key');
87975
87976
87977             return panel;
87978         }
87979
87980         var OSM_PRECISION = 7;
87981         var locale$2 = utilDetect().locale;
87982
87983         /**
87984          * Returns a localized representation of the given length measurement.
87985          *
87986          * @param {Number} m area in meters
87987          * @param {Boolean} isImperial true for U.S. customary units; false for metric
87988          */
87989         function displayLength(m, isImperial) {
87990             var d = m * (isImperial ? 3.28084 : 1);
87991             var unit;
87992
87993             if (isImperial) {
87994                 if (d >= 5280) {
87995                     d /= 5280;
87996                     unit = 'miles';
87997                 } else {
87998                     unit = 'feet';
87999                 }
88000             } else {
88001                 if (d >= 1000) {
88002                     d /= 1000;
88003                     unit = 'kilometers';
88004                 } else {
88005                     unit = 'meters';
88006                 }
88007             }
88008
88009             return t('units.' + unit, {
88010                 quantity: d.toLocaleString(locale$2, {
88011                     maximumSignificantDigits: 4
88012                 })
88013             });
88014         }
88015
88016         /**
88017          * Returns a localized representation of the given area measurement.
88018          *
88019          * @param {Number} m2 area in square meters
88020          * @param {Boolean} isImperial true for U.S. customary units; false for metric
88021          */
88022         function displayArea(m2, isImperial) {
88023             var d = m2 * (isImperial ? 10.7639111056 : 1);
88024             var d1, d2, area;
88025             var unit1 = '';
88026             var unit2 = '';
88027
88028             if (isImperial) {
88029                 if (d >= 6969600) { // > 0.25mi² show mi²
88030                     d1 = d / 27878400;
88031                     unit1 = 'square_miles';
88032                 } else {
88033                     d1 = d;
88034                     unit1 = 'square_feet';
88035                 }
88036
88037                 if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
88038                     d2 = d / 43560;
88039                     unit2 = 'acres';
88040                 }
88041
88042             } else {
88043                 if (d >= 250000) { // > 0.25km² show km²
88044                     d1 = d / 1000000;
88045                     unit1 = 'square_kilometers';
88046                 } else {
88047                     d1 = d;
88048                     unit1 = 'square_meters';
88049                 }
88050
88051                 if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
88052                     d2 = d / 10000;
88053                     unit2 = 'hectares';
88054                 }
88055             }
88056
88057             area = t('units.' + unit1, {
88058                 quantity: d1.toLocaleString(locale$2, {
88059                     maximumSignificantDigits: 4
88060                 })
88061             });
88062
88063             if (d2) {
88064                 return t('units.area_pair', {
88065                     area1: area,
88066                     area2: t('units.' + unit2, {
88067                         quantity: d2.toLocaleString(locale$2, {
88068                             maximumSignificantDigits: 2
88069                         })
88070                     })
88071                 });
88072             } else {
88073                 return area;
88074             }
88075         }
88076
88077         function wrap(x, min, max) {
88078             var d = max - min;
88079             return ((x - min) % d + d) % d + min;
88080         }
88081
88082         function clamp$1(x, min, max) {
88083             return Math.max(min, Math.min(x, max));
88084         }
88085
88086         function displayCoordinate(deg, pos, neg) {
88087             var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
88088             var sec = (min - Math.floor(min)) * 60;
88089             var displayDegrees = t('units.arcdegrees', {
88090                 quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
88091             });
88092             var displayCoordinate;
88093
88094             if (Math.floor(sec) > 0) {
88095                 displayCoordinate = displayDegrees +
88096                     t('units.arcminutes', {
88097                         quantity: Math.floor(min).toLocaleString(locale$2)
88098                     }) +
88099                     t('units.arcseconds', {
88100                         quantity: Math.round(sec).toLocaleString(locale$2)
88101                     });
88102             } else if (Math.floor(min) > 0) {
88103                 displayCoordinate = displayDegrees +
88104                     t('units.arcminutes', {
88105                         quantity: Math.round(min).toLocaleString(locale$2)
88106                     });
88107             } else {
88108                 displayCoordinate = t('units.arcdegrees', {
88109                     quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
88110                 });
88111             }
88112
88113             if (deg === 0) {
88114                 return displayCoordinate;
88115             } else {
88116                 return t('units.coordinate', {
88117                     coordinate: displayCoordinate,
88118                     direction: t('units.' + (deg > 0 ? pos : neg))
88119                 });
88120             }
88121         }
88122
88123         /**
88124          * Returns given coordinate pair in degree-minute-second format.
88125          *
88126          * @param {Array<Number>} coord longitude and latitude
88127          */
88128         function dmsCoordinatePair(coord) {
88129             return t('units.coordinate_pair', {
88130                 latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
88131                 longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
88132             });
88133         }
88134
88135         /**
88136          * Returns the given coordinate pair in decimal format.
88137          * note: unlocalized to avoid comma ambiguity - see #4765
88138          *
88139          * @param {Array<Number>} coord longitude and latitude
88140          */
88141         function decimalCoordinatePair(coord) {
88142             return t('units.coordinate_pair', {
88143                 latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
88144                 longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
88145             });
88146         }
88147
88148         function uiPanelLocation(context) {
88149             var currLocation = '';
88150
88151
88152             function redraw(selection) {
88153                 selection.html('');
88154
88155                 var list = selection
88156                     .append('ul');
88157
88158                 // Mouse coordinates
88159                 var coord = context.map().mouseCoordinates();
88160                 if (coord.some(isNaN)) {
88161                     coord = context.map().center();
88162                 }
88163
88164                 list
88165                     .append('li')
88166                     .text(dmsCoordinatePair(coord))
88167                     .append('li')
88168                     .text(decimalCoordinatePair(coord));
88169
88170                 // Location Info
88171                 selection
88172                     .append('div')
88173                     .attr('class', 'location-info')
88174                     .text(currLocation || ' ');
88175
88176                 debouncedGetLocation(selection, coord);
88177             }
88178
88179
88180             var debouncedGetLocation = debounce(getLocation, 250);
88181             function getLocation(selection, coord) {
88182                 if (!services$1.geocoder) {
88183                     currLocation = t('info_panels.location.unknown_location');
88184                     selection.selectAll('.location-info')
88185                         .text(currLocation);
88186                 } else {
88187                     services$1.geocoder.reverse(coord, function(err, result) {
88188                         currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
88189                         selection.selectAll('.location-info')
88190                             .text(currLocation);
88191                     });
88192                 }
88193             }
88194
88195
88196             var panel = function(selection) {
88197                 selection.call(redraw);
88198
88199                 context.surface()
88200                     .on('mousemove.info-location', function() {
88201                         selection.call(redraw);
88202                     });
88203             };
88204
88205             panel.off = function() {
88206                 context.surface()
88207                     .on('mousemove.info-location', null);
88208             };
88209
88210             panel.id = 'location';
88211             panel.title = t('info_panels.location.title');
88212             panel.key = t('info_panels.location.key');
88213
88214
88215             return panel;
88216         }
88217
88218         function uiPanelMeasurement(context) {
88219             var locale = utilDetect().locale;
88220             var isImperial = (locale.toLowerCase() === 'en-us');
88221
88222
88223             function radiansToMeters(r) {
88224                 // using WGS84 authalic radius (6371007.1809 m)
88225                 return r * 6371007.1809;
88226             }
88227
88228             function steradiansToSqmeters(r) {
88229                 // http://gis.stackexchange.com/a/124857/40446
88230                 return r / (4 * Math.PI) * 510065621724000;
88231             }
88232
88233
88234             function toLineString(feature) {
88235                 if (feature.type === 'LineString') return feature;
88236
88237                 var result = { type: 'LineString', coordinates: [] };
88238                 if (feature.type === 'Polygon') {
88239                     result.coordinates = feature.coordinates[0];
88240                 } else if (feature.type === 'MultiPolygon') {
88241                     result.coordinates = feature.coordinates[0][0];
88242                 }
88243
88244                 return result;
88245             }
88246
88247
88248             function nodeCount(feature) {
88249               if (feature.type === 'LineString') return feature.coordinates.length;
88250               if (feature.type === 'Polygon') return feature.coordinates[0].length - 1;
88251             }
88252
88253
88254             function redraw(selection) {
88255                 var resolver = context.graph();
88256                 var selectedNoteID = context.selectedNoteID();
88257                 var osm = services$1.osm;
88258
88259                 var selected, center, entity, note, geometry;
88260
88261                 if (selectedNoteID && osm) {       // selected 1 note
88262                     selected = [ t('note.note') + ' ' + selectedNoteID ];
88263                     note = osm.getNote(selectedNoteID);
88264                     center = note.loc;
88265                     geometry = 'note';
88266
88267                 } else {                           // selected 1..n entities
88268                     var extent = geoExtent();
88269                     selected = context.selectedIDs()
88270                         .filter(function(e) { return context.hasEntity(e); });
88271                     if (selected.length) {
88272                         for (var i = 0; i < selected.length; i++) {
88273                             entity = context.entity(selected[i]);
88274                             extent._extend(entity.extent(resolver));
88275                         }
88276                         center = extent.center();
88277                         geometry = entity.geometry(resolver);
88278                     }
88279                 }
88280
88281                 var singular = selected.length === 1 ? selected[0] : null;
88282
88283                 selection.html('');
88284
88285                 selection
88286                     .append('h4')
88287                     .attr('class', 'measurement-heading')
88288                     .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
88289
88290                 if (!selected.length) return;
88291
88292
88293                 var list = selection
88294                     .append('ul');
88295                 var coordItem;
88296
88297                 // multiple selected features, just display extent center..
88298                 if (!singular) {
88299                     coordItem = list
88300                         .append('li')
88301                         .text(t('info_panels.measurement.center') + ':');
88302                     coordItem.append('span')
88303                         .text(dmsCoordinatePair(center));
88304                     coordItem.append('span')
88305                         .text(decimalCoordinatePair(center));
88306                     return;
88307                 }
88308
88309                 // single selected feature, display details..
88310                 if (geometry === 'line' || geometry === 'area') {
88311                     var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
88312                     var feature = entity.asGeoJSON(resolver);
88313                     var length = radiansToMeters(d3_geoLength(toLineString(feature)));
88314                     var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
88315                     var centroid = d3_geoCentroid(feature);
88316
88317                     list
88318                         .append('li')
88319                         .text(t('info_panels.measurement.geometry') + ':')
88320                         .append('span')
88321                         .text(
88322                             closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
88323                         );
88324
88325                     if (entity.type !== 'relation') {
88326                         list
88327                             .append('li')
88328                             .text(t('info_panels.measurement.node_count') + ':')
88329                             .append('span')
88330                             .text(nodeCount(feature).toLocaleString(locale));
88331                     }
88332
88333                     if (closed) {
88334                         var area = steradiansToSqmeters(entity.area(resolver));
88335                         list
88336                             .append('li')
88337                             .text(t('info_panels.measurement.area') + ':')
88338                             .append('span')
88339                             .text(displayArea(area, isImperial));
88340                     }
88341
88342
88343                     list
88344                         .append('li')
88345                         .text(lengthLabel + ':')
88346                         .append('span')
88347                         .text(displayLength(length, isImperial));
88348
88349                     coordItem = list
88350                         .append('li')
88351                         .text(t('info_panels.measurement.centroid') + ':');
88352                     coordItem.append('span')
88353                         .text(dmsCoordinatePair(centroid));
88354                     coordItem.append('span')
88355                         .text(decimalCoordinatePair(centroid));
88356
88357                     var toggle  = isImperial ? 'imperial' : 'metric';
88358
88359                     selection
88360                         .append('a')
88361                         .text(t('info_panels.measurement.' + toggle))
88362                         .attr('href', '#')
88363                         .attr('class', 'button button-toggle-units')
88364                         .on('click', function() {
88365                             event.preventDefault();
88366                             isImperial = !isImperial;
88367                             selection.call(redraw);
88368                         });
88369
88370                 } else {
88371                     var centerLabel = t('info_panels.measurement.' +
88372                         (note || entity.type === 'node' ? 'location' : 'center'));
88373
88374                     list
88375                         .append('li')
88376                         .text(t('info_panels.measurement.geometry') + ':')
88377                         .append('span')
88378                         .text(t('geometry.' + geometry));
88379
88380                     coordItem = list
88381                         .append('li')
88382                         .text(centerLabel + ':');
88383                     coordItem.append('span')
88384                         .text(dmsCoordinatePair(center));
88385                     coordItem.append('span')
88386                         .text(decimalCoordinatePair(center));
88387                 }
88388             }
88389
88390
88391             var panel = function(selection) {
88392                 selection.call(redraw);
88393
88394                 context.map()
88395                     .on('drawn.info-measurement', function() {
88396                         selection.call(redraw);
88397                     });
88398
88399                 context
88400                     .on('enter.info-measurement', function() {
88401                         selection.call(redraw);
88402                     });
88403             };
88404
88405             panel.off = function() {
88406                 context.map().on('drawn.info-measurement', null);
88407                 context.on('enter.info-measurement', null);
88408             };
88409
88410             panel.id = 'measurement';
88411             panel.title = t('info_panels.measurement.title');
88412             panel.key = t('info_panels.measurement.key');
88413
88414
88415             return panel;
88416         }
88417
88418         var uiInfoPanels = {
88419             background: uiPanelBackground,
88420             history: uiPanelHistory,
88421             location: uiPanelLocation,
88422             measurement: uiPanelMeasurement,
88423         };
88424
88425         function uiInfo(context) {
88426             var ids = Object.keys(uiInfoPanels);
88427             var wasActive = ['measurement'];
88428             var panels = {};
88429             var active = {};
88430
88431             // create panels
88432             ids.forEach(function(k) {
88433                 if (!panels[k]) {
88434                     panels[k] = uiInfoPanels[k](context);
88435                     active[k] = false;
88436                 }
88437             });
88438
88439
88440             function info(selection) {
88441
88442                 function redraw() {
88443                     var activeids = ids.filter(function(k) { return active[k]; }).sort();
88444
88445                     var containers = infoPanels.selectAll('.panel-container')
88446                         .data(activeids, function(k) { return k; });
88447
88448                     containers.exit()
88449                         .style('opacity', 1)
88450                         .transition()
88451                         .duration(200)
88452                         .style('opacity', 0)
88453                         .on('end', function(d) {
88454                             d3_select(this)
88455                                 .call(panels[d].off)
88456                                 .remove();
88457                         });
88458
88459                     var enter = containers.enter()
88460                         .append('div')
88461                         .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
88462
88463                     enter
88464                         .style('opacity', 0)
88465                         .transition()
88466                         .duration(200)
88467                         .style('opacity', 1);
88468
88469                     var title = enter
88470                         .append('div')
88471                         .attr('class', 'panel-title fillD2');
88472
88473                     title
88474                         .append('h3')
88475                         .text(function(d) { return panels[d].title; });
88476
88477                     title
88478                         .append('button')
88479                         .attr('class', 'close')
88480                         .on('click', function (d) { toggle(d); })
88481                         .call(svgIcon('#iD-icon-close'));
88482
88483                     enter
88484                         .append('div')
88485                         .attr('class', function(d) { return 'panel-content panel-content-' + d; });
88486
88487
88488                     // redraw the panels
88489                     infoPanels.selectAll('.panel-content')
88490                         .each(function(d) {
88491                             d3_select(this).call(panels[d]);
88492                         });
88493                 }
88494
88495
88496                 function toggle(which) {
88497                     if (event) {
88498                         event.stopImmediatePropagation();
88499                         event.preventDefault();
88500                     }
88501
88502                     var activeids = ids.filter(function(k) { return active[k]; });
88503
88504                     if (which) {  // toggle one
88505                         active[which] = !active[which];
88506                         if (activeids.length === 1 && activeids[0] === which) {  // none active anymore
88507                             wasActive = [which];
88508                         }
88509                     } else {      // toggle all
88510                         if (activeids.length) {
88511                             wasActive = activeids;
88512                             activeids.forEach(function(k) { active[k] = false; });
88513                         } else {
88514                             wasActive.forEach(function(k) { active[k] = true; });
88515                         }
88516                     }
88517
88518                     redraw();
88519                 }
88520
88521
88522                 var infoPanels = selection.selectAll('.info-panels')
88523                     .data([0]);
88524
88525                 infoPanels = infoPanels.enter()
88526                     .append('div')
88527                     .attr('class', 'info-panels')
88528                     .merge(infoPanels);
88529
88530                 redraw();
88531
88532                 context.keybinding()
88533                     .on(uiCmd('⌘' + t('info_panels.key')), toggle);
88534
88535                 ids.forEach(function(k) {
88536                     var key = t('info_panels.' + k + '.key', { default: null });
88537                     if (!key) return;
88538                     context.keybinding()
88539                         .on(uiCmd('⌘⇧' + key), function() { toggle(k); });
88540                 });
88541             }
88542
88543             return info;
88544         }
88545
88546         function uiIssues(context) {
88547             var key = t('issues.key');
88548
88549             var MINSQUARE = 0;
88550             var MAXSQUARE = 20;
88551             var DEFAULTSQUARE = 5;  // see also unsquare_way.js
88552
88553             var _errorsSelection = d3_select(null);
88554             var _warningsSelection = d3_select(null);
88555             var _rulesList = d3_select(null);
88556             var _pane = d3_select(null);
88557             var _toggleButton = d3_select(null);
88558
88559             var _errors = [];
88560             var _warnings = [];
88561             var _options = {
88562                 what: context.storage('validate-what') || 'edited',    // 'all', 'edited'
88563                 where: context.storage('validate-where') || 'all'  // 'all', 'visible'
88564             };
88565
88566             // listeners
88567             context.validator().on('validated.uiIssues',
88568                 function() { window.requestIdleCallback(update); }
88569             );
88570             context.map().on('move.uiIssues',
88571                 debounce(function() { window.requestIdleCallback(update); }, 1000)
88572             );
88573
88574
88575             function addNotificationBadge(selection) {
88576                 var d = 10;
88577                 selection.selectAll('svg.notification-badge')
88578                     .data([0])
88579                     .enter()
88580                     .append('svg')
88581                     .attr('viewbox', '0 0 ' + d + ' ' + d)
88582                     .attr('class', 'notification-badge hide')
88583                     .append('circle')
88584                     .attr('cx', d / 2)
88585                     .attr('cy', d / 2)
88586                     .attr('r', (d / 2) - 1)
88587                     .attr('fill', 'currentColor');
88588             }
88589
88590
88591             function renderErrorsList(selection) {
88592                 _errorsSelection = selection
88593                     .call(drawIssuesList, 'errors', _errors);
88594             }
88595
88596
88597             function renderWarningsList(selection) {
88598                 _warningsSelection = selection
88599                     .call(drawIssuesList, 'warnings', _warnings);
88600             }
88601
88602
88603             function drawIssuesList(selection, which, issues) {
88604                 var list = selection.selectAll('.issues-list')
88605                     .data([0]);
88606
88607                 list = list.enter()
88608                     .append('ul')
88609                     .attr('class', 'layer-list issues-list ' + which + '-list')
88610                     .merge(list);
88611
88612
88613                 var items = list.selectAll('li')
88614                     .data(issues, function(d) { return d.id; });
88615
88616                 // Exit
88617                 items.exit()
88618                     .remove();
88619
88620                 // Enter
88621                 var itemsEnter = items.enter()
88622                     .append('li')
88623                     .attr('class', function (d) { return 'issue severity-' + d.severity; })
88624                     .on('click', function(d) {
88625                         context.validator().focusIssue(d);
88626                     })
88627                     .on('mouseover', function(d) {
88628                         utilHighlightEntities(d.entityIds, true, context);
88629                     })
88630                     .on('mouseout', function(d) {
88631                         utilHighlightEntities(d.entityIds, false, context);
88632                     });
88633
88634
88635                 var labelsEnter = itemsEnter
88636                     .append('div')
88637                     .attr('class', 'issue-label');
88638
88639                 var textEnter = labelsEnter
88640                     .append('span')
88641                     .attr('class', 'issue-text');
88642
88643                 textEnter
88644                     .append('span')
88645                     .attr('class', 'issue-icon')
88646                     .each(function(d) {
88647                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
88648                         d3_select(this)
88649                             .call(svgIcon(iconName));
88650                     });
88651
88652                 textEnter
88653                     .append('span')
88654                     .attr('class', 'issue-message');
88655
88656                 /*
88657                 labelsEnter
88658                     .append('span')
88659                     .attr('class', 'issue-autofix')
88660                     .each(function(d) {
88661                         if (!d.autoFix) return;
88662
88663                         d3_select(this)
88664                             .append('button')
88665                             .attr('title', t('issues.fix_one.title'))
88666                             .datum(d.autoFix)  // set button datum to the autofix
88667                             .attr('class', 'autofix action')
88668                             .on('click', function(d) {
88669                                 d3_event.preventDefault();
88670                                 d3_event.stopPropagation();
88671
88672                                 var issuesEntityIDs = d.issue.entityIds;
88673                                 utilHighlightEntities(issuesEntityIDs.concat(d.entityIds), false, context);
88674
88675                                 context.perform.apply(context, d.autoArgs);
88676                                 context.validator().validate();
88677                             })
88678                             .call(svgIcon('#iD-icon-wrench'));
88679                     });
88680                 */
88681
88682                 // Update
88683                 items = items
88684                     .merge(itemsEnter)
88685                     .order();
88686
88687                 items.selectAll('.issue-message')
88688                     .text(function(d) {
88689                         return d.message(context);
88690                     });
88691
88692                 /*
88693                 // autofix
88694                 var canAutoFix = issues.filter(function(issue) { return issue.autoFix; });
88695
88696                 var autoFixAll = selection.selectAll('.autofix-all')
88697                     .data(canAutoFix.length ? [0] : []);
88698
88699                 // exit
88700                 autoFixAll.exit()
88701                     .remove();
88702
88703                 // enter
88704                 var autoFixAllEnter = autoFixAll.enter()
88705                     .insert('div', '.issues-list')
88706                     .attr('class', 'autofix-all');
88707
88708                 var linkEnter = autoFixAllEnter
88709                     .append('a')
88710                     .attr('class', 'autofix-all-link')
88711                     .attr('href', '#');
88712
88713                 linkEnter
88714                     .append('span')
88715                     .attr('class', 'autofix-all-link-text')
88716                     .text(t('issues.fix_all.title'));
88717
88718                 linkEnter
88719                     .append('span')
88720                     .attr('class', 'autofix-all-link-icon')
88721                     .call(svgIcon('#iD-icon-wrench'));
88722
88723                 if (which === 'warnings') {
88724                     renderIgnoredIssuesReset(selection);
88725                 }
88726
88727                 // update
88728                 autoFixAll = autoFixAll
88729                     .merge(autoFixAllEnter);
88730
88731                 autoFixAll.selectAll('.autofix-all-link')
88732                     .on('click', function() {
88733                         context.pauseChangeDispatch();
88734                         context.perform(actionNoop());
88735                         canAutoFix.forEach(function(issue) {
88736                             var args = issue.autoFix.autoArgs.slice();  // copy
88737                             if (typeof args[args.length - 1] !== 'function') {
88738                                 args.pop();
88739                             }
88740                             args.push(t('issues.fix_all.annotation'));
88741                             context.replace.apply(context, args);
88742                         });
88743                         context.resumeChangeDispatch();
88744                         context.validator().validate();
88745                     });
88746                 */
88747             }
88748
88749
88750             function updateOptionValue(d, val) {
88751                 if (!val && event && event.target) {
88752                     val = event.target.value;
88753                 }
88754
88755                 _options[d] = val;
88756                 context.storage('validate-' + d, val);
88757                 update();
88758             }
88759
88760
88761             function renderIssuesOptions(selection) {
88762                 var container = selection.selectAll('.issues-options-container')
88763                     .data([0]);
88764
88765                 container = container.enter()
88766                     .append('div')
88767                     .attr('class', 'issues-options-container')
88768                     .merge(container);
88769
88770                 var data = [
88771                     { key: 'what', values: ['edited', 'all'] },
88772                     { key: 'where', values: ['visible', 'all'] }
88773                 ];
88774
88775                 var options = container.selectAll('.issues-option')
88776                     .data(data, function(d) { return d.key; });
88777
88778                 var optionsEnter = options.enter()
88779                     .append('div')
88780                     .attr('class', function(d) { return 'issues-option issues-option-' + d.key; });
88781
88782                 optionsEnter
88783                     .append('div')
88784                     .attr('class', 'issues-option-title')
88785                     .text(function(d) { return t('issues.options.' + d.key + '.title'); });
88786
88787                 var valuesEnter = optionsEnter.selectAll('label')
88788                     .data(function(d) {
88789                         return d.values.map(function(val) { return { value: val, key: d.key }; });
88790                     })
88791                     .enter()
88792                     .append('label');
88793
88794                 valuesEnter
88795                     .append('input')
88796                     .attr('type', 'radio')
88797                     .attr('name', function(d) { return 'issues-option-' + d.key; })
88798                     .attr('value', function(d) { return d.value; })
88799                     .property('checked', function(d) { return _options[d.key] === d.value; })
88800                     .on('change', function(d) { updateOptionValue(d.key, d.value); });
88801
88802                 valuesEnter
88803                     .append('span')
88804                     .text(function(d) { return t('issues.options.' + d.key + '.' + d.value); });
88805             }
88806
88807
88808             function renderNoIssuesBox(selection) {
88809
88810                 var box = selection.append('div')
88811                     .attr('class', 'box');
88812
88813                 box
88814                     .append('div')
88815                     .call(svgIcon('#iD-icon-apply', 'pre-text'));
88816
88817                 var noIssuesMessage = box
88818                     .append('span');
88819
88820                 noIssuesMessage
88821                     .append('strong')
88822                     .attr('class', 'message');
88823
88824                 noIssuesMessage
88825                     .append('br');
88826
88827                 noIssuesMessage
88828                     .append('span')
88829                     .attr('class', 'details');
88830             }
88831
88832             function renderIgnoredIssuesReset(selection) {
88833
88834                 var ignoredIssues = context.validator()
88835                     .getIssues(Object.assign({ includeIgnored: 'only' }, _options));
88836
88837                 var resetIgnored = selection.selectAll('.reset-ignored')
88838                     .data(ignoredIssues.length ? [0] : []);
88839
88840                 // exit
88841                 resetIgnored.exit()
88842                     .remove();
88843
88844                 // enter
88845                 var resetIgnoredEnter = resetIgnored.enter()
88846                     .append('div')
88847                     .attr('class', 'reset-ignored section-footer');
88848
88849                 resetIgnoredEnter
88850                     .append('a')
88851                     .attr('href', '#');
88852
88853                 // update
88854                 resetIgnored = resetIgnored
88855                     .merge(resetIgnoredEnter);
88856
88857                 resetIgnored.select('a')
88858                     .text(t('issues.reset_ignored', { count: ignoredIssues.length.toString() }));
88859
88860                 resetIgnored.on('click', function() {
88861                         context.validator().resetIgnoredIssues();
88862                     });
88863             }
88864
88865
88866             function renderRulesList(selection) {
88867                 var container = selection.selectAll('.issues-rulelist-container')
88868                     .data([0]);
88869
88870                 var containerEnter = container.enter()
88871                     .append('div')
88872                     .attr('class', 'issues-rulelist-container');
88873
88874                 containerEnter
88875                     .append('ul')
88876                     .attr('class', 'layer-list issue-rules-list');
88877
88878                 var ruleLinks = containerEnter
88879                     .append('div')
88880                     .attr('class', 'issue-rules-links section-footer');
88881
88882                 ruleLinks
88883                     .append('a')
88884                     .attr('class', 'issue-rules-link')
88885                     .attr('href', '#')
88886                     .text(t('issues.enable_all'))
88887                     .on('click', function() {
88888                         context.validator().disableRules([]);
88889                     });
88890
88891                 ruleLinks
88892                     .append('a')
88893                     .attr('class', 'issue-rules-link')
88894                     .attr('href', '#')
88895                     .text(t('issues.disable_all'))
88896                     .on('click', function() {
88897                         var keys = context.validator().getRuleKeys();
88898                         context.validator().disableRules(keys);
88899                     });
88900
88901
88902                 // Update
88903                 container = container
88904                     .merge(containerEnter);
88905
88906                 _rulesList = container.selectAll('.issue-rules-list');
88907
88908                 updateRulesList();
88909             }
88910
88911
88912             function updateRulesList() {
88913                 var ruleKeys = context.validator().getRuleKeys();
88914                 _rulesList
88915                     .call(drawListItems, ruleKeys, 'checkbox', 'rule', toggleRule, isRuleEnabled);
88916             }
88917
88918
88919             function isRuleEnabled(d) {
88920                 return context.validator().isRuleEnabled(d);
88921             }
88922
88923
88924             function toggleRule(d) {
88925                 context.validator().toggleRule(d);
88926             }
88927
88928             function setNoIssuesText() {
88929
88930                 function checkForHiddenIssues(cases) {
88931                     for (var type in cases) {
88932                         var opts = cases[type];
88933                         var hiddenIssues = context.validator().getIssues(opts);
88934                         if (hiddenIssues.length) {
88935                             _pane.select('.issues-none .details')
88936                                 .text(t(
88937                                     'issues.no_issues.hidden_issues.' + type,
88938                                     { count: hiddenIssues.length.toString() }
88939                                 ));
88940                             return;
88941                         }
88942                     }
88943                     _pane.select('.issues-none .details')
88944                         .text(t('issues.no_issues.hidden_issues.none'));
88945                 }
88946
88947                 var messageType;
88948
88949                 if (_options.what === 'edited' && _options.where === 'visible') {
88950
88951                     messageType = 'edits_in_view';
88952
88953                     checkForHiddenIssues({
88954                         elsewhere: { what: 'edited', where: 'all' },
88955                         other_features: { what: 'all', where: 'visible' },
88956                         disabled_rules: { what: 'edited', where: 'visible', includeDisabledRules: 'only' },
88957                         other_features_elsewhere: { what: 'all', where: 'all' },
88958                         disabled_rules_elsewhere: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
88959                         ignored_issues: { what: 'edited', where: 'visible', includeIgnored: 'only' },
88960                         ignored_issues_elsewhere: { what: 'edited', where: 'all', includeIgnored: 'only' }
88961                     });
88962
88963                 } else if (_options.what === 'edited' && _options.where === 'all') {
88964
88965                     messageType = 'edits';
88966
88967                     checkForHiddenIssues({
88968                         other_features: { what: 'all', where: 'all' },
88969                         disabled_rules: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
88970                         ignored_issues: { what: 'edited', where: 'all', includeIgnored: 'only' }
88971                     });
88972
88973                 } else if (_options.what === 'all' && _options.where === 'visible') {
88974
88975                     messageType = 'everything_in_view';
88976
88977                     checkForHiddenIssues({
88978                         elsewhere: { what: 'all', where: 'all' },
88979                         disabled_rules: { what: 'all', where: 'visible', includeDisabledRules: 'only' },
88980                         disabled_rules_elsewhere: { what: 'all', where: 'all', includeDisabledRules: 'only' },
88981                         ignored_issues: { what: 'all', where: 'visible', includeIgnored: 'only' },
88982                         ignored_issues_elsewhere: { what: 'all', where: 'all', includeIgnored: 'only' }
88983                     });
88984                 } else if (_options.what === 'all' && _options.where === 'all') {
88985
88986                     messageType = 'everything';
88987
88988                     checkForHiddenIssues({
88989                         disabled_rules: { what: 'all', where: 'all', includeDisabledRules: 'only' },
88990                         ignored_issues: { what: 'all', where: 'all', includeIgnored: 'only' }
88991                     });
88992                 }
88993
88994                 _pane.select('.issues-none .message')
88995                     .text(t('issues.no_issues.message.' + messageType));
88996
88997             }
88998
88999
89000             function update() {
89001                 var issuesBySeverity = context.validator().getIssuesBySeverity(_options);
89002
89003                 // sort issues by distance away from the center of the map
89004                 var center = context.map().center();
89005                 var graph = context.graph();
89006                 _errors = issuesBySeverity.error.map(withDistance).sort(byDistance);
89007                 _warnings = issuesBySeverity.warning.map(withDistance).sort(byDistance);
89008
89009                 // cut off at 1000
89010                 var errorCount = _errors.length > 1000 ? '1000+' : String(_errors.length);
89011                 var warningCount = _warnings.length > 1000 ? '1000+' : String(_warnings.length);
89012                 _errors = _errors.slice(0, 1000);
89013                 _warnings = _warnings.slice(0, 1000);
89014
89015
89016                 _toggleButton.selectAll('.notification-badge')
89017                     .classed('error', (_errors.length > 0))
89018                     .classed('warning', (_errors.length === 0 && _warnings.length > 0))
89019                     .classed('hide', (_errors.length === 0 && _warnings.length === 0));
89020
89021
89022                 _pane.selectAll('.issues-errors')
89023                     .classed('hide', _errors.length === 0);
89024
89025                 if (_errors.length > 0) {
89026                     _pane.selectAll('.hide-toggle-issues_errors .hide-toggle-text')
89027                         .text(t('issues.errors.list_title', { count: errorCount }));
89028                     if (!_pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
89029                         _errorsSelection
89030                             .call(drawIssuesList, 'errors', _errors);
89031                     }
89032                 }
89033
89034                 _pane.selectAll('.issues-warnings')
89035                     .classed('hide', _warnings.length === 0);
89036
89037                 if (_warnings.length > 0) {
89038                     _pane.selectAll('.hide-toggle-issues_warnings .hide-toggle-text')
89039                         .text(t('issues.warnings.list_title', { count: warningCount }));
89040                     if (!_pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
89041                         _warningsSelection
89042                             .call(drawIssuesList, 'warnings', _warnings);
89043                     }
89044                 }
89045
89046                 var hasIssues = _warnings.length > 0 || _errors.length > 0;
89047
89048                 var issuesNone = _pane.select('.issues-none');
89049                 issuesNone.classed('hide', hasIssues);
89050                 if (!hasIssues) {
89051                     renderIgnoredIssuesReset(issuesNone);
89052                     setNoIssuesText();
89053                 }
89054
89055                 if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {
89056                     updateRulesList();
89057                 }
89058
89059
89060                 function byDistance(a, b) {
89061                     return a.dist - b.dist;
89062                 }
89063
89064                 function withDistance(issue) {
89065                     var extent = issue.extent(graph);
89066                     var dist = extent ? geoSphericalDistance(center, extent.center()) : 0;
89067                     return Object.assign(issue, { dist: dist });
89068                 }
89069             }
89070
89071
89072             function drawListItems(selection, data, type, name, change, active) {
89073                 var items = selection.selectAll('li')
89074                     .data(data);
89075
89076                 // Exit
89077                 items.exit()
89078                     .remove();
89079
89080                 // Enter
89081                 var enter = items.enter()
89082                     .append('li');
89083
89084                 if (name === 'rule') {
89085                     enter
89086                         .call(tooltip()
89087                             .title(function(d) { return t('issues.' + d + '.tip'); })
89088                             .placement('top')
89089                         );
89090                 }
89091
89092                 var label = enter
89093                     .append('label');
89094
89095                 label
89096                     .append('input')
89097                     .attr('type', type)
89098                     .attr('name', name)
89099                     .on('change', change);
89100
89101                 label
89102                     .append('span')
89103                     .html(function(d) {
89104                         var params = {};
89105                         if (d === 'unsquare_way') {
89106                             params.val = '<span class="square-degrees"></span>';
89107                         }
89108                         return t('issues.' + d + '.title', params);
89109                     });
89110
89111                 // Update
89112                 items = items
89113                     .merge(enter);
89114
89115                 items
89116                     .classed('active', active)
89117                     .selectAll('input')
89118                     .property('checked', active)
89119                     .property('indeterminate', false);
89120
89121
89122                 // user-configurable square threshold
89123                 var degStr = context.storage('validate-square-degrees');
89124                 if (degStr === null) {
89125                     degStr = '' + DEFAULTSQUARE;
89126                 }
89127
89128                 var span = items.selectAll('.square-degrees');
89129                 var input = span.selectAll('.square-degrees-input')
89130                     .data([0]);
89131
89132                 // enter / update
89133                 input.enter()
89134                     .append('input')
89135                     .attr('type', 'number')
89136                     .attr('min', '' + MINSQUARE)
89137                     .attr('max', '' + MAXSQUARE)
89138                     .attr('step', '0.5')
89139                     .attr('class', 'square-degrees-input')
89140                     .call(utilNoAuto)
89141                     .on('input', function() {
89142                         this.style.width = (this.value.length + 2.5) + 'ch';   // resize
89143                     })
89144                     .on('click', function () {
89145                         event.preventDefault();
89146                         event.stopPropagation();
89147                         this.select();
89148                     })
89149                     .on('keyup', function () {
89150                         if (event.keyCode === 13) { // enter
89151                             this.blur();
89152                             this.select();
89153                         }
89154                     })
89155                     .on('blur', changeSquare)
89156                     .merge(input)
89157                     .property('value', degStr)
89158                     .style('width', (degStr.length + 2.5) + 'ch');   // resize
89159             }
89160
89161
89162             function changeSquare() {
89163                 var input = d3_select(this);
89164                 var degStr = utilGetSetValue(input).trim();
89165                 var degNum = parseFloat(degStr, 10);
89166
89167                 if (!isFinite(degNum)) {
89168                     degNum = DEFAULTSQUARE;
89169                 } else if (degNum > MAXSQUARE) {
89170                     degNum = MAXSQUARE;
89171                 } else if (degNum < MINSQUARE) {
89172                     degNum = MINSQUARE;
89173                 }
89174
89175                 degNum = Math.round(degNum * 10 ) / 10;   // round to 1 decimal
89176                 degStr = '' + degNum;
89177
89178                 input
89179                     .property('value', degStr)
89180                     .style('width', (degStr.length + 2.5) + 'ch');   // resize
89181
89182                 context.storage('validate-square-degrees', degStr);
89183                 context.validator().changeSquareThreshold(degNum);
89184             }
89185
89186
89187             function hidePane() {
89188                 context.ui().togglePanes();
89189             }
89190
89191
89192
89193             var paneTooltip = tooltip()
89194                 .placement((textDirection === 'rtl') ? 'right' : 'left')
89195                 .html(true)
89196                 .title(uiTooltipHtml(t('issues.title'), key));
89197
89198
89199
89200             uiIssues.togglePane = function() {
89201                 if (event) event.preventDefault();
89202                 paneTooltip.hide(_toggleButton);
89203                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
89204             };
89205
89206
89207             uiIssues.renderToggleButton = function(selection) {
89208                 _toggleButton = selection
89209                     .append('button')
89210                     .on('click', uiIssues.togglePane)
89211                     .call(svgIcon('#iD-icon-alert', 'light'))
89212                     .call(addNotificationBadge)
89213                     .call(paneTooltip);
89214             };
89215
89216
89217             uiIssues.renderPane = function(selection) {
89218                 _pane = selection
89219                     .append('div')
89220                     .attr('class', 'fillL map-pane issues-pane hide')
89221                     .attr('pane', 'map-issues');
89222
89223                 var heading = _pane
89224                     .append('div')
89225                     .attr('class', 'pane-heading');
89226
89227                 heading
89228                     .append('h2')
89229                     .text(t('issues.title'));
89230
89231                 heading
89232                     .append('button')
89233                     .on('click', hidePane)
89234                     .call(svgIcon('#iD-icon-close'));
89235
89236                 var content = _pane
89237                     .append('div')
89238                     .attr('class', 'pane-content');
89239
89240                 content
89241                     .append('div')
89242                     .attr('class', 'issues-options')
89243                     .call(renderIssuesOptions);
89244
89245                 content
89246                     .append('div')
89247                     .attr('class', 'issues-none')
89248                     .call(renderNoIssuesBox);
89249
89250                 // errors
89251                 content
89252                     .append('div')
89253                     .attr('class', 'issues-errors')
89254                     .call(uiDisclosure(context, 'issues_errors', true)
89255                         .content(renderErrorsList)
89256                     );
89257
89258                 // warnings
89259                 content
89260                     .append('div')
89261                     .attr('class', 'issues-warnings')
89262                     .call(uiDisclosure(context, 'issues_warnings', true)
89263                         .content(renderWarningsList)
89264                     );
89265
89266                 // rules
89267                 content
89268                     .append('div')
89269                     .attr('class', 'issues-rules')
89270                     .call(uiDisclosure(context, 'issues_rules', false)
89271                         .title(t('issues.rules.title'))
89272                         .content(renderRulesList)
89273                     );
89274
89275                 // update();
89276
89277                 context.keybinding()
89278                     .on(key, uiIssues.togglePane);
89279             };
89280
89281             return uiIssues;
89282         }
89283
89284         function uiSettingsCustomData(context) {
89285             var dispatch$1 = dispatch('change');
89286
89287             function render(selection) {
89288                 var dataLayer = context.layers().layer('data');
89289
89290                 // keep separate copies of original and current settings
89291                 var _origSettings = {
89292                     fileList: (dataLayer && dataLayer.fileList()) || null,
89293                     url: context.storage('settings-custom-data-url')
89294                 };
89295                 var _currSettings = {
89296                     fileList: (dataLayer && dataLayer.fileList()) || null,
89297                     url: context.storage('settings-custom-data-url')
89298                 };
89299
89300                 // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
89301                 var modal = uiConfirm(selection).okButton();
89302
89303                 modal
89304                     .classed('settings-modal settings-custom-data', true);
89305
89306                 modal.select('.modal-section.header')
89307                     .append('h3')
89308                     .text(t('settings.custom_data.header'));
89309
89310
89311                 var textSection = modal.select('.modal-section.message-text');
89312
89313                 textSection
89314                     .append('pre')
89315                     .attr('class', 'instructions-file')
89316                     .text(t('settings.custom_data.file.instructions'));
89317
89318                 textSection
89319                     .append('input')
89320                     .attr('class', 'field-file')
89321                     .attr('type', 'file')
89322                     .property('files', _currSettings.fileList)  // works for all except IE11
89323                     .on('change', function() {
89324                         var files = event.target.files;
89325                         if (files && files.length) {
89326                             _currSettings.url = '';
89327                             textSection.select('.field-url').property('value', '');
89328                             _currSettings.fileList = files;
89329                         } else {
89330                             _currSettings.fileList = null;
89331                         }
89332                     });
89333
89334                 textSection
89335                     .append('h4')
89336                     .text(t('settings.custom_data.or'));
89337
89338                 textSection
89339                     .append('pre')
89340                     .attr('class', 'instructions-url')
89341                     .text(t('settings.custom_data.url.instructions'));
89342
89343                 textSection
89344                     .append('textarea')
89345                     .attr('class', 'field-url')
89346                     .attr('placeholder', t('settings.custom_data.url.placeholder'))
89347                     .call(utilNoAuto)
89348                     .property('value', _currSettings.url);
89349
89350
89351                 // insert a cancel button
89352                 var buttonSection = modal.select('.modal-section.buttons');
89353
89354                 buttonSection
89355                     .insert('button', '.ok-button')
89356                     .attr('class', 'button cancel-button secondary-action')
89357                     .text(t('confirm.cancel'));
89358
89359
89360                 buttonSection.select('.cancel-button')
89361                     .on('click.cancel', clickCancel);
89362
89363                 buttonSection.select('.ok-button')
89364                     .attr('disabled', isSaveDisabled)
89365                     .on('click.save', clickSave);
89366
89367
89368                 function isSaveDisabled() {
89369                     return null;
89370                 }
89371
89372
89373                 // restore the original url
89374                 function clickCancel() {
89375                     textSection.select('.field-url').property('value', _origSettings.url);
89376                     context.storage('settings-custom-data-url', _origSettings.url);
89377                     this.blur();
89378                     modal.close();
89379                 }
89380
89381                 // accept the current url
89382                 function clickSave() {
89383                     _currSettings.url = textSection.select('.field-url').property('value').trim();
89384
89385                     // one or the other but not both
89386                     if (_currSettings.url) { _currSettings.fileList = null; }
89387                     if (_currSettings.fileList) { _currSettings.url = ''; }
89388
89389                     context.storage('settings-custom-data-url', _currSettings.url);
89390                     this.blur();
89391                     modal.close();
89392                     dispatch$1.call('change', this, _currSettings);
89393                 }
89394             }
89395
89396             return utilRebind(render, dispatch$1, 'on');
89397         }
89398
89399         function uiMapData(context) {
89400             var key = t('map_data.key');
89401             var osmDataToggleKey = uiCmd('⌥' + t('area_fill.wireframe.key'));
89402             var features = context.features().keys();
89403             var layers = context.layers();
89404             var fills = ['wireframe', 'partial', 'full'];
89405
89406             var settingsCustomData = uiSettingsCustomData(context)
89407                 .on('change', customChanged);
89408
89409             var _pane = d3_select(null), _toggleButton = d3_select(null);
89410
89411             var _fillSelected = context.storage('area-fill') || 'partial';
89412             var _dataLayerContainer = d3_select(null);
89413             var _photoOverlayContainer = d3_select(null);
89414             var _fillList = d3_select(null);
89415             var _featureList = d3_select(null);
89416             var _QAList = d3_select(null);
89417
89418
89419             function showsFeature(d) {
89420                 return context.features().enabled(d);
89421             }
89422
89423
89424             function autoHiddenFeature(d) {
89425                 if (d.type === 'kr_error') return context.errors().autoHidden(d);
89426                 return context.features().autoHidden(d);
89427             }
89428
89429
89430             function clickFeature(d) {
89431                 context.features().toggle(d);
89432                 update();
89433             }
89434
89435
89436             function showsQA(d) {
89437                 var QAKeys = [d];
89438                 var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
89439                 var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
89440
89441                 function layerSupported(d) {
89442                     return d.layer && d.layer.supported();
89443                 }
89444                 function layerEnabled(d) {
89445                     return layerSupported(d) && d.layer.enabled();
89446                 }
89447
89448                 return layerEnabled(data[0]);
89449             }
89450
89451
89452             function showsFill(d) {
89453                 return _fillSelected === d;
89454             }
89455
89456
89457             function setFill(d) {
89458                 fills.forEach(function(opt) {
89459                     context.surface().classed('fill-' + opt, Boolean(opt === d));
89460                 });
89461
89462                 _fillSelected = d;
89463                 context.storage('area-fill', d);
89464                 if (d !== 'wireframe') {
89465                     context.storage('area-fill-toggle', d);
89466                 }
89467                 update();
89468             }
89469
89470
89471             function showsLayer(which) {
89472                 var layer = layers.layer(which);
89473                 if (layer) {
89474                     return layer.enabled();
89475                 }
89476                 return false;
89477             }
89478
89479
89480             function setLayer(which, enabled) {
89481                 // Don't allow layer changes while drawing - #6584
89482                 var mode = context.mode();
89483                 if (mode && /^draw/.test(mode.id)) return;
89484
89485                 var layer = layers.layer(which);
89486                 if (layer) {
89487                     layer.enabled(enabled);
89488
89489                     if (!enabled && (which === 'osm' || which === 'notes')) {
89490                         context.enter(modeBrowse(context));
89491                     }
89492
89493                     update();
89494                 }
89495             }
89496
89497
89498             function toggleLayer(which) {
89499                 setLayer(which, !showsLayer(which));
89500             }
89501
89502
89503             function drawPhotoItems(selection) {
89504                 var photoKeys = context.photos().overlayLayerIDs();
89505                 var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
89506                 var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
89507
89508                 function layerSupported(d) {
89509                     return d.layer && d.layer.supported();
89510                 }
89511                 function layerEnabled(d) {
89512                     return layerSupported(d) && d.layer.enabled();
89513                 }
89514
89515                 var ul = selection
89516                     .selectAll('.layer-list-photos')
89517                     .data([0]);
89518
89519                 ul = ul.enter()
89520                     .append('ul')
89521                     .attr('class', 'layer-list layer-list-photos')
89522                     .merge(ul);
89523
89524                 var li = ul.selectAll('.list-item-photos')
89525                     .data(data);
89526
89527                 li.exit()
89528                     .remove();
89529
89530                 var liEnter = li.enter()
89531                     .append('li')
89532                     .attr('class', function(d) {
89533                         var classes = 'list-item-photos list-item-' + d.id;
89534                         if (d.id === 'mapillary-signs') {
89535                             classes += ' indented';
89536                         }
89537                         return classes;
89538                     });
89539
89540                 var labelEnter = liEnter
89541                     .append('label')
89542                     .each(function(d) {
89543                         var titleID;
89544                         if (d.id === 'mapillary-signs') titleID = 'mapillary.signs.tooltip';
89545                         else if (d.id === 'mapillary') titleID = 'mapillary_images.tooltip';
89546                         else if (d.id === 'openstreetcam') titleID = 'openstreetcam_images.tooltip';
89547                         else titleID = d.id.replace('-', '_') + '.tooltip';
89548                         d3_select(this)
89549                             .call(tooltip()
89550                                 .title(t(titleID))
89551                                 .placement('top')
89552                             );
89553                     });
89554
89555                 labelEnter
89556                     .append('input')
89557                     .attr('type', 'checkbox')
89558                     .on('change', function(d) { toggleLayer(d.id); });
89559
89560                 labelEnter
89561                     .append('span')
89562                     .text(function(d) {
89563                         var id = d.id;
89564                         if (id === 'mapillary-signs') id = 'photo_overlays.traffic_signs';
89565                         return t(id.replace('-', '_') + '.title');
89566                     });
89567
89568
89569                 // Update
89570                 li
89571                     .merge(liEnter)
89572                     .classed('active', layerEnabled)
89573                     .selectAll('input')
89574                     .property('checked', layerEnabled);
89575             }
89576
89577             function drawPhotoTypeItems(selection) {
89578                 var data = context.photos().allPhotoTypes();
89579
89580                 function typeEnabled(d) {
89581                     return context.photos().showsPhotoType(d);
89582                 }
89583
89584                 var ul = selection
89585                     .selectAll('.layer-list-photo-types')
89586                     .data(context.photos().shouldFilterByPhotoType() ? [0] : []);
89587
89588                 ul.exit()
89589                     .remove();
89590
89591                 ul = ul.enter()
89592                     .append('ul')
89593                     .attr('class', 'layer-list layer-list-photo-types')
89594                     .merge(ul);
89595
89596                 var li = ul.selectAll('.list-item-photo-types')
89597                     .data(data);
89598
89599                 li.exit()
89600                     .remove();
89601
89602                 var liEnter = li.enter()
89603                     .append('li')
89604                     .attr('class', function(d) {
89605                         return 'list-item-photo-types list-item-' + d;
89606                     });
89607
89608                 var labelEnter = liEnter
89609                     .append('label')
89610                     .each(function(d) {
89611                         d3_select(this)
89612                             .call(tooltip()
89613                                 .title(t('photo_overlays.photo_type.' + d + '.tooltip'))
89614                                 .placement('top')
89615                             );
89616                     });
89617
89618                 labelEnter
89619                     .append('input')
89620                     .attr('type', 'checkbox')
89621                     .on('change', function(d) {
89622                         context.photos().togglePhotoType(d);
89623                         update();
89624                     });
89625
89626                 labelEnter
89627                     .append('span')
89628                     .text(function(d) {
89629                         return t('photo_overlays.photo_type.' + d + '.title');
89630                     });
89631
89632
89633                 // Update
89634                 li
89635                     .merge(liEnter)
89636                     .classed('active', typeEnabled)
89637                     .selectAll('input')
89638                     .property('checked', typeEnabled);
89639             }
89640
89641
89642             function drawOsmItems(selection) {
89643                 var osmKeys = ['osm', 'notes'];
89644                 var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
89645
89646                 var ul = selection
89647                     .selectAll('.layer-list-osm')
89648                     .data([0]);
89649
89650                 ul = ul.enter()
89651                     .append('ul')
89652                     .attr('class', 'layer-list layer-list-osm')
89653                     .merge(ul);
89654
89655                 var li = ul.selectAll('.list-item')
89656                     .data(osmLayers);
89657
89658                 li.exit()
89659                     .remove();
89660
89661                 var liEnter = li.enter()
89662                     .append('li')
89663                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
89664
89665                 var labelEnter = liEnter
89666                     .append('label')
89667                     .each(function(d) {
89668                         if (d.id === 'osm') {
89669                             d3_select(this)
89670                                 .call(tooltip()
89671                                     .html(true)
89672                                     .title(uiTooltipHtml(t('map_data.layers.' + d.id + '.tooltip'), osmDataToggleKey))
89673                                     .placement('bottom')
89674                                 );
89675                         } else {
89676                             d3_select(this)
89677                                 .call(tooltip()
89678                                     .title(t('map_data.layers.' + d.id + '.tooltip'))
89679                                     .placement('bottom')
89680                                 );
89681                         }
89682                     });
89683
89684                 labelEnter
89685                     .append('input')
89686                     .attr('type', 'checkbox')
89687                     .on('change', function(d) { toggleLayer(d.id); });
89688
89689                 labelEnter
89690                     .append('span')
89691                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
89692
89693
89694                 // Update
89695                 li
89696                     .merge(liEnter)
89697                     .classed('active', function (d) { return d.layer.enabled(); })
89698                     .selectAll('input')
89699                     .property('checked', function (d) { return d.layer.enabled(); });
89700             }
89701
89702
89703             function drawQAItems(selection) {
89704                 var qaKeys = ['keepRight', 'improveOSM'];
89705                 var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
89706
89707                 var ul = selection
89708                     .selectAll('.layer-list-qa')
89709                     .data([0]);
89710
89711                 ul = ul.enter()
89712                     .append('ul')
89713                     .attr('class', 'layer-list layer-list-qa')
89714                     .merge(ul);
89715
89716                 var li = ul.selectAll('.list-item')
89717                     .data(qaLayers);
89718
89719                 li.exit()
89720                     .remove();
89721
89722                 var liEnter = li.enter()
89723                     .append('li')
89724                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
89725
89726                 var labelEnter = liEnter
89727                     .append('label')
89728                     .each(function(d) {
89729                         d3_select(this)
89730                             .call(tooltip()
89731                                 .title(t('map_data.layers.' + d.id + '.tooltip'))
89732                                 .placement('bottom')
89733                             );
89734                     });
89735
89736                 labelEnter
89737                     .append('input')
89738                     .attr('type', 'checkbox')
89739                     .on('change', function(d) { toggleLayer(d.id); });
89740
89741                 labelEnter
89742                     .append('span')
89743                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
89744
89745
89746                 // Update
89747                 li
89748                     .merge(liEnter)
89749                     .classed('active', function (d) { return d.layer.enabled(); })
89750                     .selectAll('input')
89751                     .property('checked', function (d) { return d.layer.enabled(); });
89752             }
89753
89754
89755             // Beta feature - sample vector layers to support Detroit Mapping Challenge
89756             // https://github.com/osmus/detroit-mapping-challenge
89757             function drawVectorItems(selection) {
89758                 var dataLayer = layers.layer('data');
89759                 var vtData = [
89760                     {
89761                         name: 'Detroit Neighborhoods/Parks',
89762                         src: 'neighborhoods-parks',
89763                         tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
89764                         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'
89765                     }, {
89766                         name: 'Detroit Composite POIs',
89767                         src: 'composite-poi',
89768                         tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
89769                         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'
89770                     }, {
89771                         name: 'Detroit All-The-Places POIs',
89772                         src: 'alltheplaces-poi',
89773                         tooltip: 'Public domain business location data created by web scrapers.',
89774                         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'
89775                     }
89776                 ];
89777
89778                 // Only show this if the map is around Detroit..
89779                 var detroit = geoExtent([-83.5, 42.1], [-82.8, 42.5]);
89780                 var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
89781
89782                 var container = selection.selectAll('.vectortile-container')
89783                     .data(showVectorItems ? [0] : []);
89784
89785                 container.exit()
89786                     .remove();
89787
89788                 var containerEnter = container.enter()
89789                     .append('div')
89790                     .attr('class', 'vectortile-container');
89791
89792                 containerEnter
89793                     .append('h4')
89794                     .attr('class', 'vectortile-header')
89795                     .text('Detroit Vector Tiles (Beta)');
89796
89797                 containerEnter
89798                     .append('ul')
89799                     .attr('class', 'layer-list layer-list-vectortile');
89800
89801                 containerEnter
89802                     .append('div')
89803                     .attr('class', 'vectortile-footer')
89804                     .append('a')
89805                     .attr('target', '_blank')
89806                     .attr('tabindex', -1)
89807                     .call(svgIcon('#iD-icon-out-link', 'inline'))
89808                     .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
89809                     .append('span')
89810                     .text('About these layers');
89811
89812                 container = container
89813                     .merge(containerEnter);
89814
89815
89816                 var ul = container.selectAll('.layer-list-vectortile');
89817
89818                 var li = ul.selectAll('.list-item')
89819                     .data(vtData);
89820
89821                 li.exit()
89822                     .remove();
89823
89824                 var liEnter = li.enter()
89825                     .append('li')
89826                     .attr('class', function(d) { return 'list-item list-item-' + d.src; });
89827
89828                 var labelEnter = liEnter
89829                     .append('label')
89830                     .each(function(d) {
89831                         d3_select(this).call(
89832                             tooltip().title(d.tooltip).placement('top')
89833                         );
89834                     });
89835
89836                 labelEnter
89837                     .append('input')
89838                     .attr('type', 'radio')
89839                     .attr('name', 'vectortile')
89840                     .on('change', selectVTLayer);
89841
89842                 labelEnter
89843                     .append('span')
89844                     .text(function(d) { return d.name; });
89845
89846                 // Update
89847                 li
89848                     .merge(liEnter)
89849                     .classed('active', isVTLayerSelected)
89850                     .selectAll('input')
89851                     .property('checked', isVTLayerSelected);
89852
89853
89854                 function isVTLayerSelected(d) {
89855                     return dataLayer && dataLayer.template() === d.template;
89856                 }
89857
89858                 function selectVTLayer(d) {
89859                     context.storage('settings-custom-data-url', d.template);
89860                     if (dataLayer) {
89861                         dataLayer.template(d.template, d.src);
89862                         dataLayer.enabled(true);
89863                     }
89864                 }
89865             }
89866
89867
89868             function drawCustomDataItems(selection) {
89869                 var dataLayer = layers.layer('data');
89870                 var hasData = dataLayer && dataLayer.hasData();
89871                 var showsData = hasData && dataLayer.enabled();
89872
89873                 var ul = selection
89874                     .selectAll('.layer-list-data')
89875                     .data(dataLayer ? [0] : []);
89876
89877                 // Exit
89878                 ul.exit()
89879                     .remove();
89880
89881                 // Enter
89882                 var ulEnter = ul.enter()
89883                     .append('ul')
89884                     .attr('class', 'layer-list layer-list-data');
89885
89886                 var liEnter = ulEnter
89887                     .append('li')
89888                     .attr('class', 'list-item-data');
89889
89890                 var labelEnter = liEnter
89891                     .append('label')
89892                     .call(tooltip()
89893                         .title(t('map_data.layers.custom.tooltip'))
89894                         .placement('top')
89895                     );
89896
89897                 labelEnter
89898                     .append('input')
89899                     .attr('type', 'checkbox')
89900                     .on('change', function() { toggleLayer('data'); });
89901
89902                 labelEnter
89903                     .append('span')
89904                     .text(t('map_data.layers.custom.title'));
89905             
89906                 liEnter
89907                     .append('button')
89908                     .call(tooltip()
89909                         .title(t('settings.custom_data.tooltip'))
89910                         .placement((textDirection === 'rtl') ? 'right' : 'left')
89911                     )
89912                     .on('click', editCustom)
89913                     .call(svgIcon('#iD-icon-more'));
89914
89915                 liEnter
89916                     .append('button')
89917                     .call(tooltip()
89918                         .title(t('map_data.layers.custom.zoom'))
89919                         .placement((textDirection === 'rtl') ? 'right' : 'left')
89920                     )
89921                     .on('click', function() {
89922                         event.preventDefault();
89923                         event.stopPropagation();
89924                         dataLayer.fitZoom();
89925                     })
89926                     .call(svgIcon('#iD-icon-search'));
89927
89928                 // Update
89929                 ul = ul
89930                     .merge(ulEnter);
89931
89932                 ul.selectAll('.list-item-data')
89933                     .classed('active', showsData)
89934                     .selectAll('label')
89935                     .classed('deemphasize', !hasData)
89936                     .selectAll('input')
89937                     .property('disabled', !hasData)
89938                     .property('checked', showsData);
89939             }
89940
89941
89942             function editCustom() {
89943                 event.preventDefault();
89944                 context.container()
89945                     .call(settingsCustomData);
89946             }
89947
89948
89949             function customChanged(d) {
89950                 var dataLayer = layers.layer('data');
89951
89952                 if (d && d.url) {
89953                     dataLayer.url(d.url);
89954                 } else if (d && d.fileList) {
89955                     dataLayer.fileList(d.fileList);
89956                 }
89957             }
89958
89959
89960             function drawListItems(selection, data, type, name, change, active) {
89961                 var items = selection.selectAll('li')
89962                     .data(data);
89963
89964                 // Exit
89965                 items.exit()
89966                     .remove();
89967
89968                 // Enter
89969                 var enter = items.enter()
89970                     .append('li')
89971                     .call(tooltip()
89972                         .html(true)
89973                         .title(function(d) {
89974                             var tip = t(name + '.' + d + '.tooltip');
89975                             var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
89976                             if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
89977                                 var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
89978                                 tip += '<div>' + msg + '</div>';
89979                             }
89980                             return uiTooltipHtml(tip, key);
89981                         })
89982                         .placement('top')
89983                     );
89984
89985                 var label = enter
89986                     .append('label');
89987
89988                 label
89989                     .append('input')
89990                     .attr('type', type)
89991                     .attr('name', name)
89992                     .on('change', change);
89993
89994                 label
89995                     .append('span')
89996                     .text(function(d) { return t(name + '.' + d + '.description'); });
89997
89998                 // Update
89999                 items = items
90000                     .merge(enter);
90001
90002                 items
90003                     .classed('active', active)
90004                     .selectAll('input')
90005                     .property('checked', active)
90006                     .property('indeterminate', function(d) {
90007                         return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
90008                     });
90009             }
90010
90011
90012             function renderDataLayers(selection) {
90013                 var container = selection.selectAll('.data-layer-container')
90014                     .data([0]);
90015
90016                 _dataLayerContainer = container.enter()
90017                     .append('div')
90018                     .attr('class', 'data-layer-container')
90019                     .merge(container);
90020
90021                 updateDataLayers();
90022             }
90023
90024             function renderPhotoOverlays(selection) {
90025                 var container = selection.selectAll('.photo-overlay-container')
90026                     .data([0]);
90027
90028                 _photoOverlayContainer = container.enter()
90029                     .append('div')
90030                     .attr('class', 'photo-overlay-container')
90031                     .merge(container);
90032
90033                 updatePhotoOverlays();
90034             }
90035
90036
90037             function renderFillList(selection) {
90038                 var container = selection.selectAll('.layer-fill-list')
90039                     .data([0]);
90040
90041                 _fillList = container.enter()
90042                     .append('ul')
90043                     .attr('class', 'layer-list layer-fill-list')
90044                     .merge(container);
90045
90046                 updateFillList();
90047             }
90048
90049
90050             function renderFeatureList(selection) {
90051                 var container = selection.selectAll('.layer-feature-list-container')
90052                     .data([0]);
90053
90054                 var containerEnter = container.enter()
90055                     .append('div')
90056                     .attr('class', 'layer-feature-list-container');
90057
90058                 containerEnter
90059                     .append('ul')
90060                     .attr('class', 'layer-list layer-feature-list');
90061
90062                 var footer = containerEnter
90063                     .append('div')
90064                     .attr('class', 'feature-list-links section-footer');
90065
90066                 footer
90067                     .append('a')
90068                     .attr('class', 'feature-list-link')
90069                     .attr('href', '#')
90070                     .text(t('issues.enable_all'))
90071                     .on('click', function() {
90072                         context.features().enableAll();
90073                     });
90074
90075                 footer
90076                     .append('a')
90077                     .attr('class', 'feature-list-link')
90078                     .attr('href', '#')
90079                     .text(t('issues.disable_all'))
90080                     .on('click', function() {
90081                         context.features().disableAll();
90082                     });
90083
90084                 // Update
90085                 container = container
90086                     .merge(containerEnter);
90087
90088                 _featureList = container.selectAll('.layer-feature-list');
90089
90090                 updateFeatureList();
90091             }
90092
90093             function updatePhotoOverlays() {
90094                 _photoOverlayContainer
90095                     .call(drawPhotoItems)
90096                     .call(drawPhotoTypeItems);
90097             }
90098
90099             function updateDataLayers() {
90100                 _dataLayerContainer
90101                     .call(drawOsmItems)
90102                     .call(drawQAItems)
90103                     .call(drawCustomDataItems)
90104                     .call(drawVectorItems);      // Beta - Detroit mapping challenge
90105             }
90106
90107             function updateFillList() {
90108                 _fillList
90109                     .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
90110             }
90111
90112             function updateFeatureList() {
90113                 _featureList
90114                     .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
90115             }
90116
90117             function update() {
90118
90119                 if (!_pane.select('.disclosure-wrap-data_layers').classed('hide')) {
90120                     updateDataLayers();
90121                 }
90122                 if (!_pane.select('.disclosure-wrap-photo_overlays').classed('hide')) {
90123                     updatePhotoOverlays();
90124                 }
90125                 if (!_pane.select('.disclosure-wrap-fill_area').classed('hide')) {
90126                     updateFillList();
90127                 }
90128                 if (!_pane.select('.disclosure-wrap-map_features').classed('hide')) {
90129                     updateFeatureList();
90130                 }
90131
90132                 _QAList
90133                     .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
90134             }
90135
90136
90137             function toggleWireframe() {
90138                 if (event) {
90139                     event.preventDefault();
90140                     event.stopPropagation();
90141                 }
90142
90143                 if (_fillSelected === 'wireframe') {
90144                     _fillSelected = context.storage('area-fill-toggle') || 'partial';
90145                 } else {
90146                     _fillSelected = 'wireframe';
90147                 }
90148
90149                 setFill(_fillSelected);
90150                 context.map().pan([0,0]);  // trigger a redraw
90151             }
90152
90153             var paneTooltip = tooltip()
90154                 .placement((textDirection === 'rtl') ? 'right' : 'left')
90155                 .html(true)
90156                 .title(uiTooltipHtml(t('map_data.description'), key));
90157
90158             function hidePane() {
90159                 context.ui().togglePanes();
90160             }
90161
90162             uiMapData.togglePane = function() {
90163                 if (event) event.preventDefault();
90164                 paneTooltip.hide(_toggleButton);
90165                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
90166             };
90167
90168             uiMapData.renderToggleButton = function(selection) {
90169
90170                 _toggleButton = selection
90171                     .append('button')
90172                     .on('click', uiMapData.togglePane)
90173                     .call(svgIcon('#iD-icon-data', 'light'))
90174                     .call(paneTooltip);
90175             };
90176
90177
90178             uiMapData.renderPane = function(selection) {
90179
90180                 _pane = selection
90181                     .append('div')
90182                     .attr('class', 'fillL map-pane map-data-pane hide')
90183                     .attr('pane', 'map-data');
90184
90185                 var heading = _pane
90186                     .append('div')
90187                     .attr('class', 'pane-heading');
90188
90189                 heading
90190                     .append('h2')
90191                     .text(t('map_data.title'));
90192
90193                 heading
90194                     .append('button')
90195                     .on('click', hidePane)
90196                     .call(svgIcon('#iD-icon-close'));
90197
90198
90199                 var content = _pane
90200                     .append('div')
90201                     .attr('class', 'pane-content');
90202
90203
90204                 // data layers
90205                 content
90206                     .append('div')
90207                     .attr('class', 'map-data-data-layers')
90208                     .call(uiDisclosure(context, 'data_layers', true)
90209                         .title(t('map_data.data_layers'))
90210                         .content(renderDataLayers)
90211                     );
90212
90213                 // photo overlays
90214                 content
90215                     .append('div')
90216                     .attr('class', 'map-data-photo-overlays')
90217                     .call(uiDisclosure(context, 'photo_overlays', false)
90218                         .title(t('photo_overlays.title'))
90219                         .content(renderPhotoOverlays)
90220                     );
90221
90222                 // area fills
90223                 content
90224                     .append('div')
90225                     .attr('class', 'map-data-area-fills')
90226                     .call(uiDisclosure(context, 'fill_area', false)
90227                         .title(t('map_data.fill_area'))
90228                         .content(renderFillList)
90229                     );
90230
90231                 // feature filters
90232                 content
90233                     .append('div')
90234                     .attr('class', 'map-data-feature-filters')
90235                     .call(uiDisclosure(context, 'map_features', false)
90236                         .title(t('map_data.map_features'))
90237                         .content(renderFeatureList)
90238                     );
90239
90240
90241                 // add listeners
90242                 context.features()
90243                     .on('change.map_data-update', update);
90244
90245                 update();
90246                 setFill(_fillSelected);
90247
90248                 context.keybinding()
90249                     .on(key, uiMapData.togglePane)
90250                     .on(t('area_fill.wireframe.key'), toggleWireframe)
90251                     .on(osmDataToggleKey, function() {
90252                         event.preventDefault();
90253                         event.stopPropagation();
90254                         toggleLayer('osm');
90255                     });
90256             };
90257
90258             return uiMapData;
90259         }
90260
90261         function uiNotice(context) {
90262
90263             return function(selection) {
90264                 var div = selection
90265                     .append('div')
90266                     .attr('class', 'notice');
90267
90268                 var button = div
90269                     .append('button')
90270                     .attr('class', 'zoom-to notice fillD')
90271                     .on('click', function() {
90272                         context.map().zoomEase(context.minEditableZoom());
90273                     })
90274                     .on('wheel', function() {   // let wheel events pass through #4482
90275                         var e2 = new WheelEvent(event.type, event);
90276                         context.surface().node().dispatchEvent(e2);
90277                     });
90278
90279                 button
90280                     .call(svgIcon('#iD-icon-plus', 'pre-text'))
90281                     .append('span')
90282                     .attr('class', 'label')
90283                     .text(t('zoom_in_edit'));
90284
90285
90286                 function disableTooHigh() {
90287                     var canEdit = context.map().zoom() >= context.minEditableZoom();
90288                     div.style('display', canEdit ? 'none' : 'block');
90289                 }
90290
90291                 context.map()
90292                     .on('move.notice', debounce(disableTooHigh, 500));
90293
90294                 disableTooHigh();
90295             };
90296         }
90297
90298         function uiPhotoviewer(context) {
90299
90300             var dispatch$1 = dispatch('resize');
90301
90302             function photoviewer(selection) {
90303                 selection
90304                     .append('button')
90305                     .attr('class', 'thumb-hide')
90306                     .on('click', function () {
90307                         if (services$1.streetside) { services$1.streetside.hideViewer(); }
90308                         if (services$1.mapillary) { services$1.mapillary.hideViewer(); }
90309                         if (services$1.openstreetcam) { services$1.openstreetcam.hideViewer(); }
90310                     })
90311                     .append('div')
90312                     .call(svgIcon('#iD-icon-close'));
90313
90314                 selection
90315                     .append('button')
90316                     .attr('class', 'resize-handle-xy')
90317                     .on(
90318                         'mousedown',
90319                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true, resizeOnY: true })
90320                     );
90321
90322                 selection
90323                     .append('button')
90324                     .attr('class', 'resize-handle-x')
90325                     .on(
90326                         'mousedown',
90327                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true })
90328                     );
90329
90330                 selection
90331                     .append('button')
90332                     .attr('class', 'resize-handle-y')
90333                     .on(
90334                         'mousedown',
90335                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnY: true })
90336                     );
90337
90338                 services$1.streetside.loadViewer(context);
90339                 services$1.mapillary.loadViewer(context);
90340                 services$1.openstreetcam.loadViewer(context);
90341
90342                 function buildResizeListener(target, eventName, dispatch, options) {
90343                     var resizeOnX = !!options.resizeOnX;
90344                     var resizeOnY = !!options.resizeOnY;
90345                     var minHeight = options.minHeight || 240;
90346                     var minWidth = options.minWidth || 320;
90347                     var startX;
90348                     var startY;
90349                     var startWidth;
90350                     var startHeight;
90351
90352                     function startResize() {
90353                         var mapSize = context.map().dimensions();
90354
90355                         if (resizeOnX) {
90356                             var maxWidth = mapSize[0];
90357                             var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
90358                             target.style('width', newWidth + 'px');
90359                         }
90360
90361                         if (resizeOnY) {
90362                             var maxHeight = mapSize[1] - 90;  // preserve space at top/bottom of map
90363                             var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
90364                             target.style('height', newHeight + 'px');
90365                         }
90366
90367                         dispatch.call(eventName, target, utilGetDimensions(target, true));
90368                     }
90369
90370                     function clamp(num, min, max) {
90371                         return Math.max(min, Math.min(num, max));
90372                     }
90373
90374                     function stopResize() {
90375                         d3_select(window)
90376                             .on('.' + eventName, null);
90377                     }
90378
90379                     return function initResize() {
90380                         startX = event.clientX;
90381                         startY = event.clientY;
90382                         startWidth = target.node().getBoundingClientRect().width;
90383                         startHeight = target.node().getBoundingClientRect().height;
90384
90385                         d3_select(window)
90386                             .on('mousemove.' + eventName, startResize, false)
90387                             .on('mouseup.' + eventName, stopResize, false);
90388                     };
90389                 }
90390             }
90391
90392             photoviewer.onMapResize = function() {
90393                 var photoviewer = d3_select('#photoviewer');
90394                 var content = d3_select('#content');
90395                 var mapDimensions = utilGetDimensions(content, true);
90396                 // shrink photo viewer if it is too big
90397                 // (-90 preserves space at top and bottom of map used by menus)
90398                 var photoDimensions = utilGetDimensions(photoviewer, true);
90399                 if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
90400                     var setPhotoDimensions = [
90401                         Math.min(photoDimensions[0], mapDimensions[0]),
90402                         Math.min(photoDimensions[1], mapDimensions[1] - 90),
90403                     ];
90404
90405                     photoviewer
90406                         .style('width', setPhotoDimensions[0] + 'px')
90407                         .style('height', setPhotoDimensions[1] + 'px');
90408
90409                     dispatch$1.call('resize', photoviewer, setPhotoDimensions);
90410                 }
90411             };
90412
90413             return utilRebind(photoviewer, dispatch$1, 'on');
90414         }
90415
90416         function uiRestore(context) {
90417
90418             return function(selection) {
90419                 if (!context.history().lock() || !context.history().restorableChanges())
90420                     return;
90421
90422                 var modalSelection = uiModal(selection, true);
90423
90424                 modalSelection.select('.modal')
90425                     .attr('class', 'modal fillL');
90426
90427                 var introModal = modalSelection.select('.content');
90428
90429                 introModal
90430                     .append('div')
90431                     .attr('class', 'modal-section')
90432                     .append('h3')
90433                     .text(t('restore.heading'));
90434
90435                 introModal
90436                     .append('div')
90437                     .attr('class','modal-section')
90438                     .append('p')
90439                     .text(t('restore.description'));
90440
90441                 var buttonWrap = introModal
90442                     .append('div')
90443                     .attr('class', 'modal-actions');
90444
90445                 var restore = buttonWrap
90446                     .append('button')
90447                     .attr('class', 'restore')
90448                     .on('click', function() {
90449                         context.history().restore();
90450                         modalSelection.remove();
90451                     });
90452
90453                 restore
90454                     .append('svg')
90455                     .attr('class', 'logo logo-restore')
90456                     .append('use')
90457                     .attr('xlink:href', '#iD-logo-restore');
90458
90459                 restore
90460                     .append('div')
90461                     .text(t('restore.restore'));
90462
90463                 var reset = buttonWrap
90464                     .append('button')
90465                     .attr('class', 'reset')
90466                     .on('click', function() {
90467                         context.history().clearSaved();
90468                         modalSelection.remove();
90469                     });
90470
90471                 reset
90472                     .append('svg')
90473                     .attr('class', 'logo logo-reset')
90474                     .append('use')
90475                     .attr('xlink:href', '#iD-logo-reset');
90476
90477                 reset
90478                     .append('div')
90479                     .text(t('restore.reset'));
90480
90481                 restore.node().focus();
90482             };
90483         }
90484
90485         function uiScale(context) {
90486             var projection = context.projection,
90487                 isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
90488                 maxLength = 180,
90489                 tickHeight = 8;
90490
90491
90492             function scaleDefs(loc1, loc2) {
90493                 var lat = (loc2[1] + loc1[1]) / 2,
90494                     conversion = (isImperial ? 3.28084 : 1),
90495                     dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
90496                     scale = { dist: 0, px: 0, text: '' },
90497                     buckets, i, val, dLon;
90498
90499                 if (isImperial) {
90500                     buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
90501                 } else {
90502                     buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
90503                 }
90504
90505                 // determine a user-friendly endpoint for the scale
90506                 for (i = 0; i < buckets.length; i++) {
90507                     val = buckets[i];
90508                     if (dist >= val) {
90509                         scale.dist = Math.floor(dist / val) * val;
90510                         break;
90511                     } else {
90512                         scale.dist = +dist.toFixed(2);
90513                     }
90514                 }
90515
90516                 dLon = geoMetersToLon(scale.dist / conversion, lat);
90517                 scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
90518
90519                 scale.text = displayLength(scale.dist / conversion, isImperial);
90520
90521                 return scale;
90522             }
90523
90524
90525             function update(selection) {
90526                 // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
90527                 var dims = context.map().dimensions(),
90528                     loc1 = projection.invert([0, dims[1]]),
90529                     loc2 = projection.invert([maxLength, dims[1]]),
90530                     scale = scaleDefs(loc1, loc2);
90531
90532                 selection.select('#scale-path')
90533                     .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
90534
90535                 selection.select('#scale-textgroup')
90536                     .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
90537
90538                 selection.select('#scale-text')
90539                     .text(scale.text);
90540             }
90541
90542
90543             return function(selection) {
90544                 function switchUnits() {
90545                     isImperial = !isImperial;
90546                     selection.call(update);
90547                 }
90548
90549                 var scalegroup = selection.append('svg')
90550                     .attr('id', 'scale')
90551                     .on('click', switchUnits)
90552                     .append('g')
90553                     .attr('transform', 'translate(10,11)');
90554
90555                 scalegroup
90556                     .append('path')
90557                     .attr('id', 'scale-path');
90558
90559                 scalegroup
90560                     .append('g')
90561                     .attr('id', 'scale-textgroup')
90562                     .append('text')
90563                     .attr('id', 'scale-text');
90564
90565                 selection.call(update);
90566
90567                 context.map().on('move.scale', function() {
90568                     update(selection);
90569                 });
90570             };
90571         }
90572
90573         var pair_1 = pair$1;
90574
90575
90576         function search(input, dims) {
90577           if (!dims) dims = 'NSEW';
90578           if (typeof input !== 'string') return null;
90579
90580           input = input.toUpperCase();
90581           var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
90582
90583           var m = input.match(regex);
90584           if (!m) return null;  // no match
90585
90586           var matched = m[0];
90587
90588           // extract dimension.. m[1] = leading, m[5] = trailing
90589           var dim;
90590           if (m[1] && m[5]) {                 // if matched both..
90591             dim = m[1];                       // keep leading
90592             matched = matched.slice(0, -1);   // remove trailing dimension from match
90593           } else {
90594             dim = m[1] || m[5];
90595           }
90596
90597           // if unrecognized dimension
90598           if (dim && dims.indexOf(dim) === -1) return null;
90599
90600           // extract DMS
90601           var deg = m[2] ? parseFloat(m[2]) : 0;
90602           var min = m[3] ? parseFloat(m[3]) / 60 : 0;
90603           var sec = m[4] ? parseFloat(m[4]) / 3600 : 0;
90604           var sign = (deg < 0) ? -1 : 1;
90605           if (dim === 'S' || dim === 'W') sign *= -1;
90606
90607           return {
90608             val: (Math.abs(deg) + min + sec) * sign,
90609             dim: dim,
90610             matched: matched,
90611             remain: input.slice(matched.length)
90612           };
90613         }
90614
90615
90616         function pair$1(input, dims) {
90617           input = input.trim();
90618           var one = search(input, dims);
90619           if (!one) return null;
90620
90621           input = one.remain.trim();
90622           var two = search(input, dims);
90623           if (!two || two.remain) return null;
90624
90625           if (one.dim) {
90626             return swapdim(one.val, two.val, one.dim);
90627           } else {
90628             return [one.val, two.val];
90629           }
90630         }
90631
90632
90633         function swapdim(a, b, dim) {
90634           if (dim === 'N' || dim === 'S') return [a, b];
90635           if (dim === 'W' || dim === 'E') return [b, a];
90636         }
90637
90638         function uiFeatureList(context) {
90639             var _geocodeResults;
90640
90641
90642             function featureList(selection) {
90643                 var header = selection
90644                     .append('div')
90645                     .attr('class', 'header fillL cf');
90646
90647                 header
90648                     .append('h3')
90649                     .text(t('inspector.feature_list'));
90650
90651                 var searchWrap = selection
90652                     .append('div')
90653                     .attr('class', 'search-header');
90654
90655                 var search = searchWrap
90656                     .append('input')
90657                     .attr('placeholder', t('inspector.search'))
90658                     .attr('type', 'search')
90659                     .call(utilNoAuto)
90660                     .on('keypress', keypress)
90661                     .on('keydown', keydown)
90662                     .on('input', inputevent);
90663
90664                 searchWrap
90665                     .call(svgIcon('#iD-icon-search', 'pre-text'));
90666
90667                 var listWrap = selection
90668                     .append('div')
90669                     .attr('class', 'inspector-body');
90670
90671                 var list = listWrap
90672                     .append('div')
90673                     .attr('class', 'feature-list cf');
90674
90675                 context
90676                     .on('exit.feature-list', clearSearch);
90677                 context.map()
90678                     .on('drawn.feature-list', mapDrawn);
90679
90680                 context.keybinding()
90681                     .on(uiCmd('⌘F'), focusSearch);
90682
90683
90684                 function focusSearch() {
90685                     var mode = context.mode() && context.mode().id;
90686                     if (mode !== 'browse') return;
90687
90688                     event.preventDefault();
90689                     search.node().focus();
90690                 }
90691
90692
90693                 function keydown() {
90694                     if (event.keyCode === 27) {  // escape
90695                         search.node().blur();
90696                     }
90697                 }
90698
90699
90700                 function keypress() {
90701                     var q = search.property('value'),
90702                         items = list.selectAll('.feature-list-item');
90703                     if (event.keyCode === 13 && q.length && items.size()) {  // return
90704                         click(items.datum());
90705                     }
90706                 }
90707
90708
90709                 function inputevent() {
90710                     _geocodeResults = undefined;
90711                     drawList();
90712                 }
90713
90714
90715                 function clearSearch() {
90716                     search.property('value', '');
90717                     drawList();
90718                 }
90719
90720
90721                 function mapDrawn(e) {
90722                     if (e.full) {
90723                         drawList();
90724                     }
90725                 }
90726
90727
90728                 function features() {
90729                     var entities = {};
90730                     var result = [];
90731                     var graph = context.graph();
90732                     var q = search.property('value').toLowerCase();
90733
90734                     if (!q) return result;
90735
90736                     var idMatch = q.match(/^([nwr])([0-9]+)$/);
90737
90738                     if (idMatch) {
90739                         result.push({
90740                             id: idMatch[0],
90741                             geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
90742                             type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
90743                             name: idMatch[2]
90744                         });
90745                     }
90746
90747                     var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
90748
90749                     if (locationMatch) {
90750                         var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
90751                         result.push({
90752                             id: -1,
90753                             geometry: 'point',
90754                             type: t('inspector.location'),
90755                             name: dmsCoordinatePair([loc[1], loc[0]]),
90756                             location: loc
90757                         });
90758                     }
90759
90760                     function addEntity(entity) {
90761                         if (entity.id in entities || result.length > 200)
90762                             return;
90763
90764                         entities[entity.id] = true;
90765
90766                         var name = utilDisplayName(entity) || '';
90767                         if (name.toLowerCase().indexOf(q) >= 0) {
90768                             var matched = context.presets().match(entity, graph);
90769                             var type = (matched && matched.name()) || utilDisplayType(entity.id);
90770
90771                             result.push({
90772                                 id: entity.id,
90773                                 entity: entity,
90774                                 geometry: context.geometry(entity.id),
90775                                 type: type,
90776                                 name: name
90777                             });
90778                         }
90779
90780                         graph.parentRelations(entity).forEach(function(parent) {
90781                             addEntity(parent);
90782                         });
90783                     }
90784
90785                     var visible = context.surface().selectAll('.point, .line, .area').nodes();
90786                     for (var i = 0; i < visible.length && result.length <= 200; i++) {
90787                         var datum = visible[i].__data__;
90788                         var entity = datum && datum.properties && datum.properties.entity;
90789                         if (entity) { addEntity(entity); }
90790                     }
90791
90792                     (_geocodeResults || []).forEach(function(d) {
90793                         if (d.osm_type && d.osm_id) {    // some results may be missing these - #1890
90794
90795                             // Make a temporary osmEntity so we can preset match
90796                             // and better localize the search result - #4725
90797                             var id = osmEntity.id.fromOSM(d.osm_type, d.osm_id);
90798                             var tags = {};
90799                             tags[d.class] = d.type;
90800
90801                             var attrs = { id: id, type: d.osm_type, tags: tags };
90802                             if (d.osm_type === 'way') {   // for ways, add some fake closed nodes
90803                                 attrs.nodes = ['a','a'];  // so that geometry area is possible
90804                             }
90805
90806                             var tempEntity = osmEntity(attrs);
90807                             var tempGraph = coreGraph([tempEntity]);
90808                             var matched = context.presets().match(tempEntity, tempGraph);
90809                             var type = (matched && matched.name()) || utilDisplayType(id);
90810
90811                             result.push({
90812                                 id: tempEntity.id,
90813                                 geometry: tempEntity.geometry(tempGraph),
90814                                 type: type,
90815                                 name: d.display_name,
90816                                 extent: new geoExtent(
90817                                     [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
90818                                     [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
90819                             });
90820                         }
90821                     });
90822
90823                     return result;
90824                 }
90825
90826
90827                 function drawList() {
90828                     var value = search.property('value');
90829                     var results = features();
90830
90831                     list.classed('filtered', value.length);
90832
90833                     var noResultsWorldwide = _geocodeResults && _geocodeResults.length === 0;
90834
90835                     var resultsIndicator = list.selectAll('.no-results-item')
90836                         .data([0])
90837                         .enter()
90838                         .append('button')
90839                         .property('disabled', true)
90840                         .attr('class', 'no-results-item')
90841                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
90842
90843                     resultsIndicator.append('span')
90844                         .attr('class', 'entity-name');
90845
90846                     list.selectAll('.no-results-item .entity-name')
90847                         .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible'));
90848
90849                     if (services$1.geocoder) {
90850                       list.selectAll('.geocode-item')
90851                           .data([0])
90852                           .enter()
90853                           .append('button')
90854                           .attr('class', 'geocode-item')
90855                           .on('click', geocoderSearch)
90856                           .append('div')
90857                           .attr('class', 'label')
90858                           .append('span')
90859                           .attr('class', 'entity-name')
90860                           .text(t('geocoder.search'));
90861                     }
90862
90863                     list.selectAll('.no-results-item')
90864                         .style('display', (value.length && !results.length) ? 'block' : 'none');
90865
90866                     list.selectAll('.geocode-item')
90867                         .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
90868
90869                     list.selectAll('.feature-list-item')
90870                         .data([-1])
90871                         .remove();
90872
90873                     var items = list.selectAll('.feature-list-item')
90874                         .data(results, function(d) { return d.id; });
90875
90876                     var enter = items.enter()
90877                         .insert('button', '.geocode-item')
90878                         .attr('class', 'feature-list-item')
90879                         .on('mouseover', mouseover)
90880                         .on('mouseout', mouseout)
90881                         .on('click', click);
90882
90883                     var label = enter
90884                         .append('div')
90885                         .attr('class', 'label');
90886
90887                     label
90888                         .each(function(d) {
90889                             d3_select(this)
90890                                 .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
90891                         });
90892
90893                     label
90894                         .append('span')
90895                         .attr('class', 'entity-type')
90896                         .text(function(d) { return d.type; });
90897
90898                     label
90899                         .append('span')
90900                         .attr('class', 'entity-name')
90901                         .text(function(d) { return d.name; });
90902
90903                     enter
90904                         .style('opacity', 0)
90905                         .transition()
90906                         .style('opacity', 1);
90907
90908                     items.order();
90909
90910                     items.exit()
90911                         .remove();
90912                 }
90913
90914
90915                 function mouseover(d) {
90916                     if (d.id === -1) return;
90917
90918                     context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
90919                         .classed('hover', true);
90920                 }
90921
90922
90923                 function mouseout() {
90924                     context.surface().selectAll('.hover')
90925                         .classed('hover', false);
90926                 }
90927
90928
90929                 function click(d) {
90930                     event.preventDefault();
90931                     if (d.location) {
90932                         context.map().centerZoomEase([d.location[1], d.location[0]], 19);
90933                     }
90934                     else if (d.entity) {
90935                         if (d.entity.type === 'node') {
90936                             context.map().center(d.entity.loc);
90937                         } else if (d.entity.type === 'way') {
90938                             var center = context.projection(context.map().center());
90939                             var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
90940                             context.map().center(edge.loc);
90941                         }
90942                         context.enter(modeSelect(context, [d.entity.id]));
90943                     } else {
90944                         context.zoomToEntity(d.id);
90945                     }
90946                 }
90947
90948
90949                 function geocoderSearch() {
90950                     services$1.geocoder.search(search.property('value'), function (err, resp) {
90951                         _geocodeResults = resp || [];
90952                         drawList();
90953                     });
90954                 }
90955             }
90956
90957
90958             return featureList;
90959         }
90960
90961         function uiPresetFavoriteButton(preset, geom, context, klass) {
90962
90963             geom = context.presets().fallback(geom).id;
90964
90965             var presetFavorite = {};
90966
90967             var _button = d3_select(null);
90968
90969
90970             presetFavorite.button = function(selection) {
90971
90972                 _button = selection.selectAll('.preset-favorite-button')
90973                     .data( []);
90974
90975                 _button.exit().remove();
90976
90977                 _button = _button.enter()
90978                     .insert('button', '.tag-reference-button')
90979                     .attr('class', 'preset-favorite-button ' + klass)
90980                     .attr('title', t('icons.favorite'))
90981                     .attr('tabindex', -1)
90982                     .call(svgIcon('#iD-icon-favorite'))
90983                     .merge(_button);
90984
90985                 _button
90986                     .on('click', function () {
90987                         event.stopPropagation();
90988                         event.preventDefault();
90989
90990                         context.presets().toggleFavorite(preset, geom);
90991
90992                         update();
90993                     });
90994
90995                 update();
90996             };
90997
90998             function update() {
90999                 _button
91000                     .classed('active', context.presets().favoriteMatching(preset, geom));
91001             }
91002
91003             context.presets().on('favoritePreset.button-' + preset.id.replace(/[^a-zA-Z\d:]/g, '-') + '-' + geom, update);
91004
91005             return presetFavorite;
91006         }
91007
91008         function uiPresetIcon(context) {
91009             var preset, geometry, sizeClass = 'medium';
91010
91011             function isSmall() {
91012                 return sizeClass === 'small';
91013             }
91014
91015
91016             function presetIcon(selection) {
91017                 selection.each(render);
91018             }
91019
91020
91021             function getIcon(p, geom) {
91022                 if (isSmall() && p.isFallback && p.isFallback())
91023                     return 'iD-icon-' + p.id;
91024                 else if (p.icon)
91025                     return p.icon;
91026                 else if (geom === 'line')
91027                     return 'iD-other-line';
91028                 else if (geom === 'vertex')
91029                     return p.isFallback() ? '' : 'temaki-vertex';
91030                 else if (isSmall() && geom === 'point')
91031                     return '';
91032                 else
91033                     return 'maki-marker-stroked';
91034             }
91035
91036             function renderPointBorder(enter) {
91037                 var w = 40, h = 40;
91038                 enter = enter
91039                     .append('svg')
91040                     .attr('class', 'preset-icon-fill preset-icon-point-border')
91041                     .attr('width', w)
91042                     .attr('height', h)
91043                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91044
91045                 enter.append('path')
91046                     .attr('transform', 'translate(11.5, 8)')
91047                     .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');
91048             }
91049
91050             function renderCircleFill(fillEnter) {
91051                 var w = 60, h = 60, d = 40;
91052                 fillEnter = fillEnter
91053                     .append('svg')
91054                     .attr('class', 'preset-icon-fill preset-icon-fill-vertex')
91055                     .attr('width', w)
91056                     .attr('height', h)
91057                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91058
91059                 fillEnter.append('circle')
91060                     .attr('cx', w/2)
91061                     .attr('cy', h/2)
91062                     .attr('r', d/2);
91063             }
91064
91065             function renderSquareFill(fillEnter) {
91066                 var d = isSmall() ? 40 : 60;
91067                 var w = d, h = d, l = d*2/3, c1 = (w-l)/2, c2 = c1 + l;
91068                 fillEnter = fillEnter
91069                     .append('svg')
91070                     .attr('class', 'preset-icon-fill preset-icon-fill-area')
91071                     .attr('width', w)
91072                     .attr('height', h)
91073                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91074
91075                 var data = 'M' + c1 + ' ' + c1 + ' L' + c1 + ' ' + c2 + ' L' + c2 + ' ' + c2 + ' L' + c2 + ' ' + c1 + ' Z';
91076
91077                 fillEnter.append('path')
91078                     .attr('d', data)
91079                     .attr('class', 'line area fill');
91080
91081                 fillEnter.append('path')
91082                     .attr('d', data)
91083                     .attr('class', 'line area stroke');
91084
91085                 var r = 2.5;
91086                 var coordinates = [c1, c2];
91087                 for (var xIndex in coordinates) {
91088                     for (var yIndex in coordinates) {
91089                         fillEnter.append('circle')
91090                             .attr('class', 'vertex')
91091                             .attr('cx', coordinates[xIndex])
91092                             .attr('cy', coordinates[yIndex])
91093                             .attr('r', r);
91094                     }
91095                 }
91096
91097                 if (!isSmall()) {
91098                     var midCoordinates = [[c1, w/2], [c2, w/2], [h/2, c1], [h/2, c2]];
91099                     for (var index in midCoordinates) {
91100                         var loc = midCoordinates[index];
91101                         fillEnter.append('circle')
91102                             .attr('class', 'midpoint')
91103                             .attr('cx', loc[0])
91104                             .attr('cy', loc[1])
91105                             .attr('r', 1.25);
91106                     }
91107                 }
91108
91109             }
91110
91111             function renderLine(lineEnter) {
91112                 var d = isSmall() ? 40 : 60;
91113                 // draw the line parametrically
91114                 var w = d, h = d, y = Math.round(d*0.72), l = Math.round(d*0.6), r = 2.5;
91115                 var x1 = (w - l)/2, x2 = x1 + l;
91116
91117                 lineEnter = lineEnter
91118                     .append('svg')
91119                     .attr('class', 'preset-icon-line')
91120                     .attr('width', w)
91121                     .attr('height', h)
91122                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91123
91124                 ['casing', 'stroke'].forEach(function(klass) {
91125                     lineEnter.append('path')
91126                         .attr('d', 'M' + x1 + ' ' + y + ' L' + x2 + ' ' + y)
91127                         .attr('class', 'line ' + klass);
91128                 });
91129
91130                 [[x1 - 1, y], [x2 + 1, y]].forEach(function(loc) {
91131                     lineEnter.append('circle')
91132                         .attr('class', 'vertex')
91133                         .attr('cx', loc[0])
91134                         .attr('cy', loc[1])
91135                         .attr('r', r);
91136                 });
91137             }
91138
91139             function renderRoute(routeEnter) {
91140                 var d = isSmall() ? 40 : 60;
91141                 // draw the route parametrically
91142                 var w = d,
91143                     h = d,
91144                     y1 = Math.round(d*0.80),
91145                     y2 = Math.round(d*0.68),
91146                     l = Math.round(d*0.6),
91147                     r = 2;
91148                 var x1 = (w - l)/2, x2 = x1 + l/3, x3 = x2 + l/3, x4 = x3 + l/3;
91149
91150                 routeEnter = routeEnter
91151                     .append('svg')
91152                     .attr('class', 'preset-icon-route')
91153                     .attr('width', w)
91154                     .attr('height', h)
91155                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91156
91157                 ['casing', 'stroke'].forEach(function(klass) {
91158                     routeEnter.append('path')
91159                         .attr('d', 'M' + x1 + ' ' + y1 + ' L' + x2 + ' ' + y2)
91160                         .attr('class', 'segment0 line ' + klass);
91161                     routeEnter.append('path')
91162                         .attr('d', 'M' + x2 + ' ' + y2 + ' L' + x3 + ' ' + y1)
91163                         .attr('class', 'segment1 line ' + klass);
91164                     routeEnter.append('path')
91165                         .attr('d', 'M' + x3 + ' ' + y1 + ' L' + x4 + ' ' + y2)
91166                         .attr('class', 'segment2 line ' + klass);
91167                 });
91168
91169                 [[x1, y1], [x2, y2], [x3, y1], [x4, y2]].forEach(function(loc) {
91170                     routeEnter.append('circle')
91171                         .attr('class', 'vertex')
91172                         .attr('cx', loc[0])
91173                         .attr('cy', loc[1])
91174                         .attr('r', r);
91175                 });
91176             }
91177
91178             var routeSegements = {
91179                 bicycle: ['highway/cycleway', 'highway/cycleway', 'highway/cycleway'],
91180                 bus: ['highway/unclassified', 'highway/secondary', 'highway/primary'],
91181                 detour: ['highway/tertiary', 'highway/residential', 'highway/unclassified'],
91182                 ferry: ['route/ferry', 'route/ferry', 'route/ferry'],
91183                 foot: ['highway/footway', 'highway/footway', 'highway/footway'],
91184                 hiking: ['highway/path', 'highway/path', 'highway/path'],
91185                 horse: ['highway/bridleway', 'highway/bridleway', 'highway/bridleway'],
91186                 light_rail: ['railway/light_rail', 'railway/light_rail', 'railway/light_rail'],
91187                 monorail: ['railway/monorail', 'railway/monorail', 'railway/monorail'],
91188                 pipeline: ['man_made/pipeline', 'man_made/pipeline', 'man_made/pipeline'],
91189                 piste: ['piste/downhill', 'piste/hike', 'piste/nordic'],
91190                 power: ['power/line', 'power/line', 'power/line'],
91191                 road: ['highway/secondary', 'highway/primary', 'highway/trunk'],
91192                 subway: ['railway/subway', 'railway/subway', 'railway/subway'],
91193                 train: ['railway/rail', 'railway/rail', 'railway/rail'],
91194                 tram: ['railway/tram', 'railway/tram', 'railway/tram'],
91195                 waterway: ['waterway/stream', 'waterway/stream', 'waterway/stream']
91196             };
91197
91198             function render() {
91199
91200                 var p = preset.apply(this, arguments);
91201                 var isFallback = isSmall() && p.isFallback && p.isFallback();
91202                 var geom = geometry ? geometry.apply(this, arguments) : null;
91203                 if (geom === 'relation' && p.tags && ((p.tags.type === 'route' && p.tags.route && routeSegements[p.tags.route]) || p.tags.type === 'waterway')) {
91204                     geom = 'route';
91205                 }
91206                 var imageURL = p.imageURL;
91207                 var picon = imageURL ? null : getIcon(p, geom);
91208                 var isMaki = picon && /^maki-/.test(picon);
91209                 var isTemaki = picon && /^temaki-/.test(picon);
91210                 var isFa = picon && /^fa[srb]-/.test(picon);
91211                 var isTnp = picon && /^tnp-/.test(picon);
91212                 var isiDIcon = picon && !(isMaki || isTemaki || isFa || isTnp);
91213                 var isCategory = !p.setTags;
91214                 var drawPoint = picon && geom === 'point' && isSmall() && !isFallback;
91215                 var drawVertex = picon !== null && geom === 'vertex' && (!isSmall() || !isFallback);
91216                 var drawLine = picon && geom === 'line' && !isFallback && !isCategory;
91217                 var drawArea = picon && geom === 'area' && !isFallback;
91218                 var drawRoute = picon && geom === 'route';
91219                 var isFramed = (drawVertex || drawArea || drawLine || drawRoute);
91220
91221                 var tags = !isCategory ? p.setTags({}, geom) : {};
91222                 for (var k in tags) {
91223                     if (tags[k] === '*') {
91224                         tags[k] = 'yes';
91225                     }
91226                 }
91227                 var tagClasses = svgTagClasses().getClassesString(tags, '');
91228
91229                 var selection = d3_select(this);
91230
91231                 var container = selection.selectAll('.preset-icon-container')
91232                     .data([0]);
91233
91234                 container = container.enter()
91235                     .append('div')
91236                     .attr('class', 'preset-icon-container ' + sizeClass)
91237                     .merge(container);
91238
91239                 container.classed('fallback', isFallback);
91240
91241                 var imageIcon = container.selectAll('img.image-icon')
91242                     .data(imageURL ? [0] : []);
91243
91244                 imageIcon.exit()
91245                     .remove();
91246
91247                 imageIcon = imageIcon.enter()
91248                     .append('img')
91249                     .attr('class', 'image-icon')
91250                     .merge(imageIcon);
91251
91252                 imageIcon
91253                     .attr('src', imageURL);
91254
91255                 var pointBorder = container.selectAll('.preset-icon-point-border')
91256                     .data(drawPoint ? [0] : []);
91257
91258                 pointBorder.exit()
91259                     .remove();
91260
91261                 var pointBorderEnter = pointBorder.enter();
91262                 renderPointBorder(pointBorderEnter);
91263                 pointBorder = pointBorderEnter.merge(pointBorder);
91264
91265
91266                 var vertexFill = container.selectAll('.preset-icon-fill-vertex')
91267                     .data(drawVertex ? [0] : []);
91268
91269                 vertexFill.exit()
91270                     .remove();
91271
91272                 var vertexFillEnter = vertexFill.enter();
91273                 renderCircleFill(vertexFillEnter);
91274                 vertexFill = vertexFillEnter.merge(vertexFill);
91275
91276
91277                 var fill = container.selectAll('.preset-icon-fill-area')
91278                     .data(drawArea ? [0] : []);
91279
91280                 fill.exit()
91281                     .remove();
91282
91283                 var fillEnter = fill.enter();
91284                 renderSquareFill(fillEnter);
91285                 fill = fillEnter.merge(fill);
91286
91287                 fill.selectAll('path.stroke')
91288                     .attr('class', 'area stroke ' + tagClasses);
91289                 fill.selectAll('path.fill')
91290                     .attr('class', 'area fill ' + tagClasses);
91291
91292
91293                 var line = container.selectAll('.preset-icon-line')
91294                     .data(drawLine ? [0] : []);
91295
91296                 line.exit()
91297                     .remove();
91298
91299                 var lineEnter = line.enter();
91300                 renderLine(lineEnter);
91301
91302                 line = lineEnter.merge(line);
91303
91304                 line.selectAll('path.stroke')
91305                     .attr('class', 'line stroke ' + tagClasses);
91306                 line.selectAll('path.casing')
91307                     .attr('class', 'line casing ' + tagClasses);
91308
91309                 var route = container.selectAll('.preset-icon-route')
91310                     .data(drawRoute ? [0] : []);
91311
91312                 route.exit()
91313                     .remove();
91314
91315                 var routeEnter = route.enter();
91316                 renderRoute(routeEnter);
91317
91318                 route = routeEnter.merge(route);
91319
91320                 if (drawRoute) {
91321                     var routeType = p.tags.type === 'waterway' ? 'waterway' : p.tags.route;
91322                     var segmentPresetIDs = routeSegements[routeType];
91323                     for (var segmentIndex in segmentPresetIDs) {
91324                         var segmentPreset = context.presets().item(segmentPresetIDs[segmentIndex]);
91325                         var segmentTagClasses = svgTagClasses().getClassesString(segmentPreset.tags, '');
91326                         route.selectAll('path.stroke.segment' + segmentIndex)
91327                             .attr('class', 'segment' + segmentIndex + ' line stroke ' + segmentTagClasses);
91328                         route.selectAll('path.casing.segment' + segmentIndex)
91329                             .attr('class', 'segment' + segmentIndex + ' line casing ' + segmentTagClasses);
91330                     }
91331
91332                 }
91333
91334
91335                 var icon = container.selectAll('.preset-icon')
91336                     .data(picon ? [0] : []);
91337
91338                 icon.exit()
91339                     .remove();
91340
91341                 icon = icon.enter()
91342                     .append('div')
91343                     .attr('class', 'preset-icon')
91344                     .call(svgIcon(''))
91345                     .merge(icon);
91346
91347                 icon
91348                     .attr('class', 'preset-icon ' + (geom ? geom + '-geom' : ''))
91349                     .classed('framed', isFramed)
91350                     .classed('preset-icon-iD', isiDIcon);
91351
91352                 icon.selectAll('svg')
91353                     .attr('class', function() {
91354                         return 'icon ' + picon + ' ' + (!isiDIcon && geom !== 'line'  ? '' : tagClasses);
91355                     });
91356
91357                 icon.selectAll('use')
91358                     .attr('href', '#' + picon + (isMaki ? (isSmall() && geom === 'point' ? '-11' : '-15') : ''));
91359
91360             }
91361
91362
91363             presetIcon.preset = function(val) {
91364                 if (!arguments.length) return preset;
91365                 preset = utilFunctor(val);
91366                 return presetIcon;
91367             };
91368
91369
91370             presetIcon.geometry = function(val) {
91371                 if (!arguments.length) return geometry;
91372                 geometry = utilFunctor(val);
91373                 return presetIcon;
91374             };
91375
91376
91377             presetIcon.sizeClass = function(val) {
91378                 if (!arguments.length) return sizeClass;
91379                 sizeClass = val;
91380                 return presetIcon;
91381             };
91382
91383             return presetIcon;
91384         }
91385
91386         function uiRawMemberEditor(context) {
91387             var taginfo = services$1.taginfo;
91388             var _entityID;
91389             var _contentSelection = d3_select(null);
91390             var _maxMembers = 1000;
91391
91392             function downloadMember(d) {
91393                 event.preventDefault();
91394
91395                 // display the loading indicator
91396                 d3_select(this.parentNode).classed('tag-reference-loading', true);
91397                 context.loadEntity(d.id, function() {
91398                     updateDisclosureContent(_contentSelection);
91399                 });
91400             }
91401
91402             function zoomToMember(d) {
91403                 event.preventDefault();
91404
91405                 var entity = context.entity(d.id);
91406                 context.map().zoomTo(entity);
91407
91408                 // highlight the feature in case it wasn't previously on-screen
91409                 utilHighlightEntities([d.id], true, context);
91410             }
91411
91412
91413             function selectMember(d) {
91414                 event.preventDefault();
91415
91416                 // remove the hover-highlight styling
91417                 utilHighlightEntities([d.id], false, context);
91418
91419                 var entity = context.entity(d.id);
91420                 var mapExtent = context.map().extent();
91421                 if (!entity.intersects(mapExtent, context.graph())) {
91422                     // zoom to the entity if its extent is not visible now
91423                     context.map().zoomToEase(entity);
91424                 }
91425
91426                 context.enter(modeSelect(context, [d.id]));
91427             }
91428
91429
91430             function changeRole(d) {
91431                 var oldRole = d.role;
91432                 var newRole = d3_select(this).property('value');
91433
91434                 if (oldRole !== newRole) {
91435                     var member = { id: d.id, type: d.type, role: newRole };
91436                     context.perform(
91437                         actionChangeMember(d.relation.id, member, d.index),
91438                         t('operations.change_role.annotation')
91439                     );
91440                 }
91441             }
91442
91443
91444             function deleteMember(d) {
91445
91446                 // remove the hover-highlight styling
91447                 utilHighlightEntities([d.id], false, context);
91448
91449                 context.perform(
91450                     actionDeleteMember(d.relation.id, d.index),
91451                     t('operations.delete_member.annotation')
91452                 );
91453
91454                 if (!context.hasEntity(d.relation.id)) {
91455                     context.enter(modeBrowse(context));
91456                 }
91457             }
91458
91459             function updateDisclosureContent(selection) {
91460                 _contentSelection = selection;
91461
91462                 var memberships = [];
91463                 var entity = context.entity(_entityID);
91464                 entity.members.slice(0, _maxMembers).forEach(function(member, index) {
91465                     memberships.push({
91466                         index: index,
91467                         id: member.id,
91468                         type: member.type,
91469                         role: member.role,
91470                         relation: entity,
91471                         member: context.hasEntity(member.id)
91472                     });
91473                 });
91474
91475                 var list = selection.selectAll('.member-list')
91476                     .data([0]);
91477
91478                 list = list.enter()
91479                     .append('ul')
91480                     .attr('class', 'member-list')
91481                     .merge(list);
91482
91483
91484                 var items = list.selectAll('li')
91485                     .data(memberships, function(d) {
91486                         return osmEntity.key(d.relation) + ',' + d.index + ',' +
91487                             (d.member ? osmEntity.key(d.member) : 'incomplete');
91488                     });
91489
91490                 items.exit()
91491                     .each(unbind)
91492                     .remove();
91493
91494                 var itemsEnter = items.enter()
91495                     .append('li')
91496                     .attr('class', 'member-row form-field')
91497                     .classed('member-incomplete', function(d) { return !d.member; });
91498
91499                 itemsEnter
91500                     .each(function(d) {
91501                         var item = d3_select(this);
91502
91503                         var label = item
91504                             .append('label')
91505                             .attr('class', 'field-label');
91506
91507                         if (d.member) {
91508                             // highlight the member feature in the map while hovering on the list item
91509                             item
91510                                 .on('mouseover', function() {
91511                                     utilHighlightEntities([d.id], true, context);
91512                                 })
91513                                 .on('mouseout', function() {
91514                                     utilHighlightEntities([d.id], false, context);
91515                                 });
91516
91517                             var labelLink = label
91518                                 .append('span')
91519                                 .attr('class', 'label-text')
91520                                 .append('a')
91521                                 .attr('href', '#')
91522                                 .on('click', selectMember);
91523
91524                             labelLink
91525                                 .append('span')
91526                                 .attr('class', 'member-entity-type')
91527                                 .text(function(d) {
91528                                     var matched = context.presets().match(d.member, context.graph());
91529                                     return (matched && matched.name()) || utilDisplayType(d.member.id);
91530                                 });
91531
91532                             labelLink
91533                                 .append('span')
91534                                 .attr('class', 'member-entity-name')
91535                                 .text(function(d) { return utilDisplayName(d.member); });
91536
91537                             label
91538                                 .append('button')
91539                                 .attr('class', 'member-zoom')
91540                                 .attr('title', t('icons.zoom_to'))
91541                                 .call(svgIcon('#iD-icon-geolocate'))
91542                                 .on('click', zoomToMember);
91543
91544                         } else {
91545                             var labelText = label
91546                                 .append('span')
91547                                 .attr('class', 'label-text');
91548
91549                             labelText
91550                                 .append('span')
91551                                 .attr('class', 'member-entity-type')
91552                                 .text(t('inspector.' + d.type, { id: d.id }));
91553
91554                             labelText
91555                                 .append('span')
91556                                 .attr('class', 'member-entity-name')
91557                                 .text(t('inspector.incomplete', { id: d.id }));
91558
91559                             label
91560                                 .append('button')
91561                                 .attr('class', 'member-download')
91562                                 .attr('title', t('icons.download'))
91563                                 .attr('tabindex', -1)
91564                                 .call(svgIcon('#iD-icon-load'))
91565                                 .on('click', downloadMember);
91566                         }
91567                     });
91568
91569                 var wrapEnter = itemsEnter
91570                     .append('div')
91571                     .attr('class', 'form-field-input-wrap form-field-input-member');
91572
91573                 wrapEnter
91574                     .append('input')
91575                     .attr('class', 'member-role')
91576                     .property('type', 'text')
91577                     .attr('maxlength', 255)
91578                     .attr('placeholder', t('inspector.role'))
91579                     .call(utilNoAuto);
91580
91581                 wrapEnter
91582                     .append('button')
91583                     .attr('tabindex', -1)
91584                     .attr('title', t('icons.remove'))
91585                     .attr('class', 'remove form-field-button member-delete')
91586                     .call(svgIcon('#iD-operation-delete'));
91587
91588                 if (taginfo) {
91589                     wrapEnter.each(bindTypeahead);
91590                 }
91591
91592                 var dragOrigin, targetIndex;
91593
91594                 itemsEnter.call(d3_drag()
91595                     .on('start', function() {
91596                         dragOrigin = {
91597                             x: event.x,
91598                             y: event.y
91599                         };
91600                         targetIndex = null;
91601                     })
91602                     .on('drag', function(d, index) {
91603                         var x = event.x - dragOrigin.x,
91604                             y = event.y - dragOrigin.y;
91605
91606                         if (!d3_select(this).classed('dragging') &&
91607                             // don't display drag until dragging beyond a distance threshold
91608                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) return;
91609
91610                         d3_select(this)
91611                             .classed('dragging', true);
91612
91613                         targetIndex = null;
91614
91615                         selection.selectAll('li.member-row')
91616                             .style('transform', function(d2, index2) {
91617                                 var node = d3_select(this).node();
91618                                 if (index === index2) {
91619                                     return 'translate(' + x + 'px, ' + y + 'px)';
91620                                 } else if (index2 > index && event.y > node.offsetTop - node.offsetHeight) {
91621                                     if (targetIndex === null || index2 > targetIndex) {
91622                                         targetIndex = index2;
91623                                     }
91624                                     return 'translateY(-100%)';
91625                                 } else if (index2 < index && event.y < node.offsetTop) {
91626                                     if (targetIndex === null || index2 < targetIndex) {
91627                                         targetIndex = index2;
91628                                     }
91629                                     return 'translateY(100%)';
91630                                 }
91631                                 return null;
91632                             });
91633                     })
91634                     .on('end', function(d, index) {
91635
91636                         if (!d3_select(this).classed('dragging')) {
91637                             return;
91638                         }
91639
91640                         d3_select(this)
91641                             .classed('dragging', false);
91642
91643                         selection.selectAll('li.member-row')
91644                             .style('transform', null);
91645
91646                         if (targetIndex !== null) {
91647                             // dragged to a new position, reorder
91648                             context.perform(
91649                                 actionMoveMember(d.relation.id, index, targetIndex),
91650                                 t('operations.reorder_members.annotation')
91651                             );
91652                         }
91653                     })
91654                 );
91655
91656
91657                 // update
91658                 items = items
91659                     .merge(itemsEnter);
91660
91661                 items.select('input.member-role')
91662                     .property('value', function(d) { return d.role; })
91663                     .on('blur', changeRole)
91664                     .on('change', changeRole);
91665
91666                 items.select('button.member-delete')
91667                     .on('click', deleteMember);
91668
91669
91670
91671                 function bindTypeahead(d) {
91672                     var row = d3_select(this);
91673                     var role = row.selectAll('input.member-role');
91674                     var origValue = role.property('value');
91675
91676                     function sort(value, data) {
91677                         var sameletter = [];
91678                         var other = [];
91679                         for (var i = 0; i < data.length; i++) {
91680                             if (data[i].value.substring(0, value.length) === value) {
91681                                 sameletter.push(data[i]);
91682                             } else {
91683                                 other.push(data[i]);
91684                             }
91685                         }
91686                         return sameletter.concat(other);
91687                     }
91688
91689                     role.call(uiCombobox(context, 'member-role')
91690                         .fetcher(function(role, callback) {
91691                             // The `geometry` param is used in the `taginfo.js` interface for
91692                             // filtering results, as a key into the `tag_members_fractions`
91693                             // object.  If we don't know the geometry because the member is
91694                             // not yet downloaded, it's ok to guess based on type.
91695                             var geometry;
91696                             if (d.member) {
91697                                 geometry = context.geometry(d.member.id);
91698                             } else if (d.type === 'relation') {
91699                                 geometry = 'relation';
91700                             } else if (d.type === 'way') {
91701                                 geometry = 'line';
91702                             } else {
91703                                 geometry = 'point';
91704                             }
91705
91706                             var rtype = entity.tags.type;
91707                             taginfo.roles({
91708                                 debounce: true,
91709                                 rtype: rtype || '',
91710                                 geometry: geometry,
91711                                 query: role
91712                             }, function(err, data) {
91713                                 if (!err) callback(sort(role, data));
91714                             });
91715                         })
91716                         .on('cancel', function() {
91717                             role.property('value', origValue);
91718                         })
91719                     );
91720                 }
91721
91722
91723                 function unbind() {
91724                     var row = d3_select(this);
91725
91726                     row.selectAll('input.member-role')
91727                         .call(uiCombobox.off);
91728                 }
91729             }
91730
91731             function rawMemberEditor(selection) {
91732                 var entity = context.entity(_entityID);
91733
91734                 var gt = entity.members.length > _maxMembers ? '>' : '';
91735                 selection.call(uiDisclosure(context, 'raw_member_editor', true)
91736                     .title(t('inspector.all_members') + ' (' + gt + entity.members.slice(0, _maxMembers).length + ')')
91737                     .expanded(true)
91738                     .updatePreference(false)
91739                     .on('toggled', function(expanded) {
91740                         if (expanded) {
91741                             selection.node().parentNode.scrollTop += 200;
91742                         }
91743                     })
91744                     .content(updateDisclosureContent)
91745                 );
91746             }
91747
91748             rawMemberEditor.entityID = function(val) {
91749                 if (!arguments.length) return _entityID;
91750                 _entityID = val;
91751                 return rawMemberEditor;
91752             };
91753
91754
91755             return rawMemberEditor;
91756         }
91757
91758         function uiRawMembershipEditor(context) {
91759             var taginfo = services$1.taginfo;
91760             var nearbyCombo = uiCombobox(context, 'parent-relation')
91761                 .minItems(1)
91762                 .fetcher(fetchNearbyRelations)
91763                 .itemsMouseEnter(function(d) {
91764                     if (d.relation) utilHighlightEntities([d.relation.id], true, context);
91765                 })
91766                 .itemsMouseLeave(function(d) {
91767                     if (d.relation) utilHighlightEntities([d.relation.id], false, context);
91768                 });
91769             var _inChange = false;
91770             var _entityID;
91771             var _showBlank;
91772
91773
91774             function selectRelation(d) {
91775                 event.preventDefault();
91776
91777                 // remove the hover-highlight styling
91778                 utilHighlightEntities([d.relation.id], false, context);
91779
91780                 context.enter(modeSelect(context, [d.relation.id]));
91781             }
91782
91783
91784             function changeRole(d) {
91785                 if (d === 0) return;    // called on newrow (shoudn't happen)
91786                 if (_inChange) return;  // avoid accidental recursive call #5731
91787
91788                 var oldRole = d.member.role;
91789                 var newRole = d3_select(this).property('value');
91790
91791                 if (oldRole !== newRole) {
91792                     _inChange = true;
91793                     context.perform(
91794                         actionChangeMember(d.relation.id, Object.assign({}, d.member, { role: newRole }), d.index),
91795                         t('operations.change_role.annotation')
91796                     );
91797                 }
91798                 _inChange = false;
91799             }
91800
91801
91802             function addMembership(d, role) {
91803                 this.blur();           // avoid keeping focus on the button
91804                 _showBlank = false;
91805
91806                 var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
91807
91808                 if (d.relation) {
91809                     context.perform(
91810                         actionAddMember(d.relation.id, member),
91811                         t('operations.add_member.annotation')
91812                     );
91813
91814                 } else {
91815                     var relation = osmRelation();
91816                     context.perform(
91817                         actionAddEntity(relation),
91818                         actionAddMember(relation.id, member),
91819                         t('operations.add.annotation.relation')
91820                     );
91821
91822                     context.enter(modeSelect(context, [relation.id]).newFeature(true));
91823                 }
91824             }
91825
91826
91827             function deleteMembership(d) {
91828                 this.blur();           // avoid keeping focus on the button
91829                 if (d === 0) return;   // called on newrow (shoudn't happen)
91830
91831                 // remove the hover-highlight styling
91832                 utilHighlightEntities([d.relation.id], false, context);
91833
91834                 context.perform(
91835                     actionDeleteMember(d.relation.id, d.index),
91836                     t('operations.delete_member.annotation')
91837                 );
91838             }
91839
91840
91841             function fetchNearbyRelations(q, callback) {
91842                 var newRelation = { relation: null, value: t('inspector.new_relation') };
91843
91844                 var result = [];
91845
91846                 var graph = context.graph();
91847
91848                 function baseDisplayLabel(entity) {
91849                     var matched = context.presets().match(entity, graph);
91850                     var presetName = (matched && matched.name()) || t('inspector.relation');
91851                     var entityName = utilDisplayName(entity) || '';
91852
91853                     return presetName + ' ' + entityName;
91854                 }
91855
91856                 var explicitRelation = q && context.hasEntity(q.toLowerCase());
91857                 if (explicitRelation && explicitRelation.type === 'relation' && explicitRelation.id !== _entityID) {
91858                     // loaded relation is specified explicitly, only show that
91859
91860                     result.push({
91861                         relation: explicitRelation,
91862                         value: baseDisplayLabel(explicitRelation) + ' ' + explicitRelation.id
91863                     });
91864                 } else {
91865
91866                     context.intersects(context.extent()).forEach(function(entity) {
91867                         if (entity.type !== 'relation' || entity.id === _entityID) return;
91868
91869                         var value = baseDisplayLabel(entity);
91870                         if (q && (value + ' ' + entity.id).toLowerCase().indexOf(q.toLowerCase()) === -1) return;
91871
91872                         result.push({ relation: entity, value: value });
91873                     });
91874
91875                     result.sort(function(a, b) {
91876                         return osmRelation.creationOrder(a.relation, b.relation);
91877                     });
91878
91879                     // Dedupe identical names by appending relation id - see #2891
91880                     var dupeGroups = Object.values(utilArrayGroupBy(result, 'value'))
91881                         .filter(function(v) { return v.length > 1; });
91882
91883                     dupeGroups.forEach(function(group) {
91884                         group.forEach(function(obj) {
91885                             obj.value += ' ' + obj.relation.id;
91886                         });
91887                     });
91888                 }
91889
91890                 result.forEach(function(obj) {
91891                     obj.title = obj.value;
91892                 });
91893
91894                 result.unshift(newRelation);
91895                 callback(result);
91896             }
91897
91898
91899             function rawMembershipEditor(selection) {
91900                 var entity = context.entity(_entityID);
91901                 var parents = context.graph().parentRelations(entity);
91902                 var memberships = [];
91903
91904                 parents.slice(0, 1000).forEach(function(relation) {
91905                     relation.members.forEach(function(member, index) {
91906                         if (member.id === entity.id) {
91907                             memberships.push({ relation: relation, member: member, index: index });
91908                         }
91909                     });
91910                 });
91911
91912                 var gt = parents.length > 1000 ? '>' : '';
91913                 selection.call(uiDisclosure(context, 'raw_membership_editor', true)
91914                     .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')')
91915                     .expanded(true)
91916                     .updatePreference(false)
91917                     .on('toggled', function(expanded) {
91918                         if (expanded) { selection.node().parentNode.scrollTop += 200; }
91919                     })
91920                     .content(content)
91921                 );
91922
91923
91924                 function content(selection) {
91925                     var list = selection.selectAll('.member-list')
91926                         .data([0]);
91927
91928                     list = list.enter()
91929                         .append('ul')
91930                         .attr('class', 'member-list')
91931                         .merge(list);
91932
91933
91934                     var items = list.selectAll('li.member-row-normal')
91935                         .data(memberships, function(d) {
91936                             return osmEntity.key(d.relation) + ',' + d.index;
91937                         });
91938
91939                     items.exit()
91940                         .each(unbind)
91941                         .remove();
91942
91943                     // Enter
91944                     var itemsEnter = items.enter()
91945                         .append('li')
91946                         .attr('class', 'member-row member-row-normal form-field');
91947
91948                     // highlight the relation in the map while hovering on the list item
91949                     itemsEnter.on('mouseover', function(d) {
91950                             utilHighlightEntities([d.relation.id], true, context);
91951                         })
91952                         .on('mouseout', function(d) {
91953                             utilHighlightEntities([d.relation.id], false, context);
91954                         });
91955
91956                     var labelEnter = itemsEnter
91957                         .append('label')
91958                         .attr('class', 'field-label')
91959                         .append('span')
91960                         .attr('class', 'label-text')
91961                         .append('a')
91962                         .attr('href', '#')
91963                         .on('click', selectRelation);
91964
91965                     labelEnter
91966                         .append('span')
91967                         .attr('class', 'member-entity-type')
91968                         .text(function(d) {
91969                             var matched = context.presets().match(d.relation, context.graph());
91970                             return (matched && matched.name()) || t('inspector.relation');
91971                         });
91972
91973                     labelEnter
91974                         .append('span')
91975                         .attr('class', 'member-entity-name')
91976                         .text(function(d) { return utilDisplayName(d.relation); });
91977
91978                     var wrapEnter = itemsEnter
91979                         .append('div')
91980                         .attr('class', 'form-field-input-wrap form-field-input-member');
91981
91982                     wrapEnter
91983                         .append('input')
91984                         .attr('class', 'member-role')
91985                         .property('type', 'text')
91986                         .attr('maxlength', 255)
91987                         .attr('placeholder', t('inspector.role'))
91988                         .call(utilNoAuto)
91989                         .property('value', function(d) { return d.member.role; })
91990                         .on('blur', changeRole)
91991                         .on('change', changeRole);
91992
91993                     wrapEnter
91994                         .append('button')
91995                         .attr('tabindex', -1)
91996                         .attr('class', 'remove form-field-button member-delete')
91997                         .call(svgIcon('#iD-operation-delete'))
91998                         .on('click', deleteMembership);
91999
92000                     if (taginfo) {
92001                         wrapEnter.each(bindTypeahead);
92002                     }
92003
92004
92005                     var newMembership = list.selectAll('.member-row-new')
92006                         .data(_showBlank ? [0] : []);
92007
92008                     // Exit
92009                     newMembership.exit()
92010                         .remove();
92011
92012                     // Enter
92013                     var newMembershipEnter = newMembership.enter()
92014                         .append('li')
92015                         .attr('class', 'member-row member-row-new form-field');
92016
92017                     newMembershipEnter
92018                         .append('label')
92019                         .attr('class', 'field-label')
92020                         .append('input')
92021                         .attr('placeholder', t('inspector.choose_relation'))
92022                         .attr('type', 'text')
92023                         .attr('class', 'member-entity-input')
92024                         .call(utilNoAuto);
92025
92026                     var newWrapEnter = newMembershipEnter
92027                         .append('div')
92028                         .attr('class', 'form-field-input-wrap form-field-input-member');
92029
92030                     newWrapEnter
92031                         .append('input')
92032                         .attr('class', 'member-role')
92033                         .property('type', 'text')
92034                         .attr('maxlength', 255)
92035                         .attr('placeholder', t('inspector.role'))
92036                         .call(utilNoAuto);
92037
92038                     newWrapEnter
92039                         .append('button')
92040                         .attr('tabindex', -1)
92041                         .attr('class', 'remove form-field-button member-delete')
92042                         .call(svgIcon('#iD-operation-delete'))
92043                         .on('click', function() {
92044                             list.selectAll('.member-row-new')
92045                                 .remove();
92046                         });
92047
92048                     // Update
92049                     newMembership = newMembership
92050                         .merge(newMembershipEnter);
92051
92052                     newMembership.selectAll('.member-entity-input')
92053                         .on('blur', cancelEntity)   // if it wasn't accepted normally, cancel it
92054                         .call(nearbyCombo
92055                             .on('accept', acceptEntity)
92056                             .on('cancel', cancelEntity)
92057                         );
92058
92059
92060                     // Container for the Add button
92061                     var addRow = selection.selectAll('.add-row')
92062                         .data([0]);
92063
92064                     // enter
92065                     var addRowEnter = addRow.enter()
92066                         .append('div')
92067                         .attr('class', 'add-row');
92068
92069                     var addRelationButton = addRowEnter
92070                         .append('button')
92071                         .attr('class', 'add-relation');
92072
92073                     addRelationButton
92074                         .call(svgIcon('#iD-icon-plus', 'light'));
92075                     addRelationButton
92076                         .call(tooltip().title(t('inspector.add_to_relation')).placement(textDirection === 'ltr' ? 'right' : 'left'));
92077
92078                     addRowEnter
92079                         .append('div')
92080                         .attr('class', 'space-value');   // preserve space
92081
92082                     addRowEnter
92083                         .append('div')
92084                         .attr('class', 'space-buttons');  // preserve space
92085
92086                     // update
92087                     addRow = addRow
92088                         .merge(addRowEnter);
92089
92090                     addRow.select('.add-relation')
92091                         .on('click', function() {
92092                             _showBlank = true;
92093                             content(selection);
92094                             list.selectAll('.member-entity-input').node().focus();
92095                         });
92096
92097
92098                     function acceptEntity(d) {
92099                         if (!d) {
92100                             cancelEntity();
92101                             return;
92102                         }
92103                         // remove hover-higlighting
92104                         if (d.relation) utilHighlightEntities([d.relation.id], false, context);
92105
92106                         var role = list.selectAll('.member-row-new .member-role').property('value');
92107                         addMembership(d, role);
92108                     }
92109
92110
92111                     function cancelEntity() {
92112                         var input = newMembership.selectAll('.member-entity-input');
92113                         input.property('value', '');
92114
92115                         // remove hover-higlighting
92116                         context.surface().selectAll('.highlighted')
92117                             .classed('highlighted', false);
92118                     }
92119
92120
92121                     function bindTypeahead(d) {
92122                         var row = d3_select(this);
92123                         var role = row.selectAll('input.member-role');
92124                         var origValue = role.property('value');
92125
92126                         function sort(value, data) {
92127                             var sameletter = [];
92128                             var other = [];
92129                             for (var i = 0; i < data.length; i++) {
92130                                 if (data[i].value.substring(0, value.length) === value) {
92131                                     sameletter.push(data[i]);
92132                                 } else {
92133                                     other.push(data[i]);
92134                                 }
92135                             }
92136                             return sameletter.concat(other);
92137                         }
92138
92139                         role.call(uiCombobox(context, 'member-role')
92140                             .fetcher(function(role, callback) {
92141                                 var rtype = d.relation.tags.type;
92142                                 taginfo.roles({
92143                                     debounce: true,
92144                                     rtype: rtype || '',
92145                                     geometry: context.geometry(_entityID),
92146                                     query: role
92147                                 }, function(err, data) {
92148                                     if (!err) callback(sort(role, data));
92149                                 });
92150                             })
92151                             .on('cancel', function() {
92152                                 role.property('value', origValue);
92153                             })
92154                         );
92155                     }
92156
92157
92158                     function unbind() {
92159                         var row = d3_select(this);
92160
92161                         row.selectAll('input.member-role')
92162                             .call(uiCombobox.off);
92163                     }
92164                 }
92165             }
92166
92167
92168             rawMembershipEditor.entityID = function(val) {
92169                 if (!arguments.length) return _entityID;
92170                 _entityID = val;
92171                 _showBlank = false;
92172                 return rawMembershipEditor;
92173             };
92174
92175
92176             return rawMembershipEditor;
92177         }
92178
92179         // This currently only works with the 'restrictions' field
92180         // It borrows some code from uiHelp
92181
92182         function uiFieldHelp(context, fieldName) {
92183             var fieldHelp = {};
92184             var _inspector = d3_select(null);
92185             var _wrap = d3_select(null);
92186             var _body = d3_select(null);
92187
92188             var fieldHelpKeys = {
92189                 restrictions: [
92190                     ['about',[
92191                         'about',
92192                         'from_via_to',
92193                         'maxdist',
92194                         'maxvia'
92195                     ]],
92196                     ['inspecting',[
92197                         'about',
92198                         'from_shadow',
92199                         'allow_shadow',
92200                         'restrict_shadow',
92201                         'only_shadow',
92202                         'restricted',
92203                         'only'
92204                     ]],
92205                     ['modifying',[
92206                         'about',
92207                         'indicators',
92208                         'allow_turn',
92209                         'restrict_turn',
92210                         'only_turn'
92211                     ]],
92212                     ['tips',[
92213                         'simple',
92214                         'simple_example',
92215                         'indirect',
92216                         'indirect_example',
92217                         'indirect_noedit'
92218                     ]]
92219                 ]
92220             };
92221
92222             var fieldHelpHeadings = {};
92223
92224             var replacements = {
92225                 distField: t('restriction.controls.distance'),
92226                 viaField: t('restriction.controls.via'),
92227                 fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
92228                 allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
92229                 restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
92230                 onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
92231                 allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
92232                 restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
92233                 onlyTurn: icon('#iD-turn-only', 'pre-text turn')
92234             };
92235
92236
92237             // For each section, squash all the texts into a single markdown document
92238             var docs = fieldHelpKeys[fieldName].map(function(key) {
92239                 var helpkey = 'help.field.' + fieldName + '.' + key[0];
92240                 var text = key[1].reduce(function(all, part) {
92241                     var subkey = helpkey + '.' + part;
92242                     var depth = fieldHelpHeadings[subkey];                     // is this subkey a heading?
92243                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
92244                     return all + hhh + t(subkey, replacements) + '\n\n';
92245                 }, '');
92246
92247                 return {
92248                     key: helpkey,
92249                     title: t(helpkey + '.title'),
92250                     html: marked(text.trim())
92251                 };
92252             });
92253
92254
92255             function show() {
92256                 updatePosition();
92257
92258                 _body
92259                     .classed('hide', false)
92260                     .style('opacity', '0')
92261                     .transition()
92262                     .duration(200)
92263                     .style('opacity', '1');
92264             }
92265
92266
92267             function hide() {
92268                 _body
92269                     .classed('hide', true)
92270                     .transition()
92271                     .duration(200)
92272                     .style('opacity', '0')
92273                     .on('end', function () {
92274                         _body.classed('hide', true);
92275                     });
92276             }
92277
92278
92279             function clickHelp(index) {
92280                 var d = docs[index];
92281                 var tkeys = fieldHelpKeys[fieldName][index][1];
92282
92283                 _body.selectAll('.field-help-nav-item')
92284                     .classed('active', function(d, i) { return i === index; });
92285
92286                 var content = _body.selectAll('.field-help-content')
92287                     .html(d.html);
92288
92289                 // class the paragraphs so we can find and style them
92290                 content.selectAll('p')
92291                     .attr('class', function(d, i) { return tkeys[i]; });
92292
92293                 // insert special content for certain help sections
92294                 if (d.key === 'help.field.restrictions.inspecting') {
92295                     content
92296                         .insert('img', 'p.from_shadow')
92297                         .attr('class', 'field-help-image cf')
92298                         .attr('src', context.imagePath('tr_inspect.gif'));
92299
92300                 } else if (d.key === 'help.field.restrictions.modifying') {
92301                     content
92302                         .insert('img', 'p.allow_turn')
92303                         .attr('class', 'field-help-image cf')
92304                         .attr('src', context.imagePath('tr_modify.gif'));
92305                 }
92306             }
92307
92308
92309             fieldHelp.button = function(selection) {
92310                 if (_body.empty()) return;
92311
92312                 var button = selection.selectAll('.field-help-button')
92313                     .data([0]);
92314
92315                 // enter/update
92316                 button.enter()
92317                     .append('button')
92318                     .attr('class', 'field-help-button')
92319                     .attr('tabindex', -1)
92320                     .call(svgIcon('#iD-icon-help'))
92321                     .merge(button)
92322                     .on('click', function () {
92323                         event.stopPropagation();
92324                         event.preventDefault();
92325                         if (_body.classed('hide')) {
92326                             show();
92327                         } else {
92328                             hide();
92329                         }
92330                     });
92331             };
92332
92333
92334             function updatePosition() {
92335                 var wrap = _wrap.node();
92336                 var inspector = _inspector.node();
92337                 var wRect = wrap.getBoundingClientRect();
92338                 var iRect = inspector.getBoundingClientRect();
92339
92340                 _body
92341                     .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
92342             }
92343
92344
92345             fieldHelp.body = function(selection) {
92346                 // This control expects the field to have a form-field-input-wrap div
92347                 _wrap = selection.selectAll('.form-field-input-wrap');
92348                 if (_wrap.empty()) return;
92349
92350                 // absolute position relative to the inspector, so it "floats" above the fields
92351                 _inspector = d3_select('#sidebar .entity-editor-pane .inspector-body');
92352                 if (_inspector.empty()) return;
92353
92354                 _body = _inspector.selectAll('.field-help-body')
92355                     .data([0]);
92356
92357                 var enter = _body.enter()
92358                     .append('div')
92359                     .attr('class', 'field-help-body hide');   // initially hidden
92360
92361                 var titleEnter = enter
92362                     .append('div')
92363                     .attr('class', 'field-help-title cf');
92364
92365                 titleEnter
92366                     .append('h2')
92367                     .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
92368                     .text(t('help.field.' + fieldName + '.title'));
92369
92370                 titleEnter
92371                     .append('button')
92372                     .attr('class', 'fr close')
92373                     .on('click', function() {
92374                         event.stopPropagation();
92375                         event.preventDefault();
92376                         hide();
92377                     })
92378                     .call(svgIcon('#iD-icon-close'));
92379
92380                 var navEnter = enter
92381                     .append('div')
92382                     .attr('class', 'field-help-nav cf');
92383
92384                 var titles = docs.map(function(d) { return d.title; });
92385                 navEnter.selectAll('.field-help-nav-item')
92386                     .data(titles)
92387                     .enter()
92388                     .append('div')
92389                     .attr('class', 'field-help-nav-item')
92390                     .text(function(d) { return d; })
92391                     .on('click', function(d, i) {
92392                         event.stopPropagation();
92393                         event.preventDefault();
92394                         clickHelp(i);
92395                     });
92396
92397                 enter
92398                     .append('div')
92399                     .attr('class', 'field-help-content');
92400
92401                 _body = _body
92402                     .merge(enter);
92403
92404                 clickHelp(0);
92405             };
92406
92407
92408             return fieldHelp;
92409         }
92410
92411         function uiFieldCheck(field, context) {
92412             var dispatch$1 = dispatch('change');
92413             var options = field.strings && field.strings.options;
92414             var values = [];
92415             var texts = [];
92416
92417             var input = d3_select(null);
92418             var text = d3_select(null);
92419             var label = d3_select(null);
92420             var reverser = d3_select(null);
92421
92422             var _impliedYes;
92423             var _entityID;
92424             var _value;
92425
92426
92427             if (options) {
92428                 for (var k in options) {
92429                     values.push(k === 'undefined' ? undefined : k);
92430                     texts.push(field.t('options.' + k, { 'default': options[k] }));
92431                 }
92432             } else {
92433                 values = [undefined, 'yes'];
92434                 texts = [t('inspector.unknown'), t('inspector.check.yes')];
92435                 if (field.type !== 'defaultCheck') {
92436                     values.push('no');
92437                     texts.push(t('inspector.check.no'));
92438                 }
92439             }
92440
92441
92442             // Checks tags to see whether an undefined value is "Assumed to be Yes"
92443             function checkImpliedYes() {
92444                 _impliedYes = (field.id === 'oneway_yes');
92445
92446                 // hack: pretend `oneway` field is a `oneway_yes` field
92447                 // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
92448                 if (field.id === 'oneway') {
92449                     var entity = context.entity(_entityID);
92450                     for (var key in entity.tags) {
92451                         if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
92452                             _impliedYes = true;
92453                             texts[0] = t('presets.fields.oneway_yes.options.undefined');
92454                             break;
92455                         }
92456                     }
92457                 }
92458             }
92459
92460
92461             function reverserHidden() {
92462                 if (!d3_select('div.inspector-hover').empty()) return true;
92463                 return !(_value === 'yes' || (_impliedYes && !_value));
92464             }
92465
92466
92467             function reverserSetText(selection) {
92468                 var entity = context.hasEntity(_entityID);
92469                 if (reverserHidden() || !entity) return selection;
92470
92471                 var first = entity.first();
92472                 var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
92473                 var pseudoDirection = first < last;
92474                 var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
92475
92476                 selection.selectAll('.reverser-span')
92477                     .text(t('inspector.check.reverser'))
92478                     .call(svgIcon(icon, 'inline'));
92479
92480                 return selection;
92481             }
92482
92483
92484             var check = function(selection) {
92485                 checkImpliedYes();
92486
92487                 label = selection.selectAll('.form-field-input-wrap')
92488                     .data([0]);
92489
92490                 var enter = label.enter()
92491                     .append('label')
92492                     .attr('class', 'form-field-input-wrap form-field-input-check');
92493
92494                 enter
92495                     .append('input')
92496                     .property('indeterminate', field.type !== 'defaultCheck')
92497                     .attr('type', 'checkbox')
92498                     .attr('id', 'preset-input-' + field.safeid);
92499
92500                 enter
92501                     .append('span')
92502                     .text(texts[0])
92503                     .attr('class', 'value');
92504
92505                 if (field.type === 'onewayCheck') {
92506                     enter
92507                         .append('a')
92508                         .attr('id', 'preset-input-' + field.safeid + '-reverser')
92509                         .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
92510                         .attr('href', '#')
92511                         .append('span')
92512                         .attr('class', 'reverser-span');
92513                 }
92514
92515                 label = label.merge(enter);
92516                 input = label.selectAll('input');
92517                 text = label.selectAll('span.value');
92518
92519                 input
92520                     .on('click', function() {
92521                         event.stopPropagation();
92522                         var t = {};
92523                         t[field.key] = values[(values.indexOf(_value) + 1) % values.length];
92524
92525                         // Don't cycle through `alternating` or `reversible` states - #4970
92526                         // (They are supported as translated strings, but should not toggle with clicks)
92527                         if (t[field.key] === 'reversible' || t[field.key] === 'alternating') {
92528                             t[field.key] = values[0];
92529                         }
92530
92531                         dispatch$1.call('change', this, t);
92532                     });
92533
92534                 if (field.type === 'onewayCheck') {
92535                     reverser = label.selectAll('.reverser');
92536
92537                     reverser
92538                         .call(reverserSetText)
92539                         .on('click', function() {
92540                             event.preventDefault();
92541                             event.stopPropagation();
92542                             context.perform(
92543                                 actionReverse(_entityID),
92544                                 t('operations.reverse.annotation')
92545                             );
92546                             d3_select(this)
92547                                 .call(reverserSetText);
92548                         });
92549                 }
92550             };
92551
92552
92553             check.entity = function(_) {
92554                 if (!arguments.length) return context.hasEntity(_entityID);
92555                 _entityID = _.id;
92556                 return check;
92557             };
92558
92559
92560             check.tags = function(tags) {
92561
92562                 function isChecked(val) {
92563                     return val !== 'no' && val !== '' && val !== undefined && val !== null;
92564                 }
92565
92566                 function textFor(val) {
92567                     if (val === '') val = undefined;
92568                     var index = values.indexOf(val);
92569                     return (index !== -1 ? texts[index] : ('"' + val + '"'));
92570                 }
92571
92572                 checkImpliedYes();
92573                 _value = tags[field.key] && tags[field.key].toLowerCase();
92574
92575                 if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
92576                     _value = 'yes';
92577                 }
92578
92579                 input
92580                     .property('indeterminate', field.type !== 'defaultCheck' && !_value)
92581                     .property('checked', isChecked(_value));
92582
92583                 text
92584                     .text(textFor(_value));
92585
92586                 label
92587                     .classed('set', !!_value);
92588
92589                 if (field.type === 'onewayCheck') {
92590                     reverser
92591                         .classed('hide', reverserHidden())
92592                         .call(reverserSetText);
92593                 }
92594             };
92595
92596
92597             check.focus = function() {
92598                 input.node().focus();
92599             };
92600
92601             return utilRebind(check, dispatch$1, 'on');
92602         }
92603
92604         function uiFieldCombo(field, context) {
92605             var dispatch$1 = dispatch('change');
92606             var nominatim = services$1.geocoder;
92607             var taginfo = services$1.taginfo;
92608             var isMulti = (field.type === 'multiCombo');
92609             var isNetwork = (field.type === 'networkCombo');
92610             var isSemi = (field.type === 'semiCombo');
92611             var optstrings = field.strings && field.strings.options;
92612             var optarray = field.options;
92613             var snake_case = (field.snake_case || (field.snake_case === undefined));
92614             var caseSensitive = field.caseSensitive;
92615             var combobox = uiCombobox(context, 'combo-' + field.safeid)
92616                 .caseSensitive(caseSensitive)
92617                 .minItems(isMulti || isSemi ? 1 : 2);
92618             var container = d3_select(null);
92619             var inputWrap = d3_select(null);
92620             var input = d3_select(null);
92621             var _comboData = [];
92622             var _multiData = [];
92623             var _entity;
92624             var _country;
92625
92626             // ensure multiCombo field.key ends with a ':'
92627             if (isMulti && /[^:]$/.test(field.key)) {
92628                 field.key += ':';
92629             }
92630
92631
92632             function snake(s) {
92633                 return s.replace(/\s+/g, '_');
92634             }
92635
92636             function unsnake(s) {
92637                 return s.replace(/_+/g, ' ');
92638             }
92639
92640             function clean(s) {
92641                 return s.split(';')
92642                     .map(function(s) { return s.trim(); })
92643                     .join(';');
92644             }
92645
92646
92647             // returns the tag value for a display value
92648             // (for multiCombo, dval should be the key suffix, not the entire key)
92649             function tagValue(dval) {
92650                 dval = clean(dval || '');
92651
92652                 if (optstrings) {
92653                     var found = _comboData.find(function(o) {
92654                         return o.key && clean(o.value) === dval;
92655                     });
92656                     if (found) {
92657                         return found.key;
92658                     }
92659                 }
92660
92661                 if (field.type === 'typeCombo' && !dval) {
92662                     return 'yes';
92663                 }
92664
92665                 return (snake_case ? snake(dval) : dval) || undefined;
92666             }
92667
92668
92669             // returns the display value for a tag value
92670             // (for multiCombo, tval should be the key suffix, not the entire key)
92671             function displayValue(tval) {
92672                 tval = tval || '';
92673
92674                 if (optstrings) {
92675                     var found = _comboData.find(function(o) {
92676                         return o.key === tval && o.value;
92677                     });
92678                     if (found) {
92679                         return found.value;
92680                     }
92681                 }
92682
92683                 if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
92684                     return '';
92685                 }
92686
92687                 return snake_case ? unsnake(tval) : tval;
92688             }
92689
92690
92691             // Compute the difference between arrays of objects by `value` property
92692             //
92693             // objectDifference([{value:1}, {value:2}, {value:3}], [{value:2}])
92694             // > [{value:1}, {value:3}]
92695             //
92696             function objectDifference(a, b) {
92697                 return a.filter(function(d1) {
92698                     return !b.some(function(d2) { return d1.value === d2.value; });
92699                 });
92700             }
92701
92702
92703             function initCombo(selection, attachTo) {
92704                 if (optstrings) {
92705                     selection.attr('readonly', 'readonly');
92706                     selection.call(combobox, attachTo);
92707                     setStaticValues(setPlaceholder);
92708
92709                 } else if (optarray) {
92710                     selection.call(combobox, attachTo);
92711                     setStaticValues(setPlaceholder);
92712
92713                 } else if (taginfo) {
92714                     selection.call(combobox.fetcher(setTaginfoValues), attachTo);
92715                     setTaginfoValues('', setPlaceholder);
92716                 }
92717             }
92718
92719
92720             function setStaticValues(callback) {
92721                 if (!(optstrings || optarray)) return;
92722
92723                 if (optstrings) {
92724                     _comboData = Object.keys(optstrings).map(function(k) {
92725                         var v = field.t('options.' + k, { 'default': optstrings[k] });
92726                         return {
92727                             key: k,
92728                             value: v,
92729                             title: v
92730                         };
92731                     });
92732
92733                 } else if (optarray) {
92734                     _comboData = optarray.map(function(k) {
92735                         var v = snake_case ? unsnake(k) : k;
92736                         return {
92737                             key: k,
92738                             value: v,
92739                             title: v
92740                         };
92741                     });
92742                 }
92743
92744                 combobox.data(objectDifference(_comboData, _multiData));
92745                 if (callback) callback(_comboData);
92746             }
92747
92748
92749             function setTaginfoValues(q, callback) {
92750                 var fn = isMulti ? 'multikeys' : 'values';
92751                 var query = (isMulti ? field.key : '') + q;
92752                 var hasCountryPrefix = isNetwork && _country && _country.indexOf(q.toLowerCase()) === 0;
92753                 if (hasCountryPrefix) {
92754                     query = _country + ':';
92755                 }
92756
92757                 var params = {
92758                     debounce: (q !== ''),
92759                     key: field.key,
92760                     query: query
92761                 };
92762
92763                 if (_entity) {
92764                     params.geometry = context.geometry(_entity.id);
92765                 }
92766
92767                 taginfo[fn](params, function(err, data) {
92768                     if (err) return;
92769
92770                     var deprecatedValues = osmEntity.deprecatedTagValuesByKey()[field.key];
92771                     if (deprecatedValues) {
92772                         // don't suggest deprecated tag values
92773                         data = data.filter(function(d) {
92774                             return deprecatedValues.indexOf(d.value) === -1;
92775                         });
92776                     }
92777
92778                     if (hasCountryPrefix) {
92779                         data = data.filter(function(d) {
92780                             return d.value.toLowerCase().indexOf(_country + ':') === 0;
92781                         });
92782                     }
92783
92784                     // hide the caret if there are no suggestions
92785                     container.classed('empty-combobox', data.length === 0);
92786
92787                     _comboData = data.map(function(d) {
92788                         var k = d.value;
92789                         if (isMulti) k = k.replace(field.key, '');
92790                         var v = snake_case ? unsnake(k) : k;
92791                         return {
92792                             key: k,
92793                             value: v,
92794                             title: isMulti ? v : d.title
92795                         };
92796                     });
92797
92798                     _comboData = objectDifference(_comboData, _multiData);
92799                     if (callback) callback(_comboData);
92800                 });
92801             }
92802
92803
92804             function setPlaceholder(values) {
92805                 var ph;
92806
92807                 if (isMulti || isSemi) {
92808                     ph = field.placeholder() || t('inspector.add');
92809                 } else {
92810                     var vals = values
92811                         .map(function(d) { return d.value; })
92812                         .filter(function(s) { return s.length < 20; });
92813
92814                     var placeholders = vals.length > 1 ? vals : values.map(function(d) { return d.key; });
92815                     ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
92816                 }
92817
92818                 if (!/(…|\.\.\.)$/.test(ph)) {
92819                     ph += '…';
92820                 }
92821
92822                 container.selectAll('input')
92823                     .attr('placeholder', ph);
92824             }
92825
92826
92827             function change() {
92828                 var t = {};
92829                 var val;
92830
92831                 if (isMulti || isSemi) {
92832                     val = tagValue(utilGetSetValue(input).replace(/,/g, ';')) || '';
92833                     container.classed('active', false);
92834                     utilGetSetValue(input, '');
92835
92836                     var vals = val.split(';').filter(Boolean);
92837                     if (!vals.length) return;
92838
92839                     if (isMulti) {
92840                         utilArrayUniq(vals).forEach(function(v) {
92841                             var key = field.key + v;
92842                             if (_entity) {
92843                                 // don't set a multicombo value to 'yes' if it already has a non-'no' value
92844                                 // e.g. `language:de=main`
92845                                 var old = _entity.tags[key] || '';
92846                                 if (old && old.toLowerCase() !== 'no') return;
92847                             }
92848                             field.keys.push(key);
92849                             t[key] = 'yes';
92850                         });
92851
92852                     } else if (isSemi) {
92853                         var arr = _multiData.map(function(d) { return d.key; });
92854                         arr = arr.concat(vals);
92855                         t[field.key] = utilArrayUniq(arr).filter(Boolean).join(';');
92856                     }
92857
92858                     window.setTimeout(function() { input.node().focus(); }, 10);
92859
92860                 } else {
92861                     val = tagValue(utilGetSetValue(input));
92862                     t[field.key] = val;
92863                 }
92864
92865                 dispatch$1.call('change', this, t);
92866             }
92867
92868
92869             function removeMultikey(d) {
92870                 event.stopPropagation();
92871                 var t = {};
92872                 if (isMulti) {
92873                     t[d.key] = undefined;
92874                 } else if (isSemi) {
92875                     var arr = _multiData.map(function(md) {
92876                         return md.key === d.key ? null : md.key;
92877                     }).filter(Boolean);
92878
92879                     arr = utilArrayUniq(arr);
92880                     t[field.key] = arr.length ? arr.join(';') : undefined;
92881                 }
92882                 dispatch$1.call('change', this, t);
92883             }
92884
92885
92886             function combo(selection) {
92887                 container = selection.selectAll('.form-field-input-wrap')
92888                     .data([0]);
92889
92890                 var type = (isMulti || isSemi) ? 'multicombo': 'combo';
92891                 container = container.enter()
92892                     .append('div')
92893                     .attr('class', 'form-field-input-wrap form-field-input-' + type)
92894                     .merge(container);
92895
92896                 if (isMulti || isSemi) {
92897                     container = container.selectAll('.chiplist')
92898                         .data([0]);
92899
92900                     var listClass = 'chiplist';
92901
92902                     // Use a separate line for each value in the Destinations field
92903                     // to mimic highway exit signs
92904                     if (field.id === 'destination_oneway') {
92905                         listClass += ' full-line-chips';
92906                     }
92907
92908                     container = container.enter()
92909                         .append('ul')
92910                         .attr('class', listClass)
92911                         .on('click', function() {
92912                             window.setTimeout(function() { input.node().focus(); }, 10);
92913                         })
92914                         .merge(container);
92915
92916
92917                     inputWrap = container.selectAll('.input-wrap')
92918                         .data([0]);
92919
92920                     inputWrap = inputWrap.enter()
92921                         .append('li')
92922                         .attr('class', 'input-wrap')
92923                         .merge(inputWrap);
92924
92925                     input = inputWrap.selectAll('input')
92926                         .data([0]);
92927                 } else {
92928                     input = container.selectAll('input')
92929                         .data([0]);
92930                 }
92931
92932                 input = input.enter()
92933                     .append('input')
92934                     .attr('type', 'text')
92935                     .attr('id', 'preset-input-' + field.safeid)
92936                     .call(utilNoAuto)
92937                     .call(initCombo, selection)
92938                     .merge(input);
92939
92940                 if (isNetwork && nominatim && _entity) {
92941                     var center = _entity.extent(context.graph()).center();
92942                     nominatim.countryCode(center, function (err, code) {
92943                         _country = code;
92944                     });
92945                 }
92946
92947                 input
92948                     .on('change', change)
92949                     .on('blur', change);
92950
92951                 input
92952                     .on('keydown.field', function() {
92953                         switch (event.keyCode) {
92954                             case 13: // ↩ Return
92955                                 input.node().blur(); // blurring also enters the value
92956                                 event.stopPropagation();
92957                                 break;
92958                         }
92959                     });
92960
92961                 if (isMulti || isSemi) {
92962                     combobox
92963                         .on('accept', function() {
92964                             input.node().blur();
92965                             input.node().focus();
92966                         });
92967
92968                     input
92969                         .on('focus', function() { container.classed('active', true); });
92970                 }
92971             }
92972
92973
92974             combo.tags = function(tags) {
92975                 if (isMulti || isSemi) {
92976                     _multiData = [];
92977
92978                     if (isMulti) {
92979                         // Build _multiData array containing keys already set..
92980                         for (var k in tags) {
92981                             if (k.indexOf(field.key) !== 0) continue;
92982                             var v = (tags[k] || '').toLowerCase();
92983                             if (v === '' || v === 'no') continue;
92984
92985                             var suffix = k.substring(field.key.length);
92986                             _multiData.push({
92987                                 key: k,
92988                                 value: displayValue(suffix)
92989                             });
92990                         }
92991
92992                         // Set keys for form-field modified (needed for undo and reset buttons)..
92993                         field.keys = _multiData.map(function(d) { return d.key; });
92994
92995                     } else if (isSemi) {
92996                         var arr = utilArrayUniq((tags[field.key] || '').split(';')).filter(Boolean);
92997                         _multiData = arr.map(function(k) {
92998                             return {
92999                                 key: k,
93000                                 value: displayValue(k)
93001                             };
93002                         });
93003                     }
93004
93005                     // Exclude existing multikeys from combo options..
93006                     var available = objectDifference(_comboData, _multiData);
93007                     combobox.data(available);
93008
93009                     // Hide 'Add' button if this field uses fixed set of
93010                     // translateable optstrings and they're all currently used..
93011                     container.selectAll('.combobox-input, .combobox-caret')
93012                         .classed('hide', optstrings && !available.length);
93013
93014
93015                     // Render chips
93016                     var chips = container.selectAll('.chips')
93017                         .data(_multiData);
93018
93019                     chips.exit()
93020                         .remove();
93021
93022                     var enter = chips.enter()
93023                         .insert('li', '.input-wrap')
93024                         .attr('class', 'chips');
93025
93026                     enter.append('span');
93027                     enter.append('a');
93028
93029                     chips = chips.merge(enter);
93030
93031                     chips.select('span')
93032                         .text(function(d) { return d.value; });
93033
93034                     chips.select('a')
93035                         .on('click', removeMultikey)
93036                         .attr('class', 'remove')
93037                         .text('×');
93038
93039                 } else {
93040                     utilGetSetValue(input, displayValue(tags[field.key]));
93041                 }
93042             };
93043
93044
93045             combo.focus = function() {
93046                 input.node().focus();
93047             };
93048
93049
93050             combo.entity = function(val) {
93051                 if (!arguments.length) return _entity;
93052                 _entity = val;
93053                 return combo;
93054             };
93055
93056
93057             return utilRebind(combo, dispatch$1, 'on');
93058         }
93059
93060         function uiFieldText(field, context) {
93061             var dispatch$1 = dispatch('change');
93062             var nominatim = services$1.geocoder;
93063             var input = d3_select(null);
93064             var _entity;
93065
93066             function i(selection) {
93067                 var preset = _entity && context.presets().match(_entity, context.graph());
93068                 var isLocked = preset && preset.suggestion && field.id === 'brand';
93069                 field.locked(isLocked);
93070
93071                 var wrap = selection.selectAll('.form-field-input-wrap')
93072                     .data([0]);
93073
93074                 wrap = wrap.enter()
93075                     .append('div')
93076                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93077                     .merge(wrap);
93078
93079                 var fieldID = 'preset-input-' + field.safeid;
93080
93081                 input = wrap.selectAll('input')
93082                     .data([0]);
93083
93084                 input = input.enter()
93085                     .append('input')
93086                     .attr('type', field.type)
93087                     .attr('id', fieldID)
93088                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
93089                     .classed(field.type, true)
93090                     .call(utilNoAuto)
93091                     .merge(input);
93092
93093                 input
93094                     .classed('disabled', !!isLocked)
93095                     .attr('readonly', isLocked || null)
93096                     .on('input', change(true))
93097                     .on('blur', change())
93098                     .on('change', change());
93099
93100
93101                 if (field.type === 'tel' && nominatim && _entity) {
93102                     var center = _entity.extent(context.graph()).center();
93103                     nominatim.countryCode(center, function (err, countryCode) {
93104                         if (err || !dataPhoneFormats[countryCode]) return;
93105                         wrap.selectAll('#' + fieldID)
93106                             .attr('placeholder', dataPhoneFormats[countryCode]);
93107                     });
93108
93109                 } else if (field.type === 'number') {
93110                     var rtl = (textDirection === 'rtl');
93111
93112                     input.attr('type', 'text');
93113
93114                     var buttons = wrap.selectAll('.increment, .decrement')
93115                         .data(rtl ? [1, -1] : [-1, 1]);
93116
93117                     buttons.enter()
93118                         .append('button')
93119                         .attr('tabindex', -1)
93120                         .attr('class', function(d) {
93121                             var which = (d === 1 ? 'increment' : 'decrement');
93122                             return 'form-field-button ' + which;
93123                         })
93124                         .merge(buttons)
93125                         .on('click', function(d) {
93126                             event.preventDefault();
93127                             var raw_vals = input.node().value || '0';
93128                             var vals = raw_vals.split(';');
93129                             vals = vals.map(function(v) {
93130                                 var num = parseFloat(v.trim(), 10);
93131                                 return isFinite(num) ? clamped(num + d) : v.trim();
93132                             });
93133                             input.node().value = vals.join(';');
93134                             change()();
93135                         });
93136                 }
93137             }
93138
93139
93140             // clamp number to min/max
93141             function clamped(num) {
93142                 if (field.minValue !== undefined) {
93143                     num = Math.max(num, field.minValue);
93144                 }
93145                 if (field.maxValue !== undefined) {
93146                     num = Math.min(num, field.maxValue);
93147                 }
93148                 return num;
93149             }
93150
93151
93152             function change(onInput) {
93153                 return function() {
93154                     var t = {};
93155                     var val = utilGetSetValue(input).trim() || undefined;
93156
93157                     if (!onInput) {
93158                         if (field.type === 'number' && val !== undefined) {
93159                             var vals = val.split(';');
93160                             vals = vals.map(function(v) {
93161                                 var num = parseFloat(v.trim(), 10);
93162                                 return isFinite(num) ? clamped(num) : v.trim();
93163                             });
93164                             val = vals.join(';');
93165                         }
93166                         utilGetSetValue(input, val || '');
93167                     }
93168                     t[field.key] = val;
93169                     dispatch$1.call('change', this, t, onInput);
93170                 };
93171             }
93172
93173
93174             i.entity = function(val) {
93175                 if (!arguments.length) return _entity;
93176                 _entity = val;
93177                 return i;
93178             };
93179
93180
93181             i.tags = function(tags) {
93182                 utilGetSetValue(input, tags[field.key] || '');
93183             };
93184
93185
93186             i.focus = function() {
93187                 var node = input.node();
93188                 if (node) node.focus();
93189             };
93190
93191             return utilRebind(i, dispatch$1, 'on');
93192         }
93193
93194         function uiFieldAccess(field, context) {
93195             var dispatch$1 = dispatch('change');
93196             var items = d3_select(null);
93197
93198             function access(selection) {
93199                 var wrap = selection.selectAll('.form-field-input-wrap')
93200                     .data([0]);
93201
93202                 wrap = wrap.enter()
93203                     .append('div')
93204                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93205                     .merge(wrap);
93206
93207                 var list = wrap.selectAll('ul')
93208                     .data([0]);
93209
93210                 list = list.enter()
93211                     .append('ul')
93212                     .attr('class', 'rows')
93213                     .merge(list);
93214
93215
93216                 items = list.selectAll('li')
93217                     .data(field.keys);
93218
93219                 // Enter
93220                 var enter = items.enter()
93221                     .append('li')
93222                     .attr('class', function(d) { return 'labeled-input preset-access-' + d; });
93223
93224                 enter
93225                     .append('span')
93226                     .attr('class', 'label preset-label-access')
93227                     .attr('for', function(d) { return 'preset-input-access-' + d; })
93228                     .text(function(d) { return field.t('types.' + d); });
93229
93230                 enter
93231                     .append('div')
93232                     .attr('class', 'preset-input-access-wrap')
93233                     .append('input')
93234                     .attr('type', 'text')
93235                     .attr('class', function(d) { return 'preset-input-access preset-input-access-' + d; })
93236                     .call(utilNoAuto)
93237                     .each(function(d) {
93238                         d3_select(this)
93239                             .call(uiCombobox(context, 'access-' + d)
93240                                 .data(access.options(d))
93241                             );
93242                     });
93243
93244
93245                 // Update
93246                 items = items.merge(enter);
93247
93248                 wrap.selectAll('.preset-input-access')
93249                     .on('change', change)
93250                     .on('blur', change);
93251             }
93252
93253
93254             function change(d) {
93255                 var tag = {};
93256                 tag[d] = utilGetSetValue(d3_select(this)) || undefined;
93257                 dispatch$1.call('change', this, tag);
93258             }
93259
93260
93261             access.options = function(type) {
93262                 var options = ['no', 'permissive', 'private', 'permit', 'destination'];
93263
93264                 if (type !== 'access') {
93265                     options.unshift('yes');
93266                     options.push('designated');
93267
93268                     if (type === 'bicycle') {
93269                         options.push('dismount');
93270                     }
93271                 }
93272
93273                 return options.map(function(option) {
93274                     return {
93275                         title: field.t('options.' + option + '.description'),
93276                         value: option
93277                     };
93278                 });
93279             };
93280
93281
93282             var placeholders = {
93283                 footway: {
93284                     foot: 'designated',
93285                     motor_vehicle: 'no'
93286                 },
93287                 steps: {
93288                     foot: 'yes',
93289                     motor_vehicle: 'no',
93290                     bicycle: 'no',
93291                     horse: 'no'
93292                 },
93293                 pedestrian: {
93294                     foot: 'yes',
93295                     motor_vehicle: 'no'
93296                 },
93297                 cycleway: {
93298                     motor_vehicle: 'no',
93299                     bicycle: 'designated'
93300                 },
93301                 bridleway: {
93302                     motor_vehicle: 'no',
93303                     horse: 'designated'
93304                 },
93305                 path: {
93306                     foot: 'yes',
93307                     motor_vehicle: 'no',
93308                     bicycle: 'yes',
93309                     horse: 'yes'
93310                 },
93311                 motorway: {
93312                     foot: 'no',
93313                     motor_vehicle: 'yes',
93314                     bicycle: 'no',
93315                     horse: 'no'
93316                 },
93317                 trunk: {
93318                     motor_vehicle: 'yes'
93319                 },
93320                 primary: {
93321                     foot: 'yes',
93322                     motor_vehicle: 'yes',
93323                     bicycle: 'yes',
93324                     horse: 'yes'
93325                 },
93326                 secondary: {
93327                     foot: 'yes',
93328                     motor_vehicle: 'yes',
93329                     bicycle: 'yes',
93330                     horse: 'yes'
93331                 },
93332                 tertiary: {
93333                     foot: 'yes',
93334                     motor_vehicle: 'yes',
93335                     bicycle: 'yes',
93336                     horse: 'yes'
93337                 },
93338                 residential: {
93339                     foot: 'yes',
93340                     motor_vehicle: 'yes',
93341                     bicycle: 'yes',
93342                     horse: 'yes'
93343                 },
93344                 unclassified: {
93345                     foot: 'yes',
93346                     motor_vehicle: 'yes',
93347                     bicycle: 'yes',
93348                     horse: 'yes'
93349                 },
93350                 service: {
93351                     foot: 'yes',
93352                     motor_vehicle: 'yes',
93353                     bicycle: 'yes',
93354                     horse: 'yes'
93355                 },
93356                 motorway_link: {
93357                     foot: 'no',
93358                     motor_vehicle: 'yes',
93359                     bicycle: 'no',
93360                     horse: 'no'
93361                 },
93362                 trunk_link: {
93363                     motor_vehicle: 'yes'
93364                 },
93365                 primary_link: {
93366                     foot: 'yes',
93367                     motor_vehicle: 'yes',
93368                     bicycle: 'yes',
93369                     horse: 'yes'
93370                 },
93371                 secondary_link: {
93372                     foot: 'yes',
93373                     motor_vehicle: 'yes',
93374                     bicycle: 'yes',
93375                     horse: 'yes'
93376                 },
93377                 tertiary_link: {
93378                     foot: 'yes',
93379                     motor_vehicle: 'yes',
93380                     bicycle: 'yes',
93381                     horse: 'yes'
93382                 }
93383             };
93384
93385
93386             access.tags = function(tags) {
93387                 utilGetSetValue(items.selectAll('.preset-input-access'),
93388                     function(d) { return tags[d] || ''; })
93389                     .attr('placeholder', function() {
93390                         return tags.access ? tags.access : field.placeholder();
93391                     });
93392
93393                 items.selectAll('.preset-input-access-access')
93394                     .attr('placeholder', 'yes');
93395
93396                 var which = tags.highway;
93397                 if (!placeholders[which]) return;
93398
93399                 var keys = Object.keys(placeholders[which]);
93400                 keys.forEach(function(k) {
93401                     var v = placeholders[which][k];
93402                     items.selectAll('.preset-input-access-' + k)
93403                         .attr('placeholder', tags.access || v);
93404                 });
93405             };
93406
93407
93408             access.focus = function() {
93409                 items.selectAll('.preset-input-access')
93410                     .node().focus();
93411             };
93412
93413
93414             return utilRebind(access, dispatch$1, 'on');
93415         }
93416
93417         function uiFieldAddress(field, context) {
93418             var dispatch$1 = dispatch('init', 'change');
93419             var nominatim = services$1.geocoder;
93420             var wrap = d3_select(null);
93421             var _isInitialized = false;
93422             var _entity;
93423             // needed for placeholder strings
93424             var addrField = context.presets().field('address');
93425
93426             function getNearStreets() {
93427                 var extent = _entity.extent(context.graph());
93428                 var l = extent.center();
93429                 var box = geoExtent(l).padByMeters(200);
93430
93431                 var streets = context.intersects(box)
93432                     .filter(isAddressable)
93433                     .map(function(d) {
93434                         var loc = context.projection([
93435                             (extent[0][0] + extent[1][0]) / 2,
93436                             (extent[0][1] + extent[1][1]) / 2
93437                         ]);
93438                         var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
93439
93440                         return {
93441                             title: d.tags.name,
93442                             value: d.tags.name,
93443                             dist: choice.distance
93444                         };
93445                     })
93446                     .sort(function(a, b) {
93447                         return a.dist - b.dist;
93448                     });
93449
93450                 return utilArrayUniqBy(streets, 'value');
93451
93452                 function isAddressable(d) {
93453                     return d.tags.highway && d.tags.name && d.type === 'way';
93454                 }
93455             }
93456
93457
93458             function getNearCities() {
93459                 var extent = _entity.extent(context.graph());
93460                 var l = extent.center();
93461                 var box = geoExtent(l).padByMeters(200);
93462
93463                 var cities = context.intersects(box)
93464                     .filter(isAddressable)
93465                     .map(function(d) {
93466                         return {
93467                             title: d.tags['addr:city'] || d.tags.name,
93468                             value: d.tags['addr:city'] || d.tags.name,
93469                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
93470                         };
93471                     })
93472                     .sort(function(a, b) {
93473                         return a.dist - b.dist;
93474                     });
93475
93476                 return utilArrayUniqBy(cities, 'value');
93477
93478
93479                 function isAddressable(d) {
93480                     if (d.tags.name) {
93481                         if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
93482                             return true;
93483                         if (d.tags.border_type === 'city')
93484                             return true;
93485                         if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
93486                             return true;
93487                     }
93488
93489                     if (d.tags['addr:city'])
93490                         return true;
93491
93492                     return false;
93493                 }
93494             }
93495
93496             function getNearValues(key) {
93497                 var extent = _entity.extent(context.graph());
93498                 var l = extent.center();
93499                 var box = geoExtent(l).padByMeters(200);
93500
93501                 var results = context.intersects(box)
93502                     .filter(function hasTag(d) { return d.id !== _entity.id && d.tags[key]; })
93503                     .map(function(d) {
93504                         return {
93505                             title: d.tags[key],
93506                             value: d.tags[key],
93507                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
93508                         };
93509                     })
93510                     .sort(function(a, b) {
93511                         return a.dist - b.dist;
93512                     });
93513
93514                 return utilArrayUniqBy(results, 'value');
93515             }
93516
93517
93518             function countryCallback(err, countryCode) {
93519                 if (err) return;
93520                 countryCode = countryCode.toLowerCase();
93521
93522                 var addressFormat;
93523                 for (var i = 0; i < dataAddressFormats.length; i++) {
93524                     var format = dataAddressFormats[i];
93525                     if (!format.countryCodes) {
93526                         addressFormat = format;   // choose the default format, keep going
93527                     } else if (format.countryCodes.indexOf(countryCode) !== -1) {
93528                         addressFormat = format;   // choose the country format, stop here
93529                         break;
93530                     }
93531                 }
93532
93533                 var dropdowns = addressFormat.dropdowns || [
93534                     'city', 'county', 'country', 'district', 'hamlet',
93535                     'neighbourhood', 'place', 'postcode', 'province',
93536                     'quarter', 'state', 'street', 'subdistrict', 'suburb'
93537                 ];
93538
93539                 var widths = addressFormat.widths || {
93540                     housenumber: 1/3, street: 2/3,
93541                     city: 2/3, state: 1/4, postcode: 1/3
93542                 };
93543
93544                 function row(r) {
93545                     // Normalize widths.
93546                     var total = r.reduce(function(sum, key) {
93547                         return sum + (widths[key] || 0.5);
93548                     }, 0);
93549
93550                     return r.map(function(key) {
93551                         return {
93552                             id: key,
93553                             width: (widths[key] || 0.5) / total
93554                         };
93555                     });
93556                 }
93557
93558                 wrap.selectAll('.addr-row')
93559                     .data(addressFormat.format)
93560                     .enter()
93561                     .append('div')
93562                     .attr('class', 'addr-row')
93563                     .selectAll('input')
93564                     .data(row)
93565                     .enter()
93566                     .append('input')
93567                     .property('type', 'text')
93568                     .attr('placeholder', function (d) {
93569                         var localkey = d.id + '!' + countryCode;
93570                         var tkey = addrField.strings.placeholders[localkey] ? localkey : d.id;
93571                         return addrField.t('placeholders.' + tkey);
93572                     })
93573                     .attr('class', function (d) { return 'addr-' + d.id; })
93574                     .call(utilNoAuto)
93575                     .each(addDropdown)
93576                     .style('width', function (d) { return d.width * 100 + '%'; });
93577
93578
93579                 function addDropdown(d) {
93580                     if (dropdowns.indexOf(d.id) === -1) return;  // not a dropdown
93581
93582                     var nearValues = (d.id === 'street') ? getNearStreets
93583                         : (d.id === 'city') ? getNearCities
93584                         : getNearValues;
93585
93586                     d3_select(this)
93587                         .call(uiCombobox(context, 'address-' + d.id)
93588                             .minItems(1)
93589                             .caseSensitive(true)
93590                             .fetcher(function(value, callback) {
93591                                 callback(nearValues('addr:' + d.id));
93592                             })
93593                         );
93594                 }
93595
93596                 wrap.selectAll('input')
93597                     .on('blur', change())
93598                     .on('change', change());
93599
93600                 wrap.selectAll('input:not(.combobox-input)')
93601                     .on('input', change(true));
93602
93603                 dispatch$1.call('init');
93604                 _isInitialized = true;
93605             }
93606
93607
93608             function address(selection) {
93609                 _isInitialized = false;
93610
93611                 wrap = selection.selectAll('.form-field-input-wrap')
93612                     .data([0]);
93613
93614                 wrap = wrap.enter()
93615                     .append('div')
93616                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93617                     .merge(wrap);
93618
93619                 if (nominatim && _entity) {
93620                     var center = _entity.extent(context.graph()).center();
93621                     nominatim.countryCode(center, countryCallback);
93622                 }
93623             }
93624
93625
93626             function change(onInput) {
93627                 return function() {
93628                     var tags = {};
93629
93630                     wrap.selectAll('input')
93631                         .each(function (subfield) {
93632                             tags[field.key + ':' + subfield.id] = this.value || undefined;
93633                         });
93634
93635                     dispatch$1.call('change', this, tags, onInput);
93636                 };
93637             }
93638
93639
93640             function updateTags(tags) {
93641                 utilGetSetValue(wrap.selectAll('input'), function (subfield) {
93642                     return tags[field.key + ':' + subfield.id] || '';
93643                 });
93644             }
93645
93646
93647             address.entity = function(val) {
93648                 if (!arguments.length) return _entity;
93649                 _entity = val;
93650                 return address;
93651             };
93652
93653
93654             address.tags = function(tags) {
93655                 if (_isInitialized) {
93656                     updateTags(tags);
93657                 } else {
93658                     dispatch$1.on('init', function () {
93659                         dispatch$1.on('init', null);
93660                         updateTags(tags);
93661                     });
93662                 }
93663             };
93664
93665
93666             address.focus = function() {
93667                 var node = wrap.selectAll('input').node();
93668                 if (node) node.focus();
93669             };
93670
93671
93672             return utilRebind(address, dispatch$1, 'on');
93673         }
93674
93675         function uiFieldCycleway(field, context) {
93676             var dispatch$1 = dispatch('change');
93677             var items = d3_select(null);
93678             var wrap = d3_select(null);
93679
93680             function cycleway(selection) {
93681
93682                 function stripcolon(s) {
93683                     return s.replace(':', '');
93684                 }
93685
93686
93687                 wrap = selection.selectAll('.form-field-input-wrap')
93688                     .data([0]);
93689
93690                 wrap = wrap.enter()
93691                     .append('div')
93692                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93693                     .merge(wrap);
93694
93695
93696                 var div = wrap.selectAll('ul')
93697                     .data([0]);
93698
93699                 div = div.enter()
93700                     .append('ul')
93701                     .attr('class', 'rows')
93702                     .merge(div);
93703
93704                 var keys = ['cycleway:left', 'cycleway:right'];
93705
93706                 items = div.selectAll('li')
93707                     .data(keys);
93708
93709                 var enter = items.enter()
93710                     .append('li')
93711                     .attr('class', function(d) { return 'labeled-input preset-cycleway-' + stripcolon(d); });
93712
93713                 enter
93714                     .append('span')
93715                     .attr('class', 'label preset-label-cycleway')
93716                     .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
93717                     .text(function(d) { return field.t('types.' + d); });
93718
93719                 enter
93720                     .append('div')
93721                     .attr('class', 'preset-input-cycleway-wrap')
93722                     .append('input')
93723                     .attr('type', 'text')
93724                     .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
93725                     .call(utilNoAuto)
93726                     .each(function(d) {
93727                         d3_select(this)
93728                             .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
93729                                 .data(cycleway.options(d))
93730                             );
93731                     });
93732
93733                 items = items.merge(enter);
93734
93735                 // Update
93736                 wrap.selectAll('.preset-input-cycleway')
93737                     .on('change', change)
93738                     .on('blur', change);
93739             }
93740
93741
93742             function change() {
93743                 var left = utilGetSetValue(d3_select('.preset-input-cyclewayleft'));
93744                 var right = utilGetSetValue(d3_select('.preset-input-cyclewayright'));
93745                 var tag = {};
93746
93747                 if (left === 'none' || left === '') { left = undefined; }
93748                 if (right === 'none' || right === '') { right = undefined; }
93749
93750                 // Always set both left and right as changing one can affect the other
93751                 tag = {
93752                     cycleway: undefined,
93753                     'cycleway:left': left,
93754                     'cycleway:right': right
93755                 };
93756
93757                 // If the left and right tags match, use the cycleway tag to tag both
93758                 // sides the same way
93759                 if (left === right) {
93760                     tag = {
93761                         cycleway: left,
93762                         'cycleway:left': undefined,
93763                         'cycleway:right': undefined
93764                     };
93765                 }
93766
93767                 dispatch$1.call('change', this, tag);
93768             }
93769
93770
93771             cycleway.options = function() {
93772                 return Object.keys(field.strings.options).map(function(option) {
93773                     return {
93774                         title: field.t('options.' + option + '.description'),
93775                         value: option
93776                     };
93777                 });
93778             };
93779
93780
93781             cycleway.tags = function(tags) {
93782                 utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
93783                         // If cycleway is set, always return that
93784                         if (tags.cycleway) {
93785                             return tags.cycleway;
93786                         }
93787                         return tags[d] || '';
93788                     })
93789                     .attr('placeholder', field.placeholder());
93790             };
93791
93792
93793             cycleway.focus = function() {
93794                 var node = wrap.selectAll('input').node();
93795                 if (node) node.focus();
93796             };
93797
93798
93799             return utilRebind(cycleway, dispatch$1, 'on');
93800         }
93801
93802         function uiFieldLanes(field, context) {
93803             var dispatch$1 = dispatch('change');
93804             var LANE_WIDTH = 40;
93805             var LANE_HEIGHT = 200;
93806             var _entityID;
93807
93808             function lanes(selection) {
93809                 var lanesData = context.entity(_entityID).lanes();
93810
93811                 if (!d3_select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) {
93812                     selection.call(lanes.off);
93813                     return;
93814                 }
93815
93816                 var wrap = selection.selectAll('.form-field-input-wrap')
93817                     .data([0]);
93818
93819                 wrap = wrap.enter()
93820                     .append('div')
93821                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93822                     .merge(wrap);
93823
93824                 var surface =  wrap.selectAll('.surface')
93825                     .data([0]);
93826
93827                 var d = utilGetDimensions(wrap);
93828                 var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
93829
93830                 surface = surface.enter()
93831                     .append('svg')
93832                     .attr('width', d[0])
93833                     .attr('height', 300)
93834                     .attr('class', 'surface')
93835                     .merge(surface);
93836
93837
93838                 var lanesSelection = surface.selectAll('.lanes')
93839                     .data([0]);
93840
93841                 lanesSelection = lanesSelection.enter()
93842                     .append('g')
93843                     .attr('class', 'lanes')
93844                     .merge(lanesSelection);
93845
93846                 lanesSelection
93847                     .attr('transform', function () {
93848                         return 'translate(' + (freeSpace / 2) + ', 0)';
93849                     });
93850
93851
93852                 var lane = lanesSelection.selectAll('.lane')
93853                    .data(lanesData.lanes);
93854
93855                 lane.exit()
93856                     .remove();
93857
93858                 var enter = lane.enter()
93859                     .append('g')
93860                     .attr('class', 'lane');
93861
93862                 enter
93863                     .append('g')
93864                     .append('rect')
93865                     .attr('y', 50)
93866                     .attr('width', LANE_WIDTH)
93867                     .attr('height', LANE_HEIGHT);
93868
93869                 enter
93870                     .append('g')
93871                     .attr('class', 'forward')
93872                     .append('text')
93873                     .attr('y', 40)
93874                     .attr('x', 14)
93875                     .text('▲');
93876
93877                 enter
93878                     .append('g')
93879                     .attr('class', 'bothways')
93880                     .append('text')
93881                     .attr('y', 40)
93882                     .attr('x', 14)
93883                     .text('▲▼');
93884
93885                 enter
93886                     .append('g')
93887                     .attr('class', 'backward')
93888                     .append('text')
93889                     .attr('y', 40)
93890                     .attr('x', 14)
93891                     .text('▼');
93892
93893
93894                 lane = lane
93895                     .merge(enter);
93896
93897                 lane
93898                     .attr('transform', function(d) {
93899                         return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
93900                     });
93901
93902                 lane.select('.forward')
93903                     .style('visibility', function(d) {
93904                         return d.direction === 'forward' ? 'visible' : 'hidden';
93905                     });
93906
93907                 lane.select('.bothways')
93908                     .style('visibility', function(d) {
93909                         return d.direction === 'bothways' ? 'visible' : 'hidden';
93910                     });
93911
93912                 lane.select('.backward')
93913                     .style('visibility', function(d) {
93914                         return d.direction === 'backward' ? 'visible' : 'hidden';
93915                     });
93916             }
93917
93918
93919             lanes.entity = function(val) {
93920                 if (!_entityID || _entityID !== val.id) {
93921                     _entityID = val.id;
93922                 }
93923             };
93924
93925             lanes.tags = function() {};
93926             lanes.focus = function() {};
93927             lanes.off = function() {};
93928
93929             return utilRebind(lanes, dispatch$1, 'on');
93930         }
93931
93932         var languagesArray = [];
93933         function loadLanguagesArray() {
93934             if (languagesArray.length !== 0) return;
93935
93936             // some conversion is needed to ensure correct OSM tags are used
93937             var replacements = {
93938                 sr: 'sr-Cyrl',      // in OSM, `sr` implies Cyrillic
93939                 'sr-Cyrl': false    // `sr-Cyrl` isn't used in OSM
93940             };
93941
93942             for (var code in dataLanguages) {
93943                 if (replacements[code] === false) continue;
93944                 var metaCode = code;
93945                 if (replacements[code]) metaCode = replacements[code];
93946
93947                 languagesArray.push({
93948                     localName: languageName(metaCode, { localOnly: true }),
93949                     nativeName: dataLanguages[metaCode].nativeName,
93950                     code: code,
93951                     label: languageName(metaCode)
93952                 });
93953             }
93954         }
93955
93956
93957         function uiFieldLocalized(field, context) {
93958             var dispatch$1 = dispatch('change', 'input');
93959             var wikipedia = services$1.wikipedia;
93960             var input = d3_select(null);
93961             var localizedInputs = d3_select(null);
93962             var _countryCode;
93963
93964             var allSuggestions = context.presets().collection.filter(function(p) {
93965                 return p.suggestion === true;
93966             });
93967
93968             // reuse these combos
93969             var langCombo = uiCombobox(context, 'localized-lang')
93970                 .fetcher(fetchLanguages)
93971                 .minItems(0);
93972
93973             var brandCombo = uiCombobox(context, 'localized-brand')
93974                 .canAutocomplete(false)
93975                 .minItems(1);
93976
93977             var _selection = d3_select(null);
93978             var _multilingual = [];
93979             var _buttonTip = tooltip()
93980                 .title(t('translate.translate'))
93981                 .placement('left');
93982             var _wikiTitles;
93983             var _entity;
93984
93985
93986             function calcLocked() {
93987                 if (!_entity) {    // the original entity
93988                     field.locked(false);
93989                     return;
93990                 }
93991
93992                 var latest = context.hasEntity(_entity.id);
93993                 if (!latest) {    // get current entity, possibly edited
93994                     field.locked(false);
93995                     return;
93996                 }
93997
93998                 var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
93999                 var hasWikidata = latest.tags.wikidata || latest.tags['name:etymology:wikidata'];
94000                 var preset = context.presets().match(latest, context.graph());
94001                 var isSuggestion = preset && preset.suggestion;
94002                 var showsBrand = preset && preset.fields
94003                     .filter(function(d) { return d.id === 'brand'; }).length;
94004
94005                 var isLocked = !!(field.id === 'name' && hasOriginalName &&
94006                     (hasWikidata || (isSuggestion && !showsBrand)));
94007
94008                 field.locked(isLocked);
94009             }
94010
94011             // update _multilingual, maintaining the existing order
94012             function calcMultilingual(tags) {
94013                 var existingLangsOrdered = _multilingual.map(function(item) {
94014                     return item.lang;
94015                 });
94016                 var existingLangs = new Set(existingLangsOrdered.filter(Boolean));
94017
94018                 for (var k in tags) {
94019                     var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
94020                     if (m && m[1] === field.key && m[2]) {
94021                         var item = { lang: m[2], value: tags[k] };
94022                         if (existingLangs.has(item.lang)) {
94023                             // update the value
94024                             _multilingual[existingLangsOrdered.indexOf(item.lang)].value = item.value;
94025                             existingLangs.delete(item.lang);
94026                         } else {
94027                             _multilingual.push(item);
94028                         }
94029                     }
94030                 }
94031
94032                 _multilingual = _multilingual.filter(function(item) {
94033                     return !item.lang || !existingLangs.has(item.lang);
94034                 });
94035             }
94036
94037
94038             function localized(selection) {
94039                 // load if needed
94040                 loadLanguagesArray();
94041
94042                 _selection = selection;
94043                 calcLocked();
94044                 var isLocked = field.locked();
94045                 var entity = _entity && context.hasEntity(_entity.id);  // get latest
94046                 var preset = entity && context.presets().match(entity, context.graph());
94047
94048                 var wrap = selection.selectAll('.form-field-input-wrap')
94049                     .data([0]);
94050
94051                 // enter/update
94052                 wrap = wrap.enter()
94053                     .append('div')
94054                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94055                     .merge(wrap);
94056
94057                 input = wrap.selectAll('.localized-main')
94058                     .data([0]);
94059
94060                 // enter/update
94061                 input = input.enter()
94062                     .append('input')
94063                     .attr('type', 'text')
94064                     .attr('id', 'preset-input-' + field.safeid)
94065                     .attr('class', 'localized-main')
94066                     .attr('placeholder', field.placeholder())
94067                     .call(utilNoAuto)
94068                     .merge(input);
94069
94070                 if (preset && field.id === 'name') {
94071                     var pTag = preset.id.split('/', 2);
94072                     var pKey = pTag[0];
94073                     var pValue = pTag[1];
94074
94075                     if (!preset.suggestion) {
94076                         // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
94077                         // This code attempts to determine if the matched preset is the
94078                         // kind of preset that even can benefit from name suggestions..
94079                         // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
94080                         // - false = churches, parks, hospitals, etc. (things not in the index)
94081                         var isFallback = preset.isFallback();
94082                         var goodSuggestions = allSuggestions.filter(function(s) {
94083                             if (isFallback) return true;
94084                             var sTag = s.id.split('/', 2);
94085                             var sKey = sTag[0];
94086                             var sValue = sTag[1];
94087                             return pKey === sKey && (!pValue || pValue === sValue);
94088                         });
94089
94090                         // Show the suggestions.. If the user picks one, change the tags..
94091                         if (allSuggestions.length && goodSuggestions.length) {
94092                             input
94093                                 .on('blur.localized', checkBrandOnBlur)
94094                                 .call(brandCombo
94095                                     .fetcher(fetchBrandNames(preset, allSuggestions))
94096                                     .on('accept', acceptBrand)
94097                                     .on('cancel', cancelBrand)
94098                                 );
94099                         }
94100                     }
94101                 }
94102
94103                 input
94104                     .classed('disabled', !!isLocked)
94105                     .attr('readonly', isLocked || null)
94106                     .on('input', change(true))
94107                     .on('blur', change())
94108                     .on('change', change());
94109
94110
94111                 var translateButton = wrap.selectAll('.localized-add')
94112                     .data([0]);
94113
94114                 translateButton = translateButton.enter()
94115                     .append('button')
94116                     .attr('class', 'localized-add form-field-button')
94117                     .attr('tabindex', -1)
94118                     .call(svgIcon('#iD-icon-plus'))
94119                     .merge(translateButton);
94120
94121                 translateButton
94122                     .classed('disabled', !!isLocked)
94123                     .call(isLocked ? _buttonTip.destroy : _buttonTip)
94124                     .on('click', addNew);
94125
94126
94127                 if (entity && !_multilingual.length) {
94128                     calcMultilingual(entity.tags);
94129                 }
94130
94131                 localizedInputs = selection.selectAll('.localized-multilingual')
94132                     .data([0]);
94133
94134                 localizedInputs = localizedInputs.enter()
94135                     .append('div')
94136                     .attr('class', 'localized-multilingual')
94137                     .merge(localizedInputs);
94138
94139                 localizedInputs
94140                     .call(renderMultilingual);
94141
94142                 localizedInputs.selectAll('button, input')
94143                     .classed('disabled', !!isLocked)
94144                     .attr('readonly', isLocked || null);
94145
94146
94147
94148                 // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
94149                 // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
94150                 // So compare the current field value against the suggestions one last time.
94151                 function checkBrandOnBlur() {
94152                     var latest = context.hasEntity(_entity.id);
94153                     if (!latest) return;   // deleting the entity blurred the field?
94154
94155                     var preset = context.presets().match(latest, context.graph());
94156                     if (preset && preset.suggestion) return;   // already accepted
94157
94158                     // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
94159                     var name = utilGetSetValue(input).trim();
94160                     var matched = allSuggestions.filter(function(s) { return name === s.name(); });
94161
94162                     if (matched.length === 1) {
94163                         acceptBrand({ suggestion: matched[0] });
94164                     } else {
94165                         cancelBrand();
94166                     }
94167                 }
94168
94169
94170                 function acceptBrand(d) {
94171                     if (!d) {
94172                         cancelBrand();
94173                         return;
94174                     }
94175
94176                     var entity = context.entity(_entity.id);  // get latest
94177                     var tags = entity.tags;
94178                     var geometry = entity.geometry(context.graph());
94179                     var removed = preset.unsetTags(tags, geometry);
94180                     for (var k in tags) {
94181                         tags[k] = removed[k];  // set removed tags to `undefined`
94182                     }
94183                     tags = d.suggestion.setTags(tags, geometry);
94184                     utilGetSetValue(input, tags.name);
94185                     dispatch$1.call('change', this, tags);
94186                 }
94187
94188
94189                 // user hit escape, clean whatever preset name appears after the last ' – '
94190                 function cancelBrand() {
94191                     var name = utilGetSetValue(input);
94192                     var clean = cleanName(name);
94193                     if (clean !== name) {
94194                         utilGetSetValue(input, clean);
94195                         dispatch$1.call('change', this, { name: clean });
94196                     }
94197                 }
94198
94199                 // Remove whatever is after the last ' – '
94200                 // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
94201                 function cleanName(name) {
94202                     var parts = name.split(' – ');
94203                     if (parts.length > 1) {
94204                         parts.pop();
94205                         name = parts.join(' – ');
94206                     }
94207                     return name;
94208                 }
94209
94210
94211                 function fetchBrandNames(preset, suggestions) {
94212                     var pTag = preset.id.split('/', 2);
94213                     var pKey = pTag[0];
94214                     var pValue = pTag[1];
94215
94216                     return function(value, callback) {
94217                         var results = [];
94218                         if (value && value.length > 2) {
94219                             for (var i = 0; i < suggestions.length; i++) {
94220                                 var s = suggestions[i];
94221                                 var sTag = s.id.split('/', 2);
94222                                 var sKey = sTag[0];
94223                                 var sValue = sTag[1];
94224                                 var name = s.name();
94225                                 var dist = utilEditDistance(value, name.substring(0, value.length));
94226                                 var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
94227
94228                                 if (dist < 1 || (matchesPreset && dist < 3)) {
94229                                     var obj = {
94230                                         title: name,
94231                                         value: name,
94232                                         suggestion: s,
94233                                         dist: dist + (matchesPreset ? 0 : 1)  // penalize if not matched preset
94234                                     };
94235                                     results.push(obj);
94236                                 }
94237                             }
94238                             results.sort(function(a, b) { return a.dist - b.dist; });
94239                         }
94240                         results = results.slice(0, 10);
94241                         callback(results);
94242                     };
94243                 }
94244
94245
94246                 function addNew() {
94247                     event.preventDefault();
94248                     if (field.locked()) return;
94249
94250                     var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
94251                     var langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
94252                     var isLangEn = defaultLang.indexOf('en') > -1;
94253                     if (isLangEn || langExists) {
94254                         defaultLang = '';
94255                         langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
94256                     }
94257
94258                     if (!langExists) {
94259                         // prepend the value so it appears at the top
94260                         _multilingual.unshift({ lang: defaultLang, value: '' });
94261
94262                         localizedInputs
94263                             .call(renderMultilingual);
94264                     }
94265                 }
94266
94267
94268                 function change(onInput) {
94269                     return function() {
94270                         if (field.locked()) {
94271                             event.preventDefault();
94272                             return;
94273                         }
94274                         var t = {};
94275                         t[field.key] = utilGetSetValue(d3_select(this)) || undefined;
94276                         dispatch$1.call('change', this, t, onInput);
94277                     };
94278                 }
94279             }
94280
94281
94282             function key(lang) {
94283                 return field.key + ':' + lang;
94284             }
94285
94286
94287             function changeLang(d) {
94288                 var lang = utilGetSetValue(d3_select(this));
94289                 var t = {};
94290                 var language = languagesArray.find(function(d) {
94291                     return (d.localName && d.localName.toLowerCase() === lang.toLowerCase()) ||
94292                         d.label.toLowerCase() === lang.toLowerCase() ||
94293                         (d.nativeName && d.nativeName.toLowerCase() === lang.toLowerCase());
94294                 });
94295
94296                 if (language) lang = language.code;
94297
94298                 if (d.lang && d.lang !== lang) {
94299                     t[key(d.lang)] = undefined;
94300                 }
94301
94302                 var value = utilGetSetValue(d3_select(this.parentNode)
94303                     .selectAll('.localized-value'));
94304
94305                 if (lang && value) {
94306                     t[key(lang)] = value;
94307                 } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
94308                     t[key(lang)] = _wikiTitles[d.lang];
94309                 }
94310
94311                 d.lang = lang;
94312                 dispatch$1.call('change', this, t);
94313             }
94314
94315
94316             function changeValue(d) {
94317                 if (!d.lang) return;
94318                 var value = utilGetSetValue(d3_select(this)) || undefined;
94319                 var t = {};
94320                 t[key(d.lang)] = value;
94321                 d.value = value;
94322                 dispatch$1.call('change', this, t);
94323             }
94324
94325
94326             function fetchLanguages(value, cb) {
94327                 var v = value.toLowerCase();
94328
94329                 // show the user's language first
94330                 var langCodes = [currentLocale, currentLocale.split('-')[0]];
94331
94332                 if (_countryCode && dataTerritoryLanguages[_countryCode]) {
94333                     langCodes = langCodes.concat(dataTerritoryLanguages[_countryCode]);
94334                 }
94335
94336                 var langItems = [];
94337                 langCodes.forEach(function(code) {
94338                     var langItem = languagesArray.find(function(item) {
94339                         return item.code === code;
94340                     });
94341                     if (langItem) langItems.push(langItem);
94342                 });
94343                 langItems = utilArrayUniq(langItems.concat(languagesArray));
94344
94345                 cb(langItems.filter(function(d) {
94346                     return d.label.toLowerCase().indexOf(v) >= 0 ||
94347                         (d.localName && d.localName.toLowerCase().indexOf(v) >= 0) ||
94348                         (d.nativeName && d.nativeName.toLowerCase().indexOf(v) >= 0) ||
94349                         d.code.toLowerCase().indexOf(v) >= 0;
94350                 }).map(function(d) {
94351                     return { value: d.label };
94352                 }));
94353             }
94354
94355
94356             function renderMultilingual(selection) {
94357                 var entries = selection.selectAll('div.entry')
94358                     .data(_multilingual, function(d) { return d.lang; });
94359
94360                 entries.exit()
94361                     .style('top', '0')
94362                     .style('max-height', '240px')
94363                     .transition()
94364                     .duration(200)
94365                     .style('opacity', '0')
94366                     .style('max-height', '0px')
94367                     .remove();
94368
94369                 var entriesEnter = entries.enter()
94370                     .append('div')
94371                     .attr('class', 'entry')
94372                     .each(function() {
94373                         var wrap = d3_select(this);
94374
94375                         var label = wrap
94376                             .append('label')
94377                             .attr('class', 'field-label');
94378
94379                         var text = label
94380                             .append('span')
94381                             .attr('class', 'label-text');
94382
94383                         text
94384                             .append('span')
94385                             .attr('class', 'label-textvalue')
94386                             .text(t('translate.localized_translation_label'));
94387
94388                         text
94389                             .append('span')
94390                             .attr('class', 'label-textannotation');
94391
94392                         label
94393                             .append('button')
94394                             .attr('class', 'remove-icon-multilingual')
94395                             .on('click', function(d, index) {
94396                                 if (field.locked()) return;
94397                                 event.preventDefault();
94398
94399                                 if (!d.lang || !d.value) {
94400                                     _multilingual.splice(index, 1);
94401                                     renderMultilingual(selection);
94402                                 } else {
94403                                     // remove from entity tags
94404                                     var t = {};
94405                                     t[key(d.lang)] = undefined;
94406                                     dispatch$1.call('change', this, t);
94407                                 }
94408
94409                             })
94410                             .call(svgIcon('#iD-operation-delete'));
94411
94412                         wrap
94413                             .append('input')
94414                             .attr('class', 'localized-lang')
94415                             .attr('type', 'text')
94416                             .attr('placeholder', t('translate.localized_translation_language'))
94417                             .on('blur', changeLang)
94418                             .on('change', changeLang)
94419                             .call(langCombo);
94420
94421                         wrap
94422                             .append('input')
94423                             .attr('type', 'text')
94424                             .attr('placeholder', t('translate.localized_translation_name'))
94425                             .attr('class', 'localized-value')
94426                             .on('blur', changeValue)
94427                             .on('change', changeValue);
94428                     });
94429
94430                 entriesEnter
94431                     .style('margin-top', '0px')
94432                     .style('max-height', '0px')
94433                     .style('opacity', '0')
94434                     .transition()
94435                     .duration(200)
94436                     .style('margin-top', '10px')
94437                     .style('max-height', '240px')
94438                     .style('opacity', '1')
94439                     .on('end', function() {
94440                         d3_select(this)
94441                             .style('max-height', '')
94442                             .style('overflow', 'visible');
94443                     });
94444
94445                 entries = entries.merge(entriesEnter);
94446
94447                 entries.order();
94448
94449                 utilGetSetValue(entries.select('.localized-lang'), function(d) {
94450                     return languageName(d.lang);
94451                 });
94452
94453                 utilGetSetValue(entries.select('.localized-value'),
94454                     function(d) { return d.value; });
94455             }
94456
94457
94458             localized.tags = function(tags) {
94459                 // Fetch translations from wikipedia
94460                 if (tags.wikipedia && !_wikiTitles) {
94461                     _wikiTitles = {};
94462                     var wm = tags.wikipedia.match(/([^:]+):(.+)/);
94463                     if (wm && wm[0] && wm[1]) {
94464                         wikipedia.translations(wm[1], wm[2], function(err, d) {
94465                             if (err || !d) return;
94466                             _wikiTitles = d;
94467                         });
94468                     }
94469                 }
94470
94471                 utilGetSetValue(input, tags[field.key] || '');
94472
94473                 calcMultilingual(tags);
94474
94475                 _selection
94476                     .call(localized);
94477             };
94478
94479
94480             localized.focus = function() {
94481                 input.node().focus();
94482             };
94483
94484
94485             localized.entity = function(val) {
94486                 if (!arguments.length) return _entity;
94487                 _entity = val;
94488                 _multilingual = [];
94489                 loadCountryCode();
94490                 return localized;
94491             };
94492
94493             function loadCountryCode() {
94494                 var center = _entity.extent(context.graph()).center();
94495                 services$1.geocoder.countryCode(center, function(err, result) {
94496                     if (!err && result) {
94497                         _countryCode = result;
94498                     }
94499                 });
94500             }
94501
94502             return utilRebind(localized, dispatch$1, 'on');
94503         }
94504
94505         function uiFieldMaxspeed(field, context) {
94506             var dispatch$1 = dispatch('change');
94507             var unitInput = d3_select(null);
94508             var input = d3_select(null);
94509             var _entity;
94510             var _isImperial;
94511
94512             var speedCombo = uiCombobox(context, 'maxspeed');
94513             var unitCombo = uiCombobox(context, 'maxspeed-unit')
94514                     .data(['km/h', 'mph'].map(comboValues));
94515
94516             var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
94517             var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
94518
94519
94520             function maxspeed(selection) {
94521
94522                 var wrap = selection.selectAll('.form-field-input-wrap')
94523                     .data([0]);
94524
94525                 wrap = wrap.enter()
94526                     .append('div')
94527                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94528                     .merge(wrap);
94529
94530
94531                 input = wrap.selectAll('#preset-input-' + field.safeid)
94532                     .data([0]);
94533
94534                 input = input.enter()
94535                     .append('input')
94536                     .attr('type', 'text')
94537                     .attr('id', 'preset-input-' + field.safeid)
94538                     .attr('placeholder', field.placeholder())
94539                     .call(utilNoAuto)
94540                     .call(speedCombo)
94541                     .merge(input);
94542
94543                 input
94544                     .on('change', change)
94545                     .on('blur', change);
94546
94547                 var loc;
94548                 if (_entity.type === 'node') {
94549                     loc = _entity.loc;
94550                 } else {
94551                     var childNodes = context.graph().childNodes(context.entity(_entity.id));
94552                     loc = childNodes[~~(childNodes.length/2)].loc;
94553                 }
94554
94555                 _isImperial = dataMPH.features.some(function(f) {
94556                     return f.geometry.coordinates.some(function(d) {
94557                         return geoPointInPolygon(loc, d);
94558                     });
94559                 });
94560
94561                 unitInput = wrap.selectAll('input.maxspeed-unit')
94562                     .data([0]);
94563
94564                 unitInput = unitInput.enter()
94565                     .append('input')
94566                     .attr('type', 'text')
94567                     .attr('class', 'maxspeed-unit')
94568                     .call(unitCombo)
94569                     .merge(unitInput);
94570
94571                 unitInput
94572                     .on('blur', changeUnits)
94573                     .on('change', changeUnits);
94574
94575
94576                 function changeUnits() {
94577                     _isImperial = utilGetSetValue(unitInput) === 'mph';
94578                     utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
94579                     setSuggestions();
94580                     change();
94581                 }
94582             }
94583
94584
94585             function setSuggestions() {
94586                 speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
94587                 utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
94588             }
94589
94590
94591             function comboValues(d) {
94592                 return {
94593                     value: d.toString(),
94594                     title: d.toString()
94595                 };
94596             }
94597
94598
94599             function change() {
94600                 var tag = {};
94601                 var value = utilGetSetValue(input);
94602
94603                 if (!value) {
94604                     tag[field.key] = undefined;
94605                 } else if (isNaN(value) || !_isImperial) {
94606                     tag[field.key] = value;
94607                 } else {
94608                     tag[field.key] = value + ' mph';
94609                 }
94610
94611                 dispatch$1.call('change', this, tag);
94612             }
94613
94614
94615             maxspeed.tags = function(tags) {
94616                 var value = tags[field.key];
94617
94618                 if (value && value.indexOf('mph') >= 0) {
94619                     value = parseInt(value, 10);
94620                     _isImperial = true;
94621                 } else if (value) {
94622                     _isImperial = false;
94623                 }
94624
94625                 setSuggestions();
94626                 utilGetSetValue(input, value || '');
94627             };
94628
94629
94630             maxspeed.focus = function() {
94631                 input.node().focus();
94632             };
94633
94634
94635             maxspeed.entity = function(val) {
94636                 _entity = val;
94637             };
94638
94639
94640             return utilRebind(maxspeed, dispatch$1, 'on');
94641         }
94642
94643         function uiFieldRadio(field, context) {
94644             var dispatch$1 = dispatch('change');
94645             var placeholder = d3_select(null);
94646             var wrap = d3_select(null);
94647             var labels = d3_select(null);
94648             var radios = d3_select(null);
94649             var radioData = (field.options || field.keys).slice();  // shallow copy
94650             var typeField;
94651             var layerField;
94652             var _oldType = {};
94653             var _entity;
94654
94655
94656             function selectedKey() {
94657                 var node = wrap.selectAll('.form-field-input-radio label.active input');
94658                 return !node.empty() && node.datum();
94659             }
94660
94661
94662             function radio(selection) {
94663                 selection.classed('preset-radio', true);
94664
94665                 wrap = selection.selectAll('.form-field-input-wrap')
94666                     .data([0]);
94667
94668                 var enter = wrap.enter()
94669                     .append('div')
94670                     .attr('class', 'form-field-input-wrap form-field-input-radio');
94671
94672                 enter
94673                     .append('span')
94674                     .attr('class', 'placeholder');
94675
94676                 wrap = wrap
94677                     .merge(enter);
94678
94679
94680                 placeholder = wrap.selectAll('.placeholder');
94681
94682                 labels = wrap.selectAll('label')
94683                     .data(radioData);
94684
94685                 enter = labels.enter()
94686                     .append('label');
94687
94688                 enter
94689                     .append('input')
94690                     .attr('type', 'radio')
94691                     .attr('name', field.id)
94692                     .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
94693                     .attr('checked', false);
94694
94695                 enter
94696                     .append('span')
94697                     .text(function(d) { return field.t('options.' + d, { 'default': d }); });
94698
94699                 labels = labels
94700                     .merge(enter);
94701
94702                 radios = labels.selectAll('input')
94703                     .on('change', changeRadio);
94704
94705             }
94706
94707
94708             function structureExtras(selection, tags) {
94709                 var selected = selectedKey();
94710                 var type = context.presets().field(selected);
94711                 var layer = context.presets().field('layer');
94712                 var showLayer = (selected === 'bridge' || selected === 'tunnel');
94713
94714
94715                 var extrasWrap = selection.selectAll('.structure-extras-wrap')
94716                     .data(selected ? [0] : []);
94717
94718                 extrasWrap.exit()
94719                     .remove();
94720
94721                 extrasWrap = extrasWrap.enter()
94722                     .append('div')
94723                     .attr('class', 'structure-extras-wrap')
94724                     .merge(extrasWrap);
94725
94726                 var list = extrasWrap.selectAll('ul')
94727                     .data([0]);
94728
94729                 list = list.enter()
94730                     .append('ul')
94731                     .attr('class', 'rows')
94732                     .merge(list);
94733
94734
94735                 // Type
94736                 if (type) {
94737                     if (!typeField || typeField.id !== selected) {
94738                         typeField = uiField(context, type, _entity, { wrap: false })
94739                             .on('change', changeType);
94740                     }
94741                     typeField.tags(tags);
94742                 } else {
94743                     typeField = null;
94744                 }
94745
94746                 var typeItem = list.selectAll('.structure-type-item')
94747                     .data(typeField ? [typeField] : [], function(d) { return d.id; });
94748
94749                 // Exit
94750                 typeItem.exit()
94751                     .remove();
94752
94753                 // Enter
94754                 var typeEnter = typeItem.enter()
94755                     .insert('li', ':first-child')
94756                     .attr('class', 'labeled-input structure-type-item');
94757
94758                 typeEnter
94759                     .append('span')
94760                     .attr('class', 'label structure-label-type')
94761                     .attr('for', 'preset-input-' + selected)
94762                     .text(t('inspector.radio.structure.type'));
94763
94764                 typeEnter
94765                     .append('div')
94766                     .attr('class', 'structure-input-type-wrap');
94767
94768                 // Update
94769                 typeItem = typeItem
94770                     .merge(typeEnter);
94771
94772                 if (typeField) {
94773                     typeItem.selectAll('.structure-input-type-wrap')
94774                         .call(typeField.render);
94775                 }
94776
94777
94778                 // Layer
94779                 if (layer && showLayer) {
94780                     if (!layerField) {
94781                         layerField = uiField(context, layer, _entity, { wrap: false })
94782                             .on('change', changeLayer);
94783                     }
94784                     layerField.tags(tags);
94785                     field.keys = utilArrayUnion(field.keys, ['layer']);
94786                 } else {
94787                     layerField = null;
94788                     field.keys = field.keys.filter(function(k) { return k !== 'layer'; });
94789                 }
94790
94791                 var layerItem = list.selectAll('.structure-layer-item')
94792                     .data(layerField ? [layerField] : []);
94793
94794                 // Exit
94795                 layerItem.exit()
94796                     .remove();
94797
94798                 // Enter
94799                 var layerEnter = layerItem.enter()
94800                     .append('li')
94801                     .attr('class', 'labeled-input structure-layer-item');
94802
94803                 layerEnter
94804                     .append('span')
94805                     .attr('class', 'label structure-label-layer')
94806                     .attr('for', 'preset-input-layer')
94807                     .text(t('inspector.radio.structure.layer'));
94808
94809                 layerEnter
94810                     .append('div')
94811                     .attr('class', 'structure-input-layer-wrap');
94812
94813                 // Update
94814                 layerItem = layerItem
94815                     .merge(layerEnter);
94816
94817                 if (layerField) {
94818                     layerItem.selectAll('.structure-input-layer-wrap')
94819                         .call(layerField.render);
94820                 }
94821             }
94822
94823
94824             function changeType(t, onInput) {
94825                 var key = selectedKey();
94826                 if (!key) return;
94827
94828                 var val = t[key];
94829                 if (val !== 'no') {
94830                     _oldType[key] = val;
94831                 }
94832
94833                 if (field.type === 'structureRadio') {
94834                     // remove layer if it should not be set
94835                     if (val === 'no' ||
94836                         (key !== 'bridge' && key !== 'tunnel') ||
94837                         (key === 'tunnel' && val === 'building_passage')) {
94838                         t.layer = undefined;
94839                     }
94840                     // add layer if it should be set
94841                     if (t.layer === undefined) {
94842                         if (key === 'bridge' && val !== 'no') {
94843                             t.layer = '1';
94844                         }
94845                         if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
94846                             t.layer = '-1';
94847                         }
94848                     }
94849                  }
94850
94851                 dispatch$1.call('change', this, t, onInput);
94852             }
94853
94854
94855             function changeLayer(t, onInput) {
94856                 if (t.layer === '0') {
94857                     t.layer = undefined;
94858                 }
94859                 dispatch$1.call('change', this, t, onInput);
94860             }
94861
94862
94863             function changeRadio() {
94864                 var t = {};
94865                 var activeKey;
94866
94867                 if (field.key) {
94868                     t[field.key] = undefined;
94869                 }
94870
94871                 radios.each(function(d) {
94872                     var active = d3_select(this).property('checked');
94873                     if (active) activeKey = d;
94874
94875                     if (field.key) {
94876                         if (active) t[field.key] = d;
94877                     } else {
94878                         var val = _oldType[activeKey] || 'yes';
94879                         t[d] = active ? val : undefined;
94880                     }
94881                 });
94882
94883                 if (field.type === 'structureRadio') {
94884                     if (activeKey === 'bridge') {
94885                         t.layer = '1';
94886                     } else if (activeKey === 'tunnel' && t.tunnel !== 'building_passage') {
94887                         t.layer = '-1';
94888                     } else {
94889                         t.layer = undefined;
94890                     }
94891                 }
94892
94893                 dispatch$1.call('change', this, t);
94894             }
94895
94896
94897             radio.tags = function(tags) {
94898                 function checked(d) {
94899                     if (field.key) {
94900                         return tags[field.key] === d;
94901                     } else {
94902                         return !!(tags[d] && tags[d].toLowerCase() !== 'no');
94903                     }
94904                 }
94905
94906                 labels.classed('active', checked);
94907                 radios.property('checked', checked);
94908
94909                 var selection = radios.filter(function() { return this.checked; });
94910
94911                 if (selection.empty()) {
94912                     placeholder.text(t('inspector.none'));
94913                 } else {
94914                     placeholder.text(selection.attr('value'));
94915                     _oldType[selection.datum()] = tags[selection.datum()];
94916                 }
94917
94918                 if (field.type === 'structureRadio') {
94919                     // For waterways without a tunnel tag, set 'culvert' as
94920                     // the _oldType to default to if the user picks 'tunnel'
94921                     if (!!tags.waterway && !_oldType.tunnel) {
94922                         _oldType.tunnel = 'culvert';
94923                     }
94924
94925                     wrap.call(structureExtras, tags);
94926                 }
94927             };
94928
94929
94930             radio.focus = function() {
94931                 radios.node().focus();
94932             };
94933
94934
94935             radio.entity = function(val) {
94936                 if (!arguments.length) return _entity;
94937                 _entity = val;
94938                 _oldType = {};
94939                 return radio;
94940             };
94941
94942
94943             return utilRebind(radio, dispatch$1, 'on');
94944         }
94945
94946         function uiFieldRestrictions(field, context) {
94947             var dispatch$1 = dispatch('change');
94948             var breathe = behaviorBreathe();
94949             var storedViaWay = context.storage('turn-restriction-via-way');
94950             var storedDistance = context.storage('turn-restriction-distance');
94951
94952             var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 1;
94953             var _maxDistance = storedDistance ? (+storedDistance) : 30;
94954             var _initialized = false;
94955             var _parent = d3_select(null);       // the entire field
94956             var _container = d3_select(null);    // just the map
94957             var _oldTurns;
94958             var _graph;
94959             var _vertexID;
94960             var _intersection;
94961             var _fromWayID;
94962
94963             var _lastXPos;
94964
94965
94966             function restrictions(selection) {
94967                 _parent = selection;
94968
94969                 // try to reuse the intersection, but always rebuild it if the graph has changed
94970                 if (_vertexID && (context.graph() !== _graph || !_intersection)) {
94971                     _graph = context.graph();
94972                     _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
94973                 }
94974
94975                 // It's possible for there to be no actual intersection here.
94976                 // for example, a vertex of two `highway=path`
94977                 // In this case, hide the field.
94978                 var isOK = (
94979                     _intersection &&
94980                     _intersection.vertices.length &&           // has vertices
94981                     _intersection.vertices                     // has the vertex that the user selected
94982                         .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
94983                     _intersection.ways.length > 2 &&           // has more than 2 ways
94984                     _intersection.ways                         // has more than 1 TO way
94985                         .filter(function(way) { return way.__to; }).length > 1
94986                 );
94987
94988                 // Also hide in the case where
94989                 d3_select(selection.node().parentNode).classed('hide', !isOK);
94990
94991                 // if form field is hidden or has detached from dom, clean up.
94992                 if (!isOK ||
94993                     !d3_select('.inspector-wrap.inspector-hidden').empty() ||
94994                     !selection.node().parentNode ||
94995                     !selection.node().parentNode.parentNode) {
94996                     selection.call(restrictions.off);
94997                     return;
94998                 }
94999
95000
95001                 var wrap = selection.selectAll('.form-field-input-wrap')
95002                     .data([0]);
95003
95004                 wrap = wrap.enter()
95005                     .append('div')
95006                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95007                     .merge(wrap);
95008
95009                 var container = wrap.selectAll('.restriction-container')
95010                     .data([0]);
95011
95012                 // enter
95013                 var containerEnter = container.enter()
95014                     .append('div')
95015                     .attr('class', 'restriction-container');
95016
95017                 containerEnter
95018                     .append('div')
95019                     .attr('class', 'restriction-help');
95020
95021                 // update
95022                 _container = containerEnter
95023                     .merge(container)
95024                     .call(renderViewer);
95025
95026                 var controls = wrap.selectAll('.restriction-controls')
95027                     .data([0]);
95028
95029                 // enter/update
95030                 controls.enter()
95031                     .append('div')
95032                     .attr('class', 'restriction-controls-container')
95033                     .append('div')
95034                     .attr('class', 'restriction-controls')
95035                     .merge(controls)
95036                     .call(renderControls);
95037             }
95038
95039
95040             function renderControls(selection) {
95041                 var distControl = selection.selectAll('.restriction-distance')
95042                     .data([0]);
95043
95044                 distControl.exit()
95045                     .remove();
95046
95047                 var distControlEnter = distControl.enter()
95048                     .append('div')
95049                     .attr('class', 'restriction-control restriction-distance');
95050
95051                 distControlEnter
95052                     .append('span')
95053                     .attr('class', 'restriction-control-label restriction-distance-label')
95054                     .text(t('restriction.controls.distance') + ':');
95055
95056                 distControlEnter
95057                     .append('input')
95058                     .attr('class', 'restriction-distance-input')
95059                     .attr('type', 'range')
95060                     .attr('min', '20')
95061                     .attr('max', '50')
95062                     .attr('step', '5');
95063
95064                 distControlEnter
95065                     .append('span')
95066                     .attr('class', 'restriction-distance-text');
95067
95068                 // update
95069                 selection.selectAll('.restriction-distance-input')
95070                     .property('value', _maxDistance)
95071                     .on('input', function() {
95072                         var val = d3_select(this).property('value');
95073                         _maxDistance = +val;
95074                         _intersection = null;
95075                         _container.selectAll('.layer-osm .layer-turns *').remove();
95076                         context.storage('turn-restriction-distance', _maxDistance);
95077                         _parent.call(restrictions);
95078                     });
95079
95080                 selection.selectAll('.restriction-distance-text')
95081                     .text(displayMaxDistance(_maxDistance));
95082
95083
95084                 var viaControl = selection.selectAll('.restriction-via-way')
95085                     .data([0]);
95086
95087                 viaControl.exit()
95088                     .remove();
95089
95090                 var viaControlEnter = viaControl.enter()
95091                     .append('div')
95092                     .attr('class', 'restriction-control restriction-via-way');
95093
95094                 viaControlEnter
95095                     .append('span')
95096                     .attr('class', 'restriction-control-label restriction-via-way-label')
95097                     .text(t('restriction.controls.via') + ':');
95098
95099                 viaControlEnter
95100                     .append('input')
95101                     .attr('class', 'restriction-via-way-input')
95102                     .attr('type', 'range')
95103                     .attr('min', '0')
95104                     .attr('max', '2')
95105                     .attr('step', '1');
95106
95107                 viaControlEnter
95108                     .append('span')
95109                     .attr('class', 'restriction-via-way-text');
95110
95111                 // update
95112                 selection.selectAll('.restriction-via-way-input')
95113                     .property('value', _maxViaWay)
95114                     .on('input', function() {
95115                         var val = d3_select(this).property('value');
95116                         _maxViaWay = +val;
95117                         _container.selectAll('.layer-osm .layer-turns *').remove();
95118                         context.storage('turn-restriction-via-way', _maxViaWay);
95119                         _parent.call(restrictions);
95120                     });
95121
95122                 selection.selectAll('.restriction-via-way-text')
95123                     .text(displayMaxVia(_maxViaWay));
95124             }
95125
95126
95127             function renderViewer(selection) {
95128                 if (!_intersection) return;
95129
95130                 var vgraph = _intersection.graph;
95131                 var filter = utilFunctor(true);
95132                 var projection = geoRawMercator();
95133
95134                 // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
95135                 // Instead of asking the restriction-container for its dimensions,
95136                 //  we can ask the #sidebar, which can have its dimensions cached.
95137                 // width: calc as sidebar - padding
95138                 // height: hardcoded (from `80_app.css`)
95139                 // var d = utilGetDimensions(selection);
95140                 var sdims = utilGetDimensions(d3_select('#sidebar'));
95141                 var d = [ sdims[0] - 50, 370 ];
95142                 var c = geoVecScale(d, 0.5);
95143                 var z = 22;
95144
95145                 projection.scale(geoZoomToScale(z));
95146
95147                 // Calculate extent of all key vertices
95148                 var extent = geoExtent();
95149                 for (var i = 0; i < _intersection.vertices.length; i++) {
95150                     extent._extend(_intersection.vertices[i].extent());
95151                 }
95152
95153                 // If this is a large intersection, adjust zoom to fit extent
95154                 if (_intersection.vertices.length > 1) {
95155                     var padding = 180;   // in z22 pixels
95156                     var tl = projection([extent[0][0], extent[1][1]]);
95157                     var br = projection([extent[1][0], extent[0][1]]);
95158                     var hFactor = (br[0] - tl[0]) / (d[0] - padding);
95159                     var vFactor = (br[1] - tl[1]) / (d[1] - padding);
95160                     var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
95161                     var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
95162                     z = z - Math.max(hZoomDiff, vZoomDiff);
95163                     projection.scale(geoZoomToScale(z));
95164                 }
95165
95166                 var padTop = 35;   // reserve top space for hint text
95167                 var extentCenter = projection(extent.center());
95168                 extentCenter[1] = extentCenter[1] - padTop;
95169
95170                 projection
95171                     .translate(geoVecSubtract(c, extentCenter))
95172                     .clipExtent([[0, 0], d]);
95173
95174                 var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
95175                 var drawVertices = svgVertices(projection, context);
95176                 var drawLines = svgLines(projection, context);
95177                 var drawTurns = svgTurns(projection, context);
95178
95179                 var firstTime = selection.selectAll('.surface').empty();
95180
95181                 selection
95182                     .call(drawLayers);
95183
95184                 var surface = selection.selectAll('.surface')
95185                     .classed('tr', true);
95186
95187                 if (firstTime) {
95188                     _initialized = true;
95189
95190                     surface
95191                         .call(breathe);
95192                 }
95193
95194                 // This can happen if we've lowered the detail while a FROM way
95195                 // is selected, and that way is no longer part of the intersection.
95196                 if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
95197                     _fromWayID = null;
95198                     _oldTurns = null;
95199                 }
95200
95201                 surface
95202                     .call(utilSetDimensions, d)
95203                     .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
95204                     .call(drawLines, vgraph, _intersection.ways, filter)
95205                     .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
95206
95207                 surface
95208                     .on('click.restrictions', click)
95209                     .on('mouseover.restrictions', mouseover);
95210
95211                 surface
95212                     .selectAll('.selected')
95213                     .classed('selected', false);
95214
95215                 surface
95216                     .selectAll('.related')
95217                     .classed('related', false);
95218
95219                 if (_fromWayID) {
95220                     var way = vgraph.entity(_fromWayID);
95221                     surface
95222                         .selectAll('.' + _fromWayID)
95223                         .classed('selected', true)
95224                         .classed('related', true);
95225                 }
95226
95227                 document.addEventListener('resizeWindow', function () {
95228                     utilSetDimensions(_container, null);
95229                     redraw(1);
95230                 }, false);
95231
95232                 updateHints(null);
95233
95234
95235                 function click() {
95236                     surface
95237                         .call(breathe.off)
95238                         .call(breathe);
95239
95240                     var datum = event.target.__data__;
95241                     var entity = datum && datum.properties && datum.properties.entity;
95242                     if (entity) {
95243                         datum = entity;
95244                     }
95245
95246                     if (datum instanceof osmWay && (datum.__from || datum.__via)) {
95247                         _fromWayID = datum.id;
95248                         _oldTurns = null;
95249                         redraw();
95250
95251                     } else if (datum instanceof osmTurn) {
95252                         var actions, extraActions, turns, i;
95253                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
95254
95255                         if (datum.restrictionID && !datum.direct) {
95256                             return;
95257
95258                         } else if (datum.restrictionID && !datum.only) {    // NO -> ONLY
95259                             var seen = {};
95260                             var datumOnly = JSON.parse(JSON.stringify(datum));   // deep clone the datum
95261                             datumOnly.only = true;                               // but change this property
95262                             restrictionType = restrictionType.replace(/^no/, 'only');
95263
95264                             // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
95265                             // We will remember them in _oldTurns, and restore them if the user clicks again.
95266                             turns = _intersection.turns(_fromWayID, 2);
95267                             extraActions = [];
95268                             _oldTurns = [];
95269                             for (i = 0; i < turns.length; i++) {
95270                                 var turn = turns[i];
95271                                 if (seen[turn.restrictionID]) continue;  // avoid deleting the turn twice (#4968, #4928)
95272
95273                                 if (turn.direct && turn.path[1] === datum.path[1]) {
95274                                     seen[turns[i].restrictionID] = true;
95275                                     turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
95276                                     _oldTurns.push(turn);
95277                                     extraActions.push(actionUnrestrictTurn(turn));
95278                                 }
95279                             }
95280
95281                             actions = _intersection.actions.concat(extraActions, [
95282                                 actionRestrictTurn(datumOnly, restrictionType),
95283                                 t('operations.restriction.annotation.create')
95284                             ]);
95285
95286                         } else if (datum.restrictionID) {   // ONLY -> Allowed
95287                             // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
95288                             // This relies on the assumption that the intersection was already split up when we
95289                             // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
95290                             turns = _oldTurns || [];
95291                             extraActions = [];
95292                             for (i = 0; i < turns.length; i++) {
95293                                 if (turns[i].key !== datum.key) {
95294                                     extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
95295                                 }
95296                             }
95297                             _oldTurns = null;
95298
95299                             actions = _intersection.actions.concat(extraActions, [
95300                                 actionUnrestrictTurn(datum),
95301                                 t('operations.restriction.annotation.delete')
95302                             ]);
95303
95304                         } else {    // Allowed -> NO
95305                             actions = _intersection.actions.concat([
95306                                 actionRestrictTurn(datum, restrictionType),
95307                                 t('operations.restriction.annotation.create')
95308                             ]);
95309                         }
95310
95311                         context.perform.apply(context, actions);
95312
95313                         // At this point the datum will be changed, but will have same key..
95314                         // Refresh it and update the help..
95315                         var s = surface.selectAll('.' + datum.key);
95316                         datum = s.empty() ? null : s.datum();
95317                         updateHints(datum);
95318
95319                     } else {
95320                         _fromWayID = null;
95321                         _oldTurns = null;
95322                         redraw();
95323                     }
95324                 }
95325
95326
95327                 function mouseover() {
95328                     var datum = event.target.__data__;
95329                     updateHints(datum);
95330                 }
95331
95332                 _lastXPos = _lastXPos || sdims[0];
95333
95334                 function redraw(minChange) {
95335                     var xPos = -1;
95336
95337                     if (minChange) {
95338                         xPos = utilGetDimensions(d3_select('#sidebar'))[0];
95339                     }
95340
95341                     if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
95342                         if (context.hasEntity(_vertexID)) {
95343                             _lastXPos = xPos;
95344                             _container.call(renderViewer);
95345                         }
95346                     }
95347                 }
95348
95349
95350                 function highlightPathsFrom(wayID) {
95351                     surface.selectAll('.related')
95352                         .classed('related', false)
95353                         .classed('allow', false)
95354                         .classed('restrict', false)
95355                         .classed('only', false);
95356
95357                     surface.selectAll('.' + wayID)
95358                         .classed('related', true);
95359
95360                     if (wayID) {
95361                         var turns = _intersection.turns(wayID, _maxViaWay);
95362                         for (var i = 0; i < turns.length; i++) {
95363                             var turn = turns[i];
95364                             var ids = [turn.to.way];
95365                             var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
95366
95367                             if (turn.only || turns.length === 1) {
95368                                 if (turn.via.ways) {
95369                                     ids = ids.concat(turn.via.ways);
95370                                 }
95371                             } else if (turn.to.way === wayID) {
95372                                 continue;
95373                             }
95374
95375                             surface.selectAll(utilEntitySelector(ids))
95376                                 .classed('related', true)
95377                                 .classed('allow', (klass === 'allow'))
95378                                 .classed('restrict', (klass === 'restrict'))
95379                                 .classed('only', (klass === 'only'));
95380                         }
95381                     }
95382                 }
95383
95384
95385                 function updateHints(datum) {
95386                     var help = _container.selectAll('.restriction-help').html('');
95387
95388                     var placeholders = {};
95389                     ['from', 'via', 'to'].forEach(function(k) {
95390                         placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
95391                     });
95392
95393                     var entity = datum && datum.properties && datum.properties.entity;
95394                     if (entity) {
95395                         datum = entity;
95396                     }
95397
95398                     if (_fromWayID) {
95399                         way = vgraph.entity(_fromWayID);
95400                         surface
95401                             .selectAll('.' + _fromWayID)
95402                             .classed('selected', true)
95403                             .classed('related', true);
95404                     }
95405
95406                     // Hovering a way
95407                     if (datum instanceof osmWay && datum.__from) {
95408                         way = datum;
95409
95410                         highlightPathsFrom(_fromWayID ? null : way.id);
95411                         surface.selectAll('.' + way.id)
95412                             .classed('related', true);
95413
95414                         var clickSelect = (!_fromWayID || _fromWayID !== way.id);
95415                         help
95416                             .append('div')      // "Click to select FROM {fromName}." / "FROM {fromName}"
95417                             .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
95418                                 from: placeholders.from,
95419                                 fromName: displayName(way.id, vgraph)
95420                             }));
95421
95422
95423                     // Hovering a turn arrow
95424                     } else if (datum instanceof osmTurn) {
95425                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
95426                         var turnType = restrictionType.replace(/^(only|no)\_/, '');
95427                         var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
95428                         var klass, turnText, nextText;
95429
95430                         if (datum.no) {
95431                             klass = 'restrict';
95432                             turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
95433                             nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
95434                         } else if (datum.only) {
95435                             klass = 'only';
95436                             turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
95437                             nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
95438                         } else {
95439                             klass = 'allow';
95440                             turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
95441                             nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
95442                         }
95443
95444                         help
95445                             .append('div')      // "NO Right Turn (indirect)"
95446                             .attr('class', 'qualifier ' + klass)
95447                             .text(turnText);
95448
95449                         help
95450                             .append('div')      // "FROM {fromName} TO {toName}"
95451                             .html(t('restriction.help.from_name_to_name', {
95452                                 from: placeholders.from,
95453                                 fromName: displayName(datum.from.way, vgraph),
95454                                 to: placeholders.to,
95455                                 toName: displayName(datum.to.way, vgraph)
95456                             }));
95457
95458                         if (datum.via.ways && datum.via.ways.length) {
95459                             var names = [];
95460                             for (var i = 0; i < datum.via.ways.length; i++) {
95461                                 var prev = names[names.length - 1];
95462                                 var curr = displayName(datum.via.ways[i], vgraph);
95463                                 if (!prev || curr !== prev)   // collapse identical names
95464                                     names.push(curr);
95465                             }
95466
95467                             help
95468                                 .append('div')      // "VIA {viaNames}"
95469                                 .html(t('restriction.help.via_names', {
95470                                     via: placeholders.via,
95471                                     viaNames: names.join(', ')
95472                                 }));
95473                         }
95474
95475                         if (!indirect) {
95476                             help
95477                                 .append('div')      // Click for "No Right Turn"
95478                                 .text(t('restriction.help.toggle', { turn: nextText.trim() }));
95479                         }
95480
95481                         highlightPathsFrom(null);
95482                         var alongIDs = datum.path.slice();
95483                         surface.selectAll(utilEntitySelector(alongIDs))
95484                             .classed('related', true)
95485                             .classed('allow', (klass === 'allow'))
95486                             .classed('restrict', (klass === 'restrict'))
95487                             .classed('only', (klass === 'only'));
95488
95489
95490                     // Hovering empty surface
95491                     } else {
95492                         highlightPathsFrom(null);
95493                         if (_fromWayID) {
95494                             help
95495                                 .append('div')      // "FROM {fromName}"
95496                                 .html(t('restriction.help.from_name', {
95497                                     from: placeholders.from,
95498                                     fromName: displayName(_fromWayID, vgraph)
95499                                 }));
95500
95501                         } else {
95502                             help
95503                                 .append('div')      // "Click to select a FROM segment."
95504                                 .html(t('restriction.help.select_from', {
95505                                     from: placeholders.from
95506                                 }));
95507                         }
95508                     }
95509                 }
95510             }
95511
95512
95513             function displayMaxDistance(maxDist) {
95514                 var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
95515                 var opts;
95516
95517                 if (isImperial) {
95518                     var distToFeet = {   // imprecise conversion for prettier display
95519                         20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
95520                     }[maxDist];
95521                     opts = { distance: t('units.feet', { quantity: distToFeet }) };
95522                 } else {
95523                     opts = { distance: t('units.meters', { quantity: maxDist }) };
95524                 }
95525
95526                 return t('restriction.controls.distance_up_to', opts);
95527             }
95528
95529
95530             function displayMaxVia(maxVia) {
95531                 return maxVia === 0 ? t('restriction.controls.via_node_only')
95532                     : maxVia === 1 ? t('restriction.controls.via_up_to_one')
95533                     : t('restriction.controls.via_up_to_two');
95534             }
95535
95536
95537             function displayName(entityID, graph) {
95538                 var entity = graph.entity(entityID);
95539                 var name = utilDisplayName(entity) || '';
95540                 var matched = context.presets().match(entity, graph);
95541                 var type = (matched && matched.name()) || utilDisplayType(entity.id);
95542                 return name || type;
95543             }
95544
95545
95546             restrictions.entity = function(val) {
95547                 _intersection = null;
95548                 _fromWayID = null;
95549                 _oldTurns = null;
95550                 _vertexID = val.id;
95551             };
95552
95553
95554             restrictions.tags = function() {};
95555             restrictions.focus = function() {};
95556
95557
95558             restrictions.off = function(selection) {
95559                 if (!_initialized) return;
95560
95561                 selection.selectAll('.surface')
95562                     .call(breathe.off)
95563                     .on('click.restrictions', null)
95564                     .on('mouseover.restrictions', null);
95565
95566                 d3_select(window)
95567                     .on('resize.restrictions', null);
95568             };
95569
95570
95571             return utilRebind(restrictions, dispatch$1, 'on');
95572         }
95573
95574         function uiFieldTextarea(field) {
95575             var dispatch$1 = dispatch('change');
95576             var input = d3_select(null);
95577
95578
95579             function textarea(selection) {
95580                 var wrap = selection.selectAll('.form-field-input-wrap')
95581                     .data([0]);
95582
95583                 wrap = wrap.enter()
95584                     .append('div')
95585                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95586                     .merge(wrap);
95587
95588                 input = wrap.selectAll('textarea')
95589                     .data([0]);
95590
95591                 input = input.enter()
95592                     .append('textarea')
95593                     .attr('id', 'preset-input-' + field.safeid)
95594                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
95595                     .attr('maxlength', 255)
95596                     .call(utilNoAuto)
95597                     .on('input', change(true))
95598                     .on('blur', change())
95599                     .on('change', change())
95600                     .merge(input);
95601             }
95602
95603
95604             function change(onInput) {
95605                 return function() {
95606                     var t = {};
95607                     t[field.key] = utilGetSetValue(input) || undefined;
95608                     dispatch$1.call('change', this, t, onInput);
95609                 };
95610             }
95611
95612
95613             textarea.tags = function(tags) {
95614                 utilGetSetValue(input, tags[field.key] || '');
95615             };
95616
95617
95618             textarea.focus = function() {
95619                 input.node().focus();
95620             };
95621
95622
95623             return utilRebind(textarea, dispatch$1, 'on');
95624         }
95625
95626         function uiFieldWikidata(field, context) {
95627             var wikidata = services$1.wikidata;
95628             var dispatch$1 = dispatch('change');
95629             var searchInput = d3_select(null);
95630             var _qid = null;
95631             var _wikidataEntity = null;
95632             var _wikiURL = '';
95633             var _entity;
95634
95635             var _wikipediaKey = field.keys && field.keys.find(function(key) {
95636                     return key.includes('wikipedia');
95637                 }),
95638                 _hintKey = field.key === 'wikidata' ? 'name' : field.key.split(':')[0];
95639
95640             var combobox = uiCombobox(context, 'combo-' + field.safeid)
95641                 .caseSensitive(true)
95642                 .minItems(1);
95643
95644             function wiki(selection) {
95645
95646                 var wrap = selection.selectAll('.form-field-input-wrap')
95647                     .data([0]);
95648
95649                 wrap = wrap.enter()
95650                     .append('div')
95651                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95652                     .merge(wrap);
95653
95654
95655                 var list = wrap.selectAll('ul')
95656                     .data([0]);
95657
95658                 list = list.enter()
95659                     .append('ul')
95660                     .attr('class', 'rows')
95661                     .merge(list);
95662
95663                 var searchRow = list.selectAll('li.wikidata-search')
95664                     .data([0]);
95665
95666                 var searchRowEnter = searchRow.enter()
95667                     .append('li')
95668                     .attr('class', 'wikidata-search');
95669
95670                 searchInput = searchRowEnter
95671                     .append('input')
95672                     .attr('type', 'text')
95673                     .style('flex', '1')
95674                     .call(utilNoAuto);
95675
95676                 searchInput
95677                     .on('focus', function() {
95678                         var node = d3_select(this).node();
95679                         node.setSelectionRange(0, node.value.length);
95680                     })
95681                     .on('blur', function() {
95682                         setLabelForEntity();
95683                     })
95684                     .call(combobox.fetcher(fetchWikidataItems));
95685
95686                 combobox.on('accept', function(d) {
95687                     _qid = d.id;
95688                     change();
95689                 }).on('cancel', function() {
95690                     setLabelForEntity();
95691                 });
95692
95693                 searchRowEnter
95694                     .append('button')
95695                     .attr('class', 'form-field-button wiki-link')
95696                     .attr('title', t('icons.open_wikidata'))
95697                     .attr('tabindex', -1)
95698                     .call(svgIcon('#iD-icon-out-link'))
95699                     .on('click', function() {
95700                         event.preventDefault();
95701                         if (_wikiURL) window.open(_wikiURL, '_blank');
95702                     });
95703
95704                 var wikidataProperties = ['description', 'identifier'];
95705
95706                 var items = list.selectAll('li.labeled-input')
95707                     .data(wikidataProperties);
95708
95709                 // Enter
95710                 var enter = items.enter()
95711                     .append('li')
95712                     .attr('class', function(d) { return 'labeled-input preset-wikidata-' + d; });
95713
95714                 enter
95715                     .append('span')
95716                     .attr('class', 'label')
95717                     .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
95718                     .text(function(d) { return t('wikidata.' + d); });
95719
95720                 enter
95721                     .append('input')
95722                     .attr('type', 'text')
95723                     .attr('id', function(d) { return 'preset-input-wikidata-' + d; })
95724                     .call(utilNoAuto)
95725                     .classed('disabled', 'true')
95726                     .attr('readonly', 'true');
95727
95728                 enter
95729                     .append('button')
95730                     .attr('class', 'form-field-button')
95731                     .attr('title', t('icons.copy'))
95732                     .attr('tabindex', -1)
95733                     .call(svgIcon('#iD-operation-copy'))
95734                     .on('click', function() {
95735                         event.preventDefault();
95736                         d3_select(this.parentNode)
95737                             .select('input')
95738                             .node()
95739                             .select();
95740                         document.execCommand('copy');
95741                     });
95742
95743             }
95744
95745             function fetchWikidataItems(q, callback) {
95746
95747                 if (!q && _entity) {
95748                     q = (_hintKey && context.entity(_entity.id).tags[_hintKey]) || '';
95749                 }
95750
95751                 wikidata.itemsForSearchQuery(q, function(err, data) {
95752                     if (err) return;
95753
95754                     for (var i in data) {
95755                         data[i].value = data[i].label + ' (' +  data[i].id + ')';
95756                         data[i].title = data[i].description;
95757                     }
95758
95759                     if (callback) callback(data);
95760                 });
95761             }
95762
95763
95764             function change() {
95765                 var syncTags = {};
95766                 syncTags[field.key] = _qid;
95767                 dispatch$1.call('change', this, syncTags);
95768
95769                 // attempt asynchronous update of wikidata tag..
95770                 var initGraph = context.graph();
95771                 var initEntityID = _entity.id;
95772
95773                 wikidata.entityByQID(_qid, function(err, entity) {
95774                     if (err) return;
95775
95776                     // If graph has changed, we can't apply this update.
95777                     if (context.graph() !== initGraph) return;
95778
95779                     if (!entity.sitelinks) return;
95780
95781                     var langs = wikidata.languagesToQuery();
95782                     // use the label and description languages as fallbacks
95783                     ['labels', 'descriptions'].forEach(function(key) {
95784                         if (!entity[key]) return;
95785
95786                         var valueLangs = Object.keys(entity[key]);
95787                         if (valueLangs.length === 0) return;
95788                         var valueLang = valueLangs[0];
95789
95790                         if (langs.indexOf(valueLang) === -1) {
95791                             langs.push(valueLang);
95792                         }
95793                     });
95794
95795                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
95796
95797                     if (_wikipediaKey) {
95798                         var foundPreferred;
95799                         for (var i in langs) {
95800                             var lang = langs[i];
95801                             var siteID = lang.replace('-', '_') + 'wiki';
95802                             if (entity.sitelinks[siteID]) {
95803                                 foundPreferred = true;
95804                                 currTags[_wikipediaKey] = lang + ':' + entity.sitelinks[siteID].title;
95805                                 // use the first match
95806                                 break;
95807                             }
95808                         }
95809
95810                         if (!foundPreferred) {
95811                             // No wikipedia sites available in the user's language or the fallback languages,
95812                             // default to any wikipedia sitelink
95813
95814                             var wikiSiteKeys = Object.keys(entity.sitelinks).filter(function(site) {
95815                                 return site.endsWith('wiki');
95816                             });
95817
95818                             if (wikiSiteKeys.length === 0) {
95819                                 // if no wikipedia pages are linked to this wikidata entity, delete that tag
95820                                 if (currTags[_wikipediaKey]) {
95821                                     delete currTags[_wikipediaKey];
95822                                 }
95823                             } else {
95824                                 var wikiLang = wikiSiteKeys[0].slice(0, -4).replace('_', '-');
95825                                 var wikiTitle = entity.sitelinks[wikiSiteKeys[0]].title;
95826                                 currTags[_wikipediaKey] = wikiLang + ':' + wikiTitle;
95827                             }
95828                         }
95829                     }
95830
95831                     // Coalesce the update of wikidata tag into the previous tag change
95832                     context.overwrite(
95833                         actionChangeTags(initEntityID, currTags),
95834                         context.history().undoAnnotation()
95835                     );
95836
95837                     // do not dispatch.call('change') here, because entity_editor
95838                     // changeTags() is not intended to be called asynchronously
95839
95840                 });
95841             }
95842
95843             function setLabelForEntity() {
95844                 var label = '';
95845                 if (_wikidataEntity) {
95846                     label = entityPropertyForDisplay(_wikidataEntity, 'labels');
95847                     if (label.length === 0) {
95848                         label = _wikidataEntity.id.toString();
95849                     }
95850                 }
95851                 utilGetSetValue(d3_select('li.wikidata-search input'), label);
95852             }
95853
95854
95855             wiki.tags = function(tags) {
95856                 _qid = tags[field.key] || '';
95857
95858                 if (!/^Q[0-9]*$/.test(_qid)) {   // not a proper QID
95859                     unrecognized();
95860                     return;
95861                 }
95862
95863                 // QID value in correct format
95864                 _wikiURL = 'https://wikidata.org/wiki/' + _qid;
95865                 wikidata.entityByQID(_qid, function(err, entity) {
95866                     if (err) {
95867                         unrecognized();
95868                         return;
95869                     }
95870                     _wikidataEntity = entity;
95871
95872                     setLabelForEntity();
95873
95874                     var description = entityPropertyForDisplay(entity, 'descriptions');
95875
95876                     d3_select('.form-field-wikidata button.wiki-link')
95877                         .classed('disabled', false);
95878
95879                     d3_select('.preset-wikidata-description')
95880                         .style('display', function(){
95881                             return description.length > 0 ? 'flex' : 'none';
95882                         })
95883                         .select('input')
95884                         .attr('value', description);
95885
95886                     d3_select('.preset-wikidata-identifier')
95887                         .style('display', function(){
95888                             return entity.id ? 'flex' : 'none';
95889                         })
95890                         .select('input')
95891                         .attr('value', entity.id);
95892                 });
95893
95894
95895                 // not a proper QID
95896                 function unrecognized() {
95897                     _wikidataEntity = null;
95898                     setLabelForEntity();
95899
95900                     d3_select('.preset-wikidata-description')
95901                         .style('display', 'none');
95902                     d3_select('.preset-wikidata-identifier')
95903                         .style('display', 'none');
95904
95905                     d3_select('.form-field-wikidata button.wiki-link')
95906                         .classed('disabled', true);
95907
95908                     if (_qid && _qid !== '') {
95909                         _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + _qid;
95910                     } else {
95911                         _wikiURL = '';
95912                     }
95913                 }
95914             };
95915
95916             function entityPropertyForDisplay(wikidataEntity, propKey) {
95917                 if (!wikidataEntity[propKey]) return '';
95918                 var propObj = wikidataEntity[propKey];
95919                 var langKeys = Object.keys(propObj);
95920                 if (langKeys.length === 0) return '';
95921                 // sorted by priority, since we want to show the user's language first if possible
95922                 var langs = wikidata.languagesToQuery();
95923                 for (var i in langs) {
95924                     var lang = langs[i];
95925                     var valueObj = propObj[lang];
95926                     if (valueObj && valueObj.value && valueObj.value.length > 0) return valueObj.value;
95927                 }
95928                 // default to any available value
95929                 return propObj[langKeys[0]].value;
95930             }
95931
95932
95933             wiki.entity = function(val) {
95934                 if (!arguments.length) return _entity;
95935                 _entity = val;
95936                 return wiki;
95937             };
95938
95939
95940             wiki.focus = function() {
95941                 searchInput.node().focus();
95942             };
95943
95944
95945             return utilRebind(wiki, dispatch$1, 'on');
95946         }
95947
95948         function uiFieldWikipedia(field, context) {
95949             var dispatch$1 = dispatch('change');
95950             var wikipedia = services$1.wikipedia;
95951             var wikidata = services$1.wikidata;
95952             var lang = d3_select(null);
95953             var title = d3_select(null);
95954             var _wikiURL = '';
95955             var _entity;
95956
95957             var langCombo = uiCombobox(context, 'wikipedia-lang')
95958                 .fetcher(function(value, cb) {
95959                     var v = value.toLowerCase();
95960
95961                     cb(wikipedia$2.filter(function(d) {
95962                         return d[0].toLowerCase().indexOf(v) >= 0 ||
95963                             d[1].toLowerCase().indexOf(v) >= 0 ||
95964                             d[2].toLowerCase().indexOf(v) >= 0;
95965                     }).map(function(d) {
95966                         return { value: d[1] };
95967                     }));
95968                 });
95969
95970             var titleCombo = uiCombobox(context, 'wikipedia-title')
95971                 .fetcher(function(value, cb) {
95972                     if (!value && _entity) {
95973                         value = context.entity(_entity.id).tags.name || '';
95974                     }
95975
95976                     var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
95977                     searchfn(language()[2], value, function(query, data) {
95978                         cb(data.map(function(d) {
95979                             return { value: d };
95980                         }));
95981                     });
95982                 });
95983
95984
95985             function wiki(selection) {
95986                 var wrap = selection.selectAll('.form-field-input-wrap')
95987                     .data([0]);
95988
95989                 wrap = wrap.enter()
95990                     .append('div')
95991                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95992                     .merge(wrap);
95993
95994
95995                 var langRow = wrap.selectAll('.wiki-lang-container')
95996                     .data([0]);
95997
95998                 langRow = langRow.enter()
95999                     .append('div')
96000                     .attr('class', 'wiki-lang-container')
96001                     .merge(langRow);
96002
96003
96004                 lang = langRow.selectAll('input.wiki-lang')
96005                     .data([0]);
96006
96007                 lang = lang.enter()
96008                     .append('input')
96009                     .attr('type', 'text')
96010                     .attr('class', 'wiki-lang')
96011                     .attr('placeholder', t('translate.localized_translation_language'))
96012                     .call(utilNoAuto)
96013                     .call(langCombo)
96014                     .merge(lang);
96015
96016                 utilGetSetValue(lang, language()[1]);
96017
96018                 lang
96019                     .on('blur', changeLang)
96020                     .on('change', changeLang);
96021
96022
96023                 var titleRow = wrap.selectAll('.wiki-title-container')
96024                     .data([0]);
96025
96026                 titleRow = titleRow.enter()
96027                     .append('div')
96028                     .attr('class', 'wiki-title-container')
96029                     .merge(titleRow);
96030
96031                 title = titleRow.selectAll('input.wiki-title')
96032                     .data([0]);
96033
96034                 title = title.enter()
96035                     .append('input')
96036                     .attr('type', 'text')
96037                     .attr('class', 'wiki-title')
96038                     .attr('id', 'preset-input-' + field.safeid)
96039                     .call(utilNoAuto)
96040                     .call(titleCombo)
96041                     .merge(title);
96042
96043                 title
96044                     .on('blur', blur)
96045                     .on('change', change);
96046
96047
96048                 var link = titleRow.selectAll('.wiki-link')
96049                     .data([0]);
96050
96051                 link = link.enter()
96052                     .append('button')
96053                     .attr('class', 'form-field-button wiki-link')
96054                     .attr('tabindex', -1)
96055                     .call(svgIcon('#iD-icon-out-link'))
96056                     .merge(link);
96057
96058                 link
96059                     .on('click', function() {
96060                         event.preventDefault();
96061                         if (_wikiURL) window.open(_wikiURL, '_blank');
96062                     });
96063             }
96064
96065
96066             function language() {
96067                 var value = utilGetSetValue(lang).toLowerCase();
96068                 var locale = utilDetect().locale.toLowerCase();
96069                 var localeLanguage;
96070                 return wikipedia$2.find(function(d) {
96071                     if (d[2] === locale) localeLanguage = d;
96072                     return d[0].toLowerCase() === value ||
96073                         d[1].toLowerCase() === value ||
96074                         d[2] === value;
96075                 }) || localeLanguage || ['English', 'English', 'en'];
96076             }
96077
96078
96079             function changeLang() {
96080                 utilGetSetValue(lang, language()[1]);
96081                 change(true);
96082             }
96083
96084
96085             function blur() {
96086                 change(true);
96087             }
96088
96089
96090             function change(skipWikidata) {
96091                 var value = utilGetSetValue(title);
96092                 var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
96093                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
96094                 var syncTags = {};
96095
96096                 if (l) {
96097                     // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
96098                     value = decodeURIComponent(m[2]).replace(/_/g, ' ');
96099                     if (m[3]) {
96100                         var anchor;
96101                         // try {
96102                         // leave this out for now - #6232
96103                             // Best-effort `anchordecode:` implementation
96104                             // anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
96105                         // } catch (e) {
96106                             anchor = decodeURIComponent(m[3]);
96107                         // }
96108                         value += '#' + anchor.replace(/_/g, ' ');
96109                     }
96110                     value = value.slice(0, 1).toUpperCase() + value.slice(1);
96111                     utilGetSetValue(lang, l[1]);
96112                     utilGetSetValue(title, value);
96113                 }
96114
96115                 if (value) {
96116                     syncTags.wikipedia = language()[2] + ':' + value;
96117                 } else {
96118                     syncTags.wikipedia = undefined;
96119                 }
96120
96121                 dispatch$1.call('change', this, syncTags);
96122
96123
96124                 if (skipWikidata || !value || !language()[2]) return;
96125
96126                 // attempt asynchronous update of wikidata tag..
96127                 var initGraph = context.graph();
96128                 var initEntityID = _entity.id;
96129
96130                 wikidata.itemsByTitle(language()[2], value, function(err, data) {
96131                     if (err) return;
96132
96133                     // If graph has changed, we can't apply this update.
96134                     if (context.graph() !== initGraph) return;
96135
96136                     if (!data || !Object.keys(data).length) return;
96137
96138                     var qids = Object.keys(data);
96139                     var value = qids && qids.find(function(id) { return id.match(/^Q\d+$/); });
96140                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
96141
96142                     currTags.wikidata = value;
96143
96144                     // Coalesce the update of wikidata tag into the previous tag change
96145                     context.overwrite(
96146                         actionChangeTags(initEntityID, currTags),
96147                         context.history().undoAnnotation()
96148                     );
96149
96150                     // do not dispatch.call('change') here, because entity_editor
96151                     // changeTags() is not intended to be called asynchronously
96152                 });
96153             }
96154
96155
96156             wiki.tags = function(tags) {
96157                 var value = tags[field.key] || '';
96158                 var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
96159                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
96160                 var anchor = m && m[3];
96161
96162                 // value in correct format
96163                 if (l) {
96164                     utilGetSetValue(lang, l[1]);
96165                     utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
96166                     if (anchor) {
96167                         try {
96168                             // Best-effort `anchorencode:` implementation
96169                             anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
96170                         } catch (e) {
96171                             anchor = anchor.replace(/ /g, '_');
96172                         }
96173                     }
96174                     _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
96175                         m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
96176
96177                 // unrecognized value format
96178                 } else {
96179                     utilGetSetValue(title, value);
96180                     if (value && value !== '') {
96181                         utilGetSetValue(lang, '');
96182                         _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
96183                     } else {
96184                         _wikiURL = '';
96185                     }
96186                 }
96187             };
96188
96189
96190             wiki.entity = function(val) {
96191                 if (!arguments.length) return _entity;
96192                 _entity = val;
96193                 return wiki;
96194             };
96195
96196
96197             wiki.focus = function() {
96198                 title.node().focus();
96199             };
96200
96201
96202             return utilRebind(wiki, dispatch$1, 'on');
96203         }
96204
96205         var uiFields = {
96206             access: uiFieldAccess,
96207             address: uiFieldAddress,
96208             check: uiFieldCheck,
96209             combo: uiFieldCombo,
96210             cycleway: uiFieldCycleway,
96211             defaultCheck: uiFieldCheck,
96212             email: uiFieldText,
96213             lanes: uiFieldLanes,
96214             localized: uiFieldLocalized,
96215             maxspeed: uiFieldMaxspeed,
96216             multiCombo: uiFieldCombo,
96217             networkCombo: uiFieldCombo,
96218             number: uiFieldText,
96219             onewayCheck: uiFieldCheck,
96220             radio: uiFieldRadio,
96221             restrictions: uiFieldRestrictions,
96222             semiCombo: uiFieldCombo,
96223             structureRadio: uiFieldRadio,
96224             tel: uiFieldText,
96225             text: uiFieldText,
96226             textarea: uiFieldTextarea,
96227             typeCombo: uiFieldCombo,
96228             url: uiFieldText,
96229             wikidata: uiFieldWikidata,
96230             wikipedia: uiFieldWikipedia
96231         };
96232
96233         function uiField(context, presetField, entity, options) {
96234             options = Object.assign({
96235                 show: true,
96236                 wrap: true,
96237                 remove: true,
96238                 revert: true,
96239                 info: true
96240             }, options);
96241
96242             var dispatch$1 = dispatch('change');
96243             var field = Object.assign({}, presetField);   // shallow copy
96244             var _show = options.show;
96245             var _state = '';
96246             var _tags = {};
96247
96248             var _locked = false;
96249             var _lockedTip = tooltip()
96250                 .title(t('inspector.lock.suggestion', { label: field.label }))
96251                 .placement('bottom');
96252
96253
96254             field.keys = field.keys || [field.key];
96255
96256             // only create the fields that are actually being shown
96257             if (_show && !field.impl) {
96258                 createField();
96259             }
96260
96261             // Creates the field.. This is done lazily,
96262             // once we know that the field will be shown.
96263             function createField() {
96264                 field.impl = uiFields[field.type](field, context)
96265                     .on('change', function(t, onInput) {
96266                         dispatch$1.call('change', field, t, onInput);
96267                     });
96268
96269                 if (entity) {
96270                     field.entityID = entity.id;
96271                     // if this field cares about the entity, pass it along
96272                     if (field.impl.entity) {
96273                         field.impl.entity(entity);
96274                     }
96275                 }
96276             }
96277
96278
96279             function isModified() {
96280                 if (!entity) return false;
96281                 var original = context.graph().base().entities[entity.id];
96282                 return field.keys.some(function(key) {
96283                     return original ? _tags[key] !== original.tags[key] : _tags[key];
96284                 });
96285             }
96286
96287
96288             function isPresent() {
96289                 return field.keys.some(function(key) {
96290                     if (field.type === 'multiCombo') {
96291                         for (var tagKey in _tags) {
96292                             if (tagKey.indexOf(key) === 0) {
96293                                 return true;
96294                             }
96295                         }
96296                         return false;
96297                     }
96298                     return _tags[key] !== undefined;
96299                 });
96300             }
96301
96302
96303             function revert(d) {
96304                 event.stopPropagation();
96305                 event.preventDefault();
96306                 if (!entity || _locked) return;
96307
96308                 var original = context.graph().base().entities[entity.id];
96309                 var t = {};
96310                 d.keys.forEach(function(key) {
96311                     t[key] = original ? original.tags[key] : undefined;
96312                 });
96313
96314                 dispatch$1.call('change', d, t);
96315             }
96316
96317
96318             function remove(d) {
96319                 event.stopPropagation();
96320                 event.preventDefault();
96321                 if (_locked) return;
96322
96323                 var t = {};
96324                 d.keys.forEach(function(key) {
96325                     t[key] = undefined;
96326                 });
96327
96328                 dispatch$1.call('change', d, t);
96329             }
96330
96331
96332             field.render = function(selection) {
96333                 var container = selection.selectAll('.form-field')
96334                     .data([field]);
96335
96336                 // Enter
96337                 var enter = container.enter()
96338                     .append('div')
96339                     .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
96340                     .classed('nowrap', !options.wrap);
96341
96342                 if (options.wrap) {
96343                     var labelEnter = enter
96344                         .append('label')
96345                         .attr('class', 'field-label')
96346                         .attr('for', function(d) { return 'preset-input-' + d.safeid; });
96347
96348                     var textEnter = labelEnter
96349                         .append('span')
96350                         .attr('class', 'label-text');
96351
96352                     textEnter
96353                         .append('span')
96354                         .attr('class', 'label-textvalue')
96355                         .text(function(d) { return d.label(); });
96356
96357                     textEnter
96358                         .append('span')
96359                         .attr('class', 'label-textannotation');
96360
96361                     if (options.remove) {
96362                         labelEnter
96363                             .append('button')
96364                             .attr('class', 'remove-icon')
96365                             .attr('title', t('icons.remove'))
96366                             .attr('tabindex', -1)
96367                             .call(svgIcon('#iD-operation-delete'));
96368                     }
96369
96370                     if (options.revert) {
96371                         labelEnter
96372                             .append('button')
96373                             .attr('class', 'modified-icon')
96374                             .attr('title', t('icons.undo'))
96375                             .attr('tabindex', -1)
96376                             .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
96377                     }
96378                 }
96379
96380
96381                 // Update
96382                 container = container
96383                     .merge(enter);
96384
96385                 container.select('.field-label > .remove-icon')  // propagate bound data
96386                     .on('click', remove);
96387
96388                 container.select('.field-label > .modified-icon')  // propagate bound data
96389                     .on('click', revert);
96390
96391                 container
96392                     .each(function(d) {
96393                         var selection = d3_select(this);
96394
96395                         if (!d.impl) {
96396                             createField();
96397                         }
96398
96399                         var reference, help;
96400
96401                         // instantiate field help
96402                         if (options.wrap && field.type === 'restrictions') {
96403                             help = uiFieldHelp(context, 'restrictions');
96404                         }
96405
96406                         // instantiate tag reference
96407                         if (options.wrap && options.info) {
96408                             var referenceKey = d.key;
96409                             if (d.type === 'multiCombo') {   // lookup key without the trailing ':'
96410                                 referenceKey = referenceKey.replace(/:$/, '');
96411                             }
96412
96413                             reference = uiTagReference(d.reference || { key: referenceKey });
96414                             if (_state === 'hover') {
96415                                 reference.showing(false);
96416                             }
96417                         }
96418
96419                         selection
96420                             .call(d.impl);
96421
96422                         // add field help components
96423                         if (help) {
96424                             selection
96425                                 .call(help.body)
96426                                 .select('.field-label')
96427                                 .call(help.button);
96428                         }
96429
96430                         // add tag reference components
96431                         if (reference) {
96432                             selection
96433                                 .call(reference.body)
96434                                 .select('.field-label')
96435                                 .call(reference.button);
96436                         }
96437
96438                         d.impl.tags(_tags);
96439                     });
96440
96441
96442                     container
96443                         .classed('locked', _locked)
96444                         .classed('modified', isModified())
96445                         .classed('present', isPresent());
96446
96447
96448                     // show a tip and lock icon if the field is locked
96449                     var annotation = container.selectAll('.field-label .label-textannotation');
96450                     var icon = annotation.selectAll('.icon')
96451                         .data(_locked ? [0]: []);
96452
96453                     icon.exit()
96454                         .remove();
96455
96456                     icon.enter()
96457                         .append('svg')
96458                         .attr('class', 'icon')
96459                         .append('use')
96460                         .attr('xlink:href', '#fas-lock');
96461
96462                     container.call(_locked ? _lockedTip : _lockedTip.destroy);
96463             };
96464
96465
96466             field.state = function(val) {
96467                 if (!arguments.length) return _state;
96468                 _state = val;
96469                 return field;
96470             };
96471
96472
96473             field.tags = function(val) {
96474                 if (!arguments.length) return _tags;
96475                 _tags = val;
96476                 return field;
96477             };
96478
96479
96480             field.locked = function(val) {
96481                 if (!arguments.length) return _locked;
96482                 _locked = val;
96483                 return field;
96484             };
96485
96486
96487             field.show = function() {
96488                 _show = true;
96489                 if (!field.impl) {
96490                     createField();
96491                 }
96492                 if (field.default && field.key && _tags[field.key] !== field.default) {
96493                     var t = {};
96494                     t[field.key] = field.default;
96495                     dispatch$1.call('change', this, t);
96496                 }
96497             };
96498
96499             // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
96500             field.isShown = function() {
96501                 return _show || isPresent();
96502             };
96503
96504
96505             // An allowed field can appear in the UI or in the 'Add field' dropdown.
96506             // A non-allowed field is hidden from the user altogether
96507             field.isAllowed = function() {
96508                 if (!entity || isPresent()) return true;   // a field with a value should always display
96509
96510                 var latest = context.hasEntity(entity.id);   // check the most current copy of the entity
96511                 if (!latest) return true;
96512
96513                 var require = field.prerequisiteTag;
96514                 if (require && require.key) {
96515                     var value = latest.tags[require.key];
96516                     if (!value) return false;
96517
96518                     if (require.valueNot) {
96519                         return require.valueNot !== value;
96520                     }
96521                     if (require.value) {
96522                         return require.value === value;
96523                     }
96524                     return true;
96525                 }
96526                 return true;
96527             };
96528
96529
96530             field.focus = function() {
96531                 if (field.impl) {
96532                     field.impl.focus();
96533                 }
96534             };
96535
96536
96537             return utilRebind(field, dispatch$1, 'on');
96538         }
96539
96540         function uiFormFields(context) {
96541             var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
96542             var _fieldsArr = [];
96543             var _lastPlaceholder = '';
96544             var _state = '';
96545             var _klass = '';
96546
96547
96548             function formFields(selection) {
96549                 var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
96550                 var shown = allowedFields.filter(function(field) { return field.isShown(); });
96551                 var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
96552
96553                 var container = selection.selectAll('.form-fields-container')
96554                     .data([0]);
96555
96556                 container = container.enter()
96557                     .append('div')
96558                     .attr('class', 'form-fields-container ' + (_klass || ''))
96559                     .merge(container);
96560
96561
96562                 var fields = container.selectAll('.wrap-form-field')
96563                     .data(shown, function(d) { return d.id + (d.entityID || ''); });
96564
96565                 fields.exit()
96566                     .remove();
96567
96568                 // Enter
96569                 var enter = fields.enter()
96570                     .append('div')
96571                     .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
96572
96573                 // Update
96574                 fields = fields
96575                     .merge(enter);
96576
96577                 fields
96578                     .order()
96579                     .each(function(d) {
96580                         d3_select(this)
96581                             .call(d.render);
96582                     });
96583
96584
96585                 var titles = [];
96586                 var moreFields = notShown.map(function(field) {
96587                     var label = field.label();
96588                     titles.push(label);
96589                     
96590                     var terms = field.terms();
96591                     if (field.key) terms.push(field.key);
96592                     if (field.keys) terms = terms.concat(field.keys);
96593
96594                     return {
96595                         title: label,
96596                         value: label,
96597                         field: field,
96598                         terms: terms
96599                     };
96600                 });
96601
96602                 var placeholder = titles.slice(0,3).join(', ') + ((titles.length > 3) ? '…' : '');
96603
96604
96605                 var more = selection.selectAll('.more-fields')
96606                     .data((_state === 'hover' || moreFields.length === 0) ? [] : [0]);
96607
96608                 more.exit()
96609                     .remove();
96610
96611                 more = more.enter()
96612                     .append('div')
96613                     .attr('class', 'more-fields')
96614                     .append('label')
96615                     .text(t('inspector.add_fields'))
96616                     .merge(more);
96617
96618
96619                 var input = more.selectAll('.value')
96620                     .data([0]);
96621
96622                 input.exit()
96623                     .remove();
96624
96625                 input = input.enter()
96626                     .append('input')
96627                     .attr('class', 'value')
96628                     .attr('type', 'text')
96629                     .attr('placeholder', placeholder)
96630                     .call(utilNoAuto)
96631                     .merge(input);
96632
96633                 input
96634                     .call(utilGetSetValue, '')
96635                     .call(moreCombo
96636                         .data(moreFields)
96637                         .on('accept', function (d) {
96638                             if (!d) return;  // user entered something that was not matched
96639                             var field = d.field;
96640                             field.show();
96641                             selection.call(formFields);  // rerender
96642                             if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
96643                                 field.focus();
96644                             }
96645                         })
96646                     );
96647
96648                 // avoid updating placeholder excessively (triggers style recalc)
96649                 if (_lastPlaceholder !== placeholder) {
96650                     input.attr('placeholder', placeholder);
96651                     _lastPlaceholder = placeholder;
96652                 }
96653             }
96654
96655
96656             formFields.fieldsArr = function(val) {
96657                 if (!arguments.length) return _fieldsArr;
96658                 _fieldsArr = val || [];
96659                 return formFields;
96660             };
96661
96662             formFields.state = function(val) {
96663                 if (!arguments.length) return _state;
96664                 _state = val;
96665                 return formFields;
96666             };
96667
96668             formFields.klass = function(val) {
96669                 if (!arguments.length) return _klass;
96670                 _klass = val;
96671                 return formFields;
96672             };
96673
96674
96675             return formFields;
96676         }
96677
96678         function uiPresetEditor(context) {
96679             var dispatch$1 = dispatch('change');
96680             var formFields = uiFormFields(context);
96681             var _state;
96682             var _fieldsArr;
96683             var _preset;
96684             var _tags;
96685             var _entityID;
96686
96687
96688             function presetEditor(selection) {
96689                 selection.call(uiDisclosure(context, 'preset_fields', true)
96690                     .title(t('inspector.all_fields'))
96691                     .content(render)
96692                 );
96693             }
96694
96695
96696             function render(selection) {
96697                 if (!_fieldsArr) {
96698                     var entity = context.entity(_entityID);
96699                     var geometry = context.geometry(_entityID);
96700                     var presets = context.presets();
96701
96702                     _fieldsArr = [];
96703
96704                     _preset.fields.forEach(function(field) {
96705                         if (field.matchGeometry(geometry)) {
96706                             _fieldsArr.push(
96707                                 uiField(context, field, entity)
96708                             );
96709                         }
96710                     });
96711
96712                     if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
96713                         _fieldsArr.push(
96714                             uiField(context, presets.field('restrictions'), entity)
96715                         );
96716                     }
96717
96718                     var additionalFields = utilArrayUnion(_preset.moreFields, presets.universal());
96719                     additionalFields.sort(function(field1, field2) {
96720                         return field1.label() > field2.label();
96721                     });
96722
96723                     additionalFields.forEach(function(field) {
96724                         if (_preset.fields.indexOf(field) === -1) {
96725                             _fieldsArr.push(
96726                                 uiField(context, field, entity, { show: false })
96727                             );
96728                         }
96729                     });
96730
96731                     _fieldsArr.forEach(function(field) {
96732                         field
96733                             .on('change', function(t, onInput) {
96734                                 dispatch$1.call('change', field, t, onInput);
96735                             });
96736                     });
96737                 }
96738
96739                 _fieldsArr.forEach(function(field) {
96740                     field
96741                         .state(_state)
96742                         .tags(_tags);
96743                 });
96744
96745
96746                 selection
96747                     .call(formFields
96748                         .fieldsArr(_fieldsArr)
96749                         .state(_state)
96750                         .klass('inspector-inner fillL3')
96751                     );
96752
96753
96754                 selection.selectAll('.wrap-form-field input')
96755                     .on('keydown', function() {
96756                         // if user presses enter, and combobox is not active, accept edits..
96757                         if (event.keyCode === 13 && d3_select('.combobox').empty()) {
96758                             context.enter(modeBrowse(context));
96759                         }
96760                     });
96761             }
96762
96763
96764             presetEditor.preset = function(val) {
96765                 if (!arguments.length) return _preset;
96766                 if (_preset && _preset.id === val.id) return presetEditor;
96767                 _preset = val;
96768                 _fieldsArr = null;
96769                 return presetEditor;
96770             };
96771
96772
96773             presetEditor.state = function(val) {
96774                 if (!arguments.length) return _state;
96775                 _state = val;
96776                 return presetEditor;
96777             };
96778
96779
96780             presetEditor.tags = function(val) {
96781                 if (!arguments.length) return _tags;
96782                 _tags = val;
96783                 // Don't reset _fieldsArr here.
96784                 return presetEditor;
96785             };
96786
96787
96788             presetEditor.entityID = function(val) {
96789                 if (!arguments.length) return _entityID;
96790                 if (_entityID === val) return presetEditor;
96791                 _entityID = val;
96792                 _fieldsArr = null;
96793                 return presetEditor;
96794             };
96795
96796
96797             return utilRebind(presetEditor, dispatch$1, 'on');
96798         }
96799
96800         function uiEntityIssues(context) {
96801             var _selection = d3_select(null);
96802             var _activeIssueID;
96803             var _entityID;
96804
96805             // Refresh on validated events
96806             context.validator()
96807                 .on('validated.entity_issues', function() {
96808                      _selection.selectAll('.disclosure-wrap-entity_issues')
96809                          .call(render);
96810
96811                     update();
96812                 })
96813                 .on('focusedIssue.entity_issues', function(issue) {
96814                      makeActiveIssue(issue.id);
96815                 });
96816
96817
96818             function entityIssues(selection) {
96819                 _selection = selection;
96820
96821                 selection
96822                     .call(uiDisclosure(context, 'entity_issues', true)
96823                         .content(render)
96824                     );
96825
96826                 update();
96827             }
96828
96829             function getIssues() {
96830                 return context.validator().getEntityIssues(_entityID, { includeDisabledRules: true });
96831             }
96832
96833             function makeActiveIssue(issueID) {
96834                 _activeIssueID = issueID;
96835                 _selection.selectAll('.issue-container')
96836                     .classed('active', function(d) { return d.id === _activeIssueID; });
96837             }
96838
96839             function update() {
96840
96841                 var issues = getIssues();
96842
96843                 _selection
96844                     .classed('hide', issues.length === 0);
96845
96846                 _selection.selectAll('.hide-toggle-entity_issues span')
96847                     .text(t('issues.list_title', { count: issues.length }));
96848             }
96849
96850
96851             function render(selection) {
96852                 var issues = getIssues();
96853                 _activeIssueID = issues.length > 0 ? issues[0].id : null;
96854
96855
96856                 var containers = selection.selectAll('.issue-container')
96857                     .data(issues, function(d) { return d.id; });
96858
96859                 // Exit
96860                 containers.exit()
96861                     .remove();
96862
96863                 // Enter
96864                 var containersEnter = containers.enter()
96865                     .append('div')
96866                     .attr('class', 'issue-container');
96867
96868
96869                 var itemsEnter = containersEnter
96870                     .append('div')
96871                     .attr('class', function(d) { return 'issue severity-' + d.severity; })
96872                     .on('mouseover.highlight', function(d) {
96873                         // don't hover-highlight the selected entity
96874                         var ids = d.entityIds
96875                             .filter(function(e) { return e !== _entityID; });
96876
96877                         utilHighlightEntities(ids, true, context);
96878                     })
96879                     .on('mouseout.highlight', function(d) {
96880                         var ids = d.entityIds
96881                             .filter(function(e) { return e !== _entityID; });
96882
96883                         utilHighlightEntities(ids, false, context);
96884                     });
96885
96886                 var labelsEnter = itemsEnter
96887                     .append('div')
96888                     .attr('class', 'issue-label')
96889                     .on('click', function(d) {
96890
96891                         makeActiveIssue(d.id); // expand only the clicked item
96892
96893                         var extent = d.extent(context.graph());
96894                         if (extent) {
96895                             var setZoom = Math.max(context.map().zoom(), 19);
96896                             context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
96897                         }
96898                     });
96899
96900                 var textEnter = labelsEnter
96901                     .append('span')
96902                     .attr('class', 'issue-text');
96903
96904                 textEnter
96905                     .append('span')
96906                     .attr('class', 'issue-icon')
96907                     .each(function(d) {
96908                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
96909                         d3_select(this)
96910                             .call(svgIcon(iconName));
96911                     });
96912
96913                 textEnter
96914                     .append('span')
96915                     .attr('class', 'issue-message');
96916
96917
96918                 var infoButton = labelsEnter
96919                     .append('button')
96920                     .attr('class', 'issue-info-button')
96921                     .attr('title', t('icons.information'))
96922                     .attr('tabindex', -1)
96923                     .call(svgIcon('#iD-icon-inspect'));
96924
96925                 infoButton
96926                     .on('click', function () {
96927                         event.stopPropagation();
96928                         event.preventDefault();
96929                         this.blur();    // avoid keeping focus on the button - #4641
96930
96931                         var container = d3_select(this.parentNode.parentNode.parentNode);
96932                         var info = container.selectAll('.issue-info');
96933                         var isExpanded = info.classed('expanded');
96934
96935                         if (isExpanded) {
96936                             info
96937                                 .transition()
96938                                 .duration(200)
96939                                 .style('max-height', '0px')
96940                                 .style('opacity', '0')
96941                                 .on('end', function () {
96942                                     info.classed('expanded', false);
96943                                 });
96944                         } else {
96945                             info
96946                                 .classed('expanded', true)
96947                                 .transition()
96948                                 .duration(200)
96949                                 .style('max-height', '200px')
96950                                 .style('opacity', '1')
96951                                 .on('end', function () {
96952                                     info.style('max-height', null);
96953                                 });
96954                         }
96955                     });
96956
96957                 itemsEnter
96958                     .append('ul')
96959                     .attr('class', 'issue-fix-list');
96960
96961                 containersEnter
96962                     .append('div')
96963                     .attr('class', 'issue-info')
96964                     .style('max-height', '0')
96965                     .style('opacity', '0')
96966                     .each(function(d) {
96967                         if (typeof d.reference === 'function') {
96968                             d3_select(this)
96969                                 .call(d.reference);
96970                         } else {
96971                             d3_select(this)
96972                                 .text(t('inspector.no_documentation_key'));
96973                         }
96974                     });
96975
96976
96977                 // Update
96978                 containers = containers
96979                     .merge(containersEnter)
96980                     .classed('active', function(d) { return d.id === _activeIssueID; });
96981
96982                 containers.selectAll('.issue-message')
96983                     .text(function(d) {
96984                         return d.message(context);
96985                     });
96986
96987                 // fixes
96988                 var fixLists = containers.selectAll('.issue-fix-list');
96989
96990                 var fixes = fixLists.selectAll('.issue-fix-item')
96991                     .data(function(d) { return d.fixes ? d.fixes : []; });
96992
96993                 var fixesEnter = fixes.enter()
96994                     .append('li')
96995                     .attr('class', function(d) {
96996                         return 'issue-fix-item ' + (d.onClick ? 'actionable' : '');
96997                     })
96998                     .on('click', function(d) {
96999                         // not all fixes are actionable
97000                         if (!d.onClick) return;
97001
97002                         // Don't run another fix for this issue within a second of running one
97003                         // (Necessary for "Select a feature type" fix. Most fixes should only ever run once)
97004                         if (d.issue.dateLastRanFix && new Date() - d.issue.dateLastRanFix < 1000) return;
97005                         d.issue.dateLastRanFix = new Date();
97006
97007                         // remove hover-highlighting
97008                         utilHighlightEntities(d.issue.entityIds.concat(d.entityIds), false, context);
97009
97010                         new Promise(function(resolve, reject) {
97011                             d.onClick(context, resolve, reject);
97012                             if (d.onClick.length <= 1) {
97013                                 // if the fix doesn't take any completion parameters then consider it resolved
97014                                 resolve();
97015                             }
97016                         })
97017                         .then(function() {
97018                             // revalidate whenever the fix has finished running successfully
97019                             context.validator().validate();
97020                         });
97021                     })
97022                     .on('mouseover.highlight', function(d) {
97023                         utilHighlightEntities(d.entityIds, true, context);
97024                     })
97025                     .on('mouseout.highlight', function(d) {
97026                         utilHighlightEntities(d.entityIds, false, context);
97027                     });
97028
97029                 fixesEnter
97030                     .append('span')
97031                     .attr('class', 'fix-icon')
97032                     .each(function(d) {
97033                         var iconName = d.icon || 'iD-icon-wrench';
97034                         if (iconName.startsWith('maki')) {
97035                             iconName += '-15';
97036                         }
97037                         d3_select(this).call(svgIcon('#' + iconName));
97038                     });
97039
97040                 fixesEnter
97041                     .append('span')
97042                     .attr('class', 'fix-message')
97043                     .text(function(d) { return d.title; });
97044             }
97045
97046
97047             entityIssues.entityID = function(val) {
97048                 if (!arguments.length) return _entityID;
97049                 if (_entityID !== val) {
97050                     _entityID = val;
97051                     _activeIssueID = null;
97052                 }
97053                 return entityIssues;
97054             };
97055
97056
97057             return entityIssues;
97058         }
97059
97060         function uiEntityEditor(context) {
97061             var dispatch$1 = dispatch('choose');
97062             var _state = 'select';
97063             var _coalesceChanges = false;
97064             var _modified = false;
97065             var _scrolled = false;
97066             var _base;
97067             var _entityID;
97068             var _activePreset;
97069             var _tagReference;
97070             var _presetFavorite;
97071
97072             var entityIssues = uiEntityIssues(context);
97073             var quickLinks = uiQuickLinks();
97074             var presetEditor = uiPresetEditor(context).on('change', changeTags);
97075             var rawTagEditor = uiRawTagEditor(context).on('change', changeTags);
97076             var rawMemberEditor = uiRawMemberEditor(context);
97077             var rawMembershipEditor = uiRawMembershipEditor(context);
97078
97079             function entityEditor(selection) {
97080                 var entity = context.entity(_entityID);
97081                 var tags = Object.assign({}, entity.tags);  // shallow copy
97082
97083                 // Header
97084                 var header = selection.selectAll('.header')
97085                     .data([0]);
97086
97087                 // Enter
97088                 var headerEnter = header.enter()
97089                     .append('div')
97090                     .attr('class', 'header fillL cf');
97091
97092                 headerEnter
97093                     .append('button')
97094                     .attr('class', 'fl preset-reset preset-choose')
97095                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
97096
97097                 headerEnter
97098                     .append('button')
97099                     .attr('class', 'fr preset-close')
97100                     .on('click', function() { context.enter(modeBrowse(context)); })
97101                     .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
97102
97103                 headerEnter
97104                     .append('h3')
97105                     .text(t('inspector.edit'));
97106
97107                 // Update
97108                 header = header
97109                     .merge(headerEnter);
97110
97111                 header.selectAll('.preset-reset')
97112                     .on('click', function() {
97113                         dispatch$1.call('choose', this, _activePreset);
97114                     });
97115
97116
97117                 // Body
97118                 var body = selection.selectAll('.inspector-body')
97119                     .data([0]);
97120
97121                 // Enter
97122                 var bodyEnter = body.enter()
97123                     .append('div')
97124                     .attr('class', 'inspector-body')
97125                     .on('scroll.entity-editor', function() { _scrolled = true; });
97126
97127                 bodyEnter
97128                     .append('div')
97129                     .attr('class', 'preset-list-item inspector-inner')
97130                     .append('div')
97131                     .attr('class', 'preset-list-button-wrap')
97132                     .append('button')
97133                     .attr('class', 'preset-list-button preset-reset')
97134                     .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
97135                     .append('div')
97136                     .attr('class', 'label')
97137                     .append('div')
97138                     .attr('class', 'label-inner');
97139
97140                 bodyEnter
97141                     .append('div')
97142                     .attr('class', 'preset-quick-links');
97143
97144                 bodyEnter
97145                     .append('div')
97146                     .attr('class', 'entity-issues');
97147
97148                 bodyEnter
97149                     .append('div')
97150                     .attr('class', 'preset-editor');
97151
97152                 bodyEnter
97153                     .append('div')
97154                     .attr('class', 'raw-tag-editor inspector-inner');
97155
97156                 bodyEnter
97157                     .append('div')
97158                     .attr('class', 'raw-member-editor inspector-inner');
97159
97160                 bodyEnter
97161                     .append('div')
97162                     .attr('class', 'raw-membership-editor inspector-inner');
97163
97164                 bodyEnter
97165                     .append('input')
97166                     .attr('type', 'text')
97167                     .attr('class', 'key-trap');
97168
97169
97170                 // Update
97171                 body = body
97172                     .merge(bodyEnter);
97173
97174                 if (_presetFavorite) {
97175                     body.selectAll('.preset-list-button-wrap')
97176                         .call(_presetFavorite.button);
97177                 }
97178
97179                 // update header
97180                 if (_tagReference) {
97181                     body.selectAll('.preset-list-button-wrap')
97182                         .call(_tagReference.button);
97183
97184                     body.selectAll('.preset-list-item')
97185                         .call(_tagReference.body);
97186                 }
97187
97188                 body.selectAll('.preset-reset')
97189                     .on('click', function() {
97190                         dispatch$1.call('choose', this, _activePreset);
97191                     });
97192
97193                 body.select('.preset-list-item button')
97194                     .call(uiPresetIcon(context)
97195                         .geometry(context.geometry(_entityID))
97196                         .preset(_activePreset)
97197                     );
97198
97199                 // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
97200                 var label = body.select('.label-inner');
97201                 var nameparts = label.selectAll('.namepart')
97202                     .data(_activePreset.name().split(' – '), function(d) { return d; });
97203
97204                 nameparts.exit()
97205                     .remove();
97206
97207                 nameparts
97208                     .enter()
97209                     .append('div')
97210                     .attr('class', 'namepart')
97211                     .text(function(d) { return d; });
97212
97213                 // update quick links
97214                 var choices = [{
97215                     id: 'zoom_to',
97216                     label: 'inspector.zoom_to.title',
97217                     tooltip: function() {
97218                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
97219                     },
97220                     click: function zoomTo() {
97221                         context.mode().zoomToSelected();
97222                     }
97223                 }];
97224
97225                 body.select('.preset-quick-links')
97226                     .call(quickLinks.choices(choices));
97227
97228
97229                 // update editor sections
97230                 body.select('.entity-issues')
97231                     .call(entityIssues
97232                         .entityID(_entityID)
97233                     );
97234
97235                 body.select('.preset-editor')
97236                     .call(presetEditor
97237                         .preset(_activePreset)
97238                         .entityID(_entityID)
97239                         .tags(tags)
97240                         .state(_state)
97241                     );
97242
97243                 body.select('.raw-tag-editor')
97244                     .call(rawTagEditor
97245                         .preset(_activePreset)
97246                         .entityID(_entityID)
97247                         .tags(tags)
97248                         .state(_state)
97249                     );
97250
97251                 if (entity.type === 'relation') {
97252                     body.select('.raw-member-editor')
97253                         .style('display', 'block')
97254                         .call(rawMemberEditor
97255                             .entityID(_entityID)
97256                         );
97257                 } else {
97258                     body.select('.raw-member-editor')
97259                         .style('display', 'none');
97260                 }
97261
97262                 body.select('.raw-membership-editor')
97263                     .call(rawMembershipEditor
97264                         .entityID(_entityID)
97265                     );
97266
97267                 body.select('.key-trap')
97268                     .on('keydown.key-trap', function() {
97269                         // On tabbing, send focus back to the first field on the inspector-body
97270                         // (probably the `name` field) #4159
97271                         if (event.keyCode === 9 && !event.shiftKey) {
97272                             event.preventDefault();
97273                             body.select('input').node().focus();
97274                         }
97275                     });
97276
97277                 context.history()
97278                     .on('change.entity-editor', historyChanged);
97279
97280
97281                 function historyChanged(difference) {
97282                     if (_state === 'hide') return;
97283                     var significant = !difference ||
97284                             difference.didChange.properties ||
97285                             difference.didChange.addition ||
97286                             difference.didChange.deletion;
97287                     if (!significant) return;
97288
97289                     var entity = context.hasEntity(_entityID);
97290                     var graph = context.graph();
97291                     if (!entity) return;
97292
97293                     var match = context.presets().match(entity, graph);
97294                     var activePreset = entityEditor.preset();
97295                     var weakPreset = activePreset &&
97296                         Object.keys(activePreset.addTags || {}).length === 0;
97297
97298                     // A "weak" preset doesn't set any tags. (e.g. "Address")
97299                     // Don't replace a weak preset with a fallback preset (e.g. "Point")
97300                     if (!(weakPreset && match.isFallback())) {
97301                         entityEditor.preset(match);
97302                     }
97303                     entityEditor.modified(_base !== graph);
97304                     entityEditor(selection);
97305                 }
97306             }
97307
97308
97309             // Tag changes that fire on input can all get coalesced into a single
97310             // history operation when the user leaves the field.  #2342
97311             function changeTags(changed, onInput) {
97312                 var entity = context.entity(_entityID);
97313                 var annotation = t('operations.change_tags.annotation');
97314                 var tags = Object.assign({}, entity.tags);   // shallow copy
97315
97316                 for (var k in changed) {
97317                     if (!k) continue;
97318                     var v = changed[k];
97319                     if (v !== undefined || tags.hasOwnProperty(k)) {
97320                         tags[k] = v;
97321                     }
97322                 }
97323
97324                 if (!onInput) {
97325                     tags = utilCleanTags(tags);
97326                 }
97327
97328                 if (!fastDeepEqual(entity.tags, tags)) {
97329                     if (_coalesceChanges) {
97330                         context.overwrite(actionChangeTags(_entityID, tags), annotation);
97331                     } else {
97332                         context.perform(actionChangeTags(_entityID, tags), annotation);
97333                         _coalesceChanges = !!onInput;
97334                     }
97335                 }
97336
97337                 // if leaving field (blur event), rerun validation
97338                 if (!onInput) {
97339                     context.validator().validate();
97340                 }
97341             }
97342
97343
97344             entityEditor.modified = function(val) {
97345                 if (!arguments.length) return _modified;
97346                 _modified = val;
97347                 d3_selectAll('button.preset-close use')
97348                     .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
97349                 return entityEditor;
97350             };
97351
97352
97353             entityEditor.state = function(val) {
97354                 if (!arguments.length) return _state;
97355                 _state = val;
97356                 return entityEditor;
97357             };
97358
97359
97360             entityEditor.entityID = function(val) {
97361                 if (!arguments.length) return _entityID;
97362                 if (_entityID === val) return entityEditor;  // exit early if no change
97363
97364                 _entityID = val;
97365                 _base = context.graph();
97366                 _coalesceChanges = false;
97367
97368                 // reset the scroll to the top of the inspector (warning: triggers reflow)
97369                 if (_scrolled) {
97370                     window.requestIdleCallback(function() {
97371                         var body = d3_selectAll('.entity-editor-pane .inspector-body');
97372                         if (!body.empty()) {
97373                             _scrolled = false;
97374                             body.node().scrollTop = 0;
97375                         }
97376                     });
97377                 }
97378
97379                 var presetMatch = context.presets().match(context.entity(_entityID), _base);
97380
97381                 return entityEditor
97382                     .preset(presetMatch)
97383                     .modified(false);
97384             };
97385
97386
97387             entityEditor.preset = function(val) {
97388                 if (!arguments.length) return _activePreset;
97389                 if (val !== _activePreset) {
97390                     _activePreset = val;
97391                     _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)))
97392                         .showing(false);
97393                 }
97394                 _presetFavorite = uiPresetFavoriteButton(_activePreset, context.geometry(_entityID), context);
97395                 return entityEditor;
97396             };
97397
97398
97399             return utilRebind(entityEditor, dispatch$1, 'on');
97400         }
97401
97402         function uiPresetList(context) {
97403             var dispatch$1 = dispatch('choose');
97404             var _entityID;
97405             var _currentPreset;
97406             var _autofocus = false;
97407             var geocoder = services$1.geocoder;
97408
97409
97410             function presetList(selection) {
97411                 var entity = context.entity(_entityID);
97412                 var geometry = context.geometry(_entityID);
97413
97414                 // Treat entities on addr:interpolation lines as points, not vertices (#3241)
97415                 if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
97416                     geometry = 'point';
97417                 }
97418
97419                 var presets = context.presets().matchGeometry(geometry);
97420
97421                 selection.html('');
97422
97423                 var messagewrap = selection
97424                     .append('div')
97425                     .attr('class', 'header fillL');
97426
97427                 var message = messagewrap
97428                     .append('h3')
97429                     .text(t('inspector.choose'));
97430
97431                 messagewrap
97432                     .append('button')
97433                     .attr('class', 'preset-choose')
97434                     .on('click', function() { dispatch$1.call('choose', this, _currentPreset); })
97435                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
97436
97437                 function initialKeydown() {
97438                     // hack to let delete shortcut work when search is autofocused
97439                     if (search.property('value').length === 0 &&
97440                         (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
97441                          event.keyCode === utilKeybinding.keyCodes['⌦'])) {
97442                         event.preventDefault();
97443                         event.stopPropagation();
97444                         operationDelete([_entityID], context)();
97445
97446                     // hack to let undo work when search is autofocused
97447                     } else if (search.property('value').length === 0 &&
97448                         (event.ctrlKey || event.metaKey) &&
97449                         event.keyCode === utilKeybinding.keyCodes.z) {
97450                         event.preventDefault();
97451                         event.stopPropagation();
97452                         context.undo();
97453                     } else if (!event.ctrlKey && !event.metaKey) {
97454                         // don't check for delete/undo hack on future keydown events
97455                         d3_select(this).on('keydown', keydown);
97456                         keydown.call(this);
97457                     }
97458                 }
97459
97460                 function keydown() {
97461                     // down arrow
97462                     if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
97463                         // if insertion point is at the end of the string
97464                         search.node().selectionStart === search.property('value').length) {
97465                         event.preventDefault();
97466                         event.stopPropagation();
97467                         // move focus to the first item in the preset list
97468                         var buttons = list.selectAll('.preset-list-button');
97469                         if (!buttons.empty()) buttons.nodes()[0].focus();
97470                     }
97471                 }
97472
97473                 function keypress() {
97474                     // enter
97475                     var value = search.property('value');
97476                     if (event.keyCode === 13 && value.length) {
97477                         list.selectAll('.preset-list-item:first-child')
97478                             .each(function(d) { d.choose.call(this); });
97479                     }
97480                 }
97481
97482                 function inputevent() {
97483                     var value = search.property('value');
97484                     list.classed('filtered', value.length);
97485                     if (value.length) {
97486                         var entity = context.entity(_entityID);
97487                         if (geocoder && entity) {
97488                             var center = entity.extent(context.graph()).center();
97489                             geocoder.countryCode(center, function countryCallback(err, countryCode) {
97490                                 // get the input value again because it may have changed
97491                                 var currentValue = search.property('value');
97492
97493                                 if (!currentValue.length) return;
97494
97495                                 var results;
97496                                 if (!err && countryCode) {
97497                                     countryCode = countryCode.toLowerCase();
97498                                     results = presets.search(currentValue, geometry, countryCode);
97499                                 } else {
97500                                     results = presets.search(currentValue, geometry);
97501                                 }
97502                                 message.text(t('inspector.results', {
97503                                     n: results.collection.length,
97504                                     search: currentValue
97505                                 }));
97506                                 list.call(drawList, results);
97507                             });
97508                         }
97509                     } else {
97510                         list.call(drawList, context.presets().defaults(geometry, 36));
97511                         message.text(t('inspector.choose'));
97512                     }
97513                 }
97514
97515                 var searchWrap = selection
97516                     .append('div')
97517                     .attr('class', 'search-header');
97518
97519                 var search = searchWrap
97520                     .append('input')
97521                     .attr('class', 'preset-search-input')
97522                     .attr('placeholder', t('inspector.search'))
97523                     .attr('type', 'search')
97524                     .call(utilNoAuto)
97525                     .on('keydown', initialKeydown)
97526                     .on('keypress', keypress)
97527                     .on('input', inputevent);
97528
97529                 searchWrap
97530                     .call(svgIcon('#iD-icon-search', 'pre-text'));
97531
97532                 if (_autofocus) {
97533                     search.node().focus();
97534                 }
97535
97536                 var listWrap = selection
97537                     .append('div')
97538                     .attr('class', 'inspector-body');
97539
97540                 var list = listWrap
97541                     .append('div')
97542                     .attr('class', 'preset-list fillL cf')
97543                     .call(drawList, context.presets().defaults(geometry, 36));
97544
97545                 context.features().on('change.preset-list', updateForFeatureHiddenState);
97546             }
97547
97548
97549             function drawList(list, presets) {
97550                 var collection = presets.collection.reduce(function(collection, preset) {
97551                     if (preset.members) {
97552                         if (preset.members.collection.filter(function(preset) {
97553                             return preset.visible();
97554                         }).length > 1) {
97555                             collection.push(CategoryItem(preset));
97556                         }
97557                     } else if (preset.visible()) {
97558                         collection.push(PresetItem(preset));
97559                     }
97560                     return collection;
97561                 }, []);
97562
97563                 var items = list.selectAll('.preset-list-item')
97564                     .data(collection, function(d) { return d.preset.id; });
97565
97566                 items.order();
97567
97568                 items.exit()
97569                     .remove();
97570
97571                 items.enter()
97572                     .append('div')
97573                     .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
97574                     .classed('current', function(item) { return item.preset === _currentPreset; })
97575                     .each(function(item) { d3_select(this).call(item); })
97576                     .style('opacity', 0)
97577                     .transition()
97578                     .style('opacity', 1);
97579
97580                 updateForFeatureHiddenState();
97581             }
97582
97583             function itemKeydown(){
97584                 // the actively focused item
97585                 var item = d3_select(this.closest('.preset-list-item'));
97586                 var parentItem = d3_select(item.node().parentNode.closest('.preset-list-item'));
97587
97588                 // arrow down, move focus to the next, lower item
97589                 if (event.keyCode === utilKeybinding.keyCodes['↓']) {
97590                     event.preventDefault();
97591                     event.stopPropagation();
97592                     // the next item in the list at the same level
97593                     var nextItem = d3_select(item.node().nextElementSibling);
97594                     // if there is no next item in this list
97595                     if (nextItem.empty()) {
97596                         // if there is a parent item
97597                         if (!parentItem.empty()) {
97598                             // the item is the last item of a sublist,
97599                             // select the next item at the parent level
97600                             nextItem = d3_select(parentItem.node().nextElementSibling);
97601                         }
97602                     // if the focused item is expanded
97603                     } else if (d3_select(this).classed('expanded')) {
97604                         // select the first subitem instead
97605                         nextItem = item.select('.subgrid .preset-list-item:first-child');
97606                     }
97607                     if (!nextItem.empty()) {
97608                         // focus on the next item
97609                         nextItem.select('.preset-list-button').node().focus();
97610                     }
97611
97612                 // arrow up, move focus to the previous, higher item
97613                 } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
97614                     event.preventDefault();
97615                     event.stopPropagation();
97616                     // the previous item in the list at the same level
97617                     var previousItem = d3_select(item.node().previousElementSibling);
97618
97619                     // if there is no previous item in this list
97620                     if (previousItem.empty()) {
97621                         // if there is a parent item
97622                         if (!parentItem.empty()) {
97623                             // the item is the first subitem of a sublist select the parent item
97624                             previousItem = parentItem;
97625                         }
97626                     // if the previous item is expanded
97627                     } else if (previousItem.select('.preset-list-button').classed('expanded')) {
97628                         // select the last subitem of the sublist of the previous item
97629                         previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
97630                     }
97631
97632                     if (!previousItem.empty()) {
97633                         // focus on the previous item
97634                         previousItem.select('.preset-list-button').node().focus();
97635                     } else {
97636                         // the focus is at the top of the list, move focus back to the search field
97637                         var search = d3_select(this.closest('.preset-list-pane')).select('.preset-search-input');
97638                         search.node().focus();
97639                     }
97640
97641                 // arrow left, move focus to the parent item if there is one
97642                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
97643                     event.preventDefault();
97644                     event.stopPropagation();
97645                     // if there is a parent item, focus on the parent item
97646                     if (!parentItem.empty()) {
97647                         parentItem.select('.preset-list-button').node().focus();
97648                     }
97649
97650                 // arrow right, choose this item
97651                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
97652                     event.preventDefault();
97653                     event.stopPropagation();
97654                     item.datum().choose.call(d3_select(this).node());
97655                 }
97656             }
97657
97658
97659             function CategoryItem(preset) {
97660                 var box, sublist, shown = false;
97661
97662                 function item(selection) {
97663                     var wrap = selection.append('div')
97664                         .attr('class', 'preset-list-button-wrap category');
97665
97666                     function click() {
97667                         var isExpanded = d3_select(this).classed('expanded');
97668                         var iconName = isExpanded ?
97669                             (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
97670                         d3_select(this)
97671                             .classed('expanded', !isExpanded);
97672                         d3_select(this).selectAll('div.label-inner svg.icon use')
97673                             .attr('href', iconName);
97674                         item.choose();
97675                     }
97676
97677                     var button = wrap
97678                         .append('button')
97679                         .attr('class', 'preset-list-button')
97680                         .classed('expanded', false)
97681                         .call(uiPresetIcon(context)
97682                             .geometry(context.geometry(_entityID))
97683                             .preset(preset))
97684                         .on('click', click)
97685                         .on('keydown', function() {
97686                             // right arrow, expand the focused item
97687                             if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
97688                                 event.preventDefault();
97689                                 event.stopPropagation();
97690                                 // if the item isn't expanded
97691                                 if (!d3_select(this).classed('expanded')) {
97692                                     // toggle expansion (expand the item)
97693                                     click.call(this);
97694                                 }
97695                             // left arrow, collapse the focused item
97696                             } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
97697                                 event.preventDefault();
97698                                 event.stopPropagation();
97699                                 // if the item is expanded
97700                                 if (d3_select(this).classed('expanded')) {
97701                                     // toggle expansion (collapse the item)
97702                                     click.call(this);
97703                                 }
97704                             } else {
97705                                 itemKeydown.call(this);
97706                             }
97707                         });
97708
97709                     var label = button
97710                         .append('div')
97711                         .attr('class', 'label')
97712                         .append('div')
97713                         .attr('class', 'label-inner');
97714
97715                     label
97716                         .append('div')
97717                         .attr('class', 'namepart')
97718                         .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
97719                         .append('span')
97720                         .html(function() { return preset.name() + '&hellip;'; });
97721
97722                     box = selection.append('div')
97723                         .attr('class', 'subgrid')
97724                         .style('max-height', '0px')
97725                         .style('opacity', 0);
97726
97727                     box.append('div')
97728                         .attr('class', 'arrow');
97729
97730                     sublist = box.append('div')
97731                         .attr('class', 'preset-list fillL3');
97732                 }
97733
97734
97735                 item.choose = function() {
97736                     if (!box || !sublist) return;
97737
97738                     if (shown) {
97739                         shown = false;
97740                         box.transition()
97741                             .duration(200)
97742                             .style('opacity', '0')
97743                             .style('max-height', '0px')
97744                             .style('padding-bottom', '0px');
97745                     } else {
97746                         shown = true;
97747                         var members = preset.members.matchGeometry(context.geometry(_entityID));
97748                         sublist.call(drawList, members);
97749                         box.transition()
97750                             .duration(200)
97751                             .style('opacity', '1')
97752                             .style('max-height', 200 + members.collection.length * 190 + 'px')
97753                             .style('padding-bottom', '10px');
97754                     }
97755                 };
97756
97757                 item.preset = preset;
97758                 return item;
97759             }
97760
97761
97762             function PresetItem(preset) {
97763                 function item(selection) {
97764                     var wrap = selection.append('div')
97765                         .attr('class', 'preset-list-button-wrap');
97766
97767                     var button = wrap.append('button')
97768                         .attr('class', 'preset-list-button')
97769                         .call(uiPresetIcon(context)
97770                             .geometry(context.geometry(_entityID))
97771                             .preset(preset))
97772                         .on('click', item.choose)
97773                         .on('keydown', itemKeydown);
97774
97775                     var label = button
97776                         .append('div')
97777                         .attr('class', 'label')
97778                         .append('div')
97779                         .attr('class', 'label-inner');
97780
97781                     // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
97782                     label.selectAll('.namepart')
97783                         .data(preset.name().split(' – '))
97784                         .enter()
97785                         .append('div')
97786                         .attr('class', 'namepart')
97787                         .text(function(d) { return d; });
97788
97789                     wrap.call(item.reference.button);
97790                     selection.call(item.reference.body);
97791                 }
97792
97793                 item.choose = function() {
97794                     if (d3_select(this).classed('disabled')) return;
97795
97796                     context.presets().setMostRecent(preset, context.geometry(_entityID));
97797                     context.perform(
97798                         actionChangePreset(_entityID, _currentPreset, preset),
97799                         t('operations.change_tags.annotation')
97800                     );
97801
97802                     context.validator().validate();  // rerun validation
97803                     dispatch$1.call('choose', this, preset);
97804                 };
97805
97806                 item.help = function() {
97807                     event.stopPropagation();
97808                     item.reference.toggle();
97809                 };
97810
97811                 item.preset = preset;
97812                 item.reference = uiTagReference(preset.reference(context.geometry(_entityID)));
97813
97814                 return item;
97815             }
97816
97817
97818             function updateForFeatureHiddenState() {
97819                 if (!context.hasEntity(_entityID)) return;
97820
97821                 var geometry = context.geometry(_entityID);
97822                 var button = d3_selectAll('.preset-list .preset-list-button');
97823
97824                 // remove existing tooltips
97825                 button.call(tooltip().destroyAny);
97826
97827                 button.each(function(item, index) {
97828                     var hiddenPresetFeaturesId = context.features().isHiddenPreset(item.preset, geometry);
97829                     var isHiddenPreset = !!hiddenPresetFeaturesId && item.preset !== _currentPreset;
97830
97831                     d3_select(this)
97832                         .classed('disabled', isHiddenPreset);
97833
97834                     if (isHiddenPreset) {
97835                         var isAutoHidden = context.features().autoHidden(hiddenPresetFeaturesId);
97836                         var tooltipIdSuffix = isAutoHidden ? 'zoom' : 'manual';
97837                         var tooltipObj = { features: t('feature.' + hiddenPresetFeaturesId + '.description') };
97838                         d3_select(this).call(tooltip()
97839                             .title(t('inspector.hidden_preset.' + tooltipIdSuffix, tooltipObj))
97840                             .placement(index < 2 ? 'bottom' : 'top')
97841                         );
97842                     }
97843                 });
97844             }
97845
97846             presetList.autofocus = function(val) {
97847                 if (!arguments.length) return _autofocus;
97848                 _autofocus = val;
97849                 return presetList;
97850             };
97851
97852
97853             presetList.entityID = function(val) {
97854                 if (!arguments.length) return _entityID;
97855                 _entityID = val;
97856                 presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
97857                 return presetList;
97858             };
97859
97860
97861             presetList.preset = function(val) {
97862                 if (!arguments.length) return _currentPreset;
97863                 _currentPreset = val;
97864                 return presetList;
97865             };
97866
97867
97868             return utilRebind(presetList, dispatch$1, 'on');
97869         }
97870
97871         function uiInspector(context) {
97872             var presetList = uiPresetList(context);
97873             var entityEditor = uiEntityEditor(context);
97874             var wrap = d3_select(null),
97875                 presetPane = d3_select(null),
97876                 editorPane = d3_select(null);
97877             var _state = 'select';
97878             var _entityID;
97879             var _newFeature = false;
97880
97881
97882             function inspector(selection, newFeature) {
97883                 presetList
97884                     .entityID(_entityID)
97885                     .autofocus(_newFeature)
97886                     .on('choose', inspector.setPreset);
97887
97888                 entityEditor
97889                     .state(_state)
97890                     .entityID(_entityID)
97891                     .on('choose', inspector.showList);
97892
97893                 wrap = selection.selectAll('.panewrap')
97894                     .data([0]);
97895
97896                 var enter = wrap.enter()
97897                     .append('div')
97898                     .attr('class', 'panewrap');
97899
97900                 enter
97901                     .append('div')
97902                     .attr('class', 'preset-list-pane pane');
97903
97904                 enter
97905                     .append('div')
97906                     .attr('class', 'entity-editor-pane pane');
97907
97908                 wrap = wrap.merge(enter);
97909                 presetPane = wrap.selectAll('.preset-list-pane');
97910                 editorPane = wrap.selectAll('.entity-editor-pane');
97911
97912                 var entity = context.entity(_entityID);
97913
97914                 var hasNonGeometryTags = entity.hasNonGeometryTags();
97915                 var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
97916                     (!hasNonGeometryTags && !entity.isHighwayIntersection(context.graph()));
97917                 var issues = context.validator().getEntityIssues(_entityID);
97918                 // start with the preset list if the feature is new and untagged or is an uninteresting vertex
97919                 var showPresetList = (newFeature && !hasNonGeometryTags) || (isTaglessOrIntersectionVertex && !issues.length);
97920
97921                 if (showPresetList) {
97922                     wrap.style('right', '-100%');
97923                     presetPane.call(presetList);
97924                 } else {
97925                     wrap.style('right', '0%');
97926                     editorPane.call(entityEditor);
97927                 }
97928
97929                 var footer = selection.selectAll('.footer')
97930                     .data([0]);
97931
97932                 footer = footer.enter()
97933                     .append('div')
97934                     .attr('class', 'footer')
97935                     .merge(footer);
97936
97937                 footer
97938                     .call(uiViewOnOSM(context)
97939                         .what(context.hasEntity(_entityID))
97940                     );
97941             }
97942
97943             inspector.showList = function(preset) {
97944                 wrap.transition()
97945                     .styleTween('right', function() { return d3_interpolate('0%', '-100%'); });
97946
97947                 presetPane
97948                     .call(presetList.preset(preset).autofocus(true));
97949             };
97950
97951             inspector.setPreset = function(preset) {
97952
97953                 // upon setting multipolygon, go to the area preset list instead of the editor
97954                 if (preset.id === 'type/multipolygon') {
97955                     presetPane
97956                         .call(presetList.preset(preset).autofocus(true));
97957
97958                 } else {
97959                     wrap.transition()
97960                         .styleTween('right', function() { return d3_interpolate('-100%', '0%'); });
97961
97962                     editorPane
97963                         .call(entityEditor.preset(preset));
97964                 }
97965
97966             };
97967
97968             inspector.state = function(val) {
97969                 if (!arguments.length) return _state;
97970                 _state = val;
97971                 entityEditor.state(_state);
97972
97973                 // remove any old field help overlay that might have gotten attached to the inspector
97974                 d3_selectAll('.field-help-body').remove();
97975
97976                 return inspector;
97977             };
97978
97979
97980             inspector.entityID = function(val) {
97981                 if (!arguments.length) return _entityID;
97982                 _entityID = val;
97983                 return inspector;
97984             };
97985
97986
97987             inspector.newFeature = function(val) {
97988                 if (!arguments.length) return _newFeature;
97989                 _newFeature = val;
97990                 return inspector;
97991             };
97992
97993
97994             return inspector;
97995         }
97996
97997         function uiSidebar(context) {
97998             var inspector = uiInspector(context);
97999             var dataEditor = uiDataEditor(context);
98000             var noteEditor = uiNoteEditor(context);
98001             var improveOsmEditor = uiImproveOsmEditor(context);
98002             var keepRightEditor = uiKeepRightEditor(context);
98003             var _current;
98004             var _wasData = false;
98005             var _wasNote = false;
98006             var _wasQAError = false;
98007
98008
98009             function sidebar(selection) {
98010                 var container = d3_select('#id-container');
98011                 var minWidth = 280;
98012                 var sidebarWidth;
98013                 var containerWidth;
98014                 var dragOffset;
98015
98016                 var resizer = selection
98017                     .append('div')
98018                     .attr('id', 'sidebar-resizer');
98019
98020                 // Set the initial width constraints
98021                 selection
98022                     .style('min-width', minWidth + 'px')
98023                     .style('max-width', '400px')
98024                     .style('width', '33.3333%');
98025
98026                 resizer.call(d3_drag()
98027                     .container(container.node())
98028                     .on('start', function() {
98029                         // offset from edge of sidebar-resizer
98030                         dragOffset = event.sourceEvent.offsetX - 1;
98031
98032                         sidebarWidth = selection.node().getBoundingClientRect().width;
98033                         containerWidth = container.node().getBoundingClientRect().width;
98034                         var widthPct = (sidebarWidth / containerWidth) * 100;
98035                         selection
98036                             .style('width', widthPct + '%')    // lock in current width
98037                             .style('max-width', '85%');        // but allow larger widths
98038
98039                         resizer.classed('dragging', true);
98040                     })
98041                     .on('drag', function() {
98042                         var isRTL = (textDirection === 'rtl');
98043                         var scaleX = isRTL ? 0 : 1;
98044                         var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
98045
98046                         var x = event.x - dragOffset;
98047                         sidebarWidth = isRTL ? containerWidth - x : x;
98048
98049                         var isCollapsed = selection.classed('collapsed');
98050                         var shouldCollapse = sidebarWidth < minWidth;
98051
98052                         selection.classed('collapsed', shouldCollapse);
98053
98054                         if (shouldCollapse) {
98055                             if (!isCollapsed) {
98056                                 selection
98057                                     .style(xMarginProperty, '-400px')
98058                                     .style('width', '400px');
98059
98060                                 context.ui().onResize([(sidebarWidth - event.dx) * scaleX, 0]);
98061                             }
98062
98063                         } else {
98064                             var widthPct = (sidebarWidth / containerWidth) * 100;
98065                             selection
98066                                 .style(xMarginProperty, null)
98067                                 .style('width', widthPct + '%');
98068
98069                             if (isCollapsed) {
98070                                 context.ui().onResize([-sidebarWidth * scaleX, 0]);
98071                             } else {
98072                                 context.ui().onResize([-event.dx * scaleX, 0]);
98073                             }
98074                         }
98075                     })
98076                     .on('end', function() {
98077                         resizer.classed('dragging', false);
98078                     })
98079                 );
98080
98081                 var featureListWrap = selection
98082                     .append('div')
98083                     .attr('class', 'feature-list-pane')
98084                     .call(uiFeatureList(context));
98085
98086                 var inspectorWrap = selection
98087                     .append('div')
98088                     .attr('class', 'inspector-hidden inspector-wrap fr');
98089
98090
98091                 function hover(datum) {
98092                     if (datum && datum.__featurehash__) {   // hovering on data
98093                         _wasData = true;
98094                         sidebar
98095                             .show(dataEditor.datum(datum));
98096
98097                         selection.selectAll('.sidebar-component')
98098                             .classed('inspector-hover', true);
98099
98100                     } else if (datum instanceof osmNote) {
98101                         if (context.mode().id === 'drag-note') return;
98102                         _wasNote = true;
98103
98104                         var osm = services$1.osm;
98105                         if (osm) {
98106                             datum = osm.getNote(datum.id);   // marker may contain stale data - get latest
98107                         }
98108
98109                         sidebar
98110                             .show(noteEditor.note(datum));
98111
98112                         selection.selectAll('.sidebar-component')
98113                             .classed('inspector-hover', true);
98114
98115                     } else if (datum instanceof qaError) {
98116                         _wasQAError = true;
98117
98118                         var errService = services$1[datum.service];
98119                         if (errService) {
98120                             // marker may contain stale data - get latest
98121                             datum = errService.getError(datum.id);
98122                         }
98123
98124                         // Temporary solution while only two services
98125                         var errEditor = (datum.service === 'keepRight') ? keepRightEditor : improveOsmEditor;
98126
98127                         d3_selectAll('.qa_error.' + datum.service)
98128                             .classed('hover', function(d) { return d.id === datum.id; });
98129
98130                         sidebar
98131                             .show(errEditor.error(datum));
98132
98133                         selection.selectAll('.sidebar-component')
98134                             .classed('inspector-hover', true);
98135
98136                     } else if (!_current && (datum instanceof osmEntity)) {
98137                         featureListWrap
98138                             .classed('inspector-hidden', true);
98139
98140                         inspectorWrap
98141                             .classed('inspector-hidden', false)
98142                             .classed('inspector-hover', true);
98143
98144                         if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
98145                             inspector
98146                                 .state('hover')
98147                                 .entityID(datum.id);
98148
98149                             inspectorWrap
98150                                 .call(inspector);
98151                         }
98152
98153                     } else if (!_current) {
98154                         featureListWrap
98155                             .classed('inspector-hidden', false);
98156                         inspectorWrap
98157                             .classed('inspector-hidden', true);
98158                         inspector
98159                             .state('hide');
98160
98161                     } else if (_wasData || _wasNote || _wasQAError) {
98162                         _wasNote = false;
98163                         _wasData = false;
98164                         _wasQAError = false;
98165                         d3_selectAll('.note').classed('hover', false);
98166                         d3_selectAll('.qa_error').classed('hover', false);
98167                         sidebar.hide();
98168                     }
98169                 }
98170
98171                 sidebar.hover = throttle(hover, 200);
98172
98173
98174                 sidebar.intersects = function(extent) {
98175                     var rect = selection.node().getBoundingClientRect();
98176                     return extent.intersects([
98177                         context.projection.invert([0, rect.height]),
98178                         context.projection.invert([rect.width, 0])
98179                     ]);
98180                 };
98181
98182
98183                 sidebar.select = function(id, newFeature) {
98184                     sidebar.hide();
98185
98186                     if (id) {
98187                         var entity = context.entity(id);
98188                         // uncollapse the sidebar
98189                         if (selection.classed('collapsed')) {
98190                             if (newFeature) {
98191                                 var extent = entity.extent(context.graph());
98192                                 sidebar.expand(sidebar.intersects(extent));
98193                             }
98194                         }
98195
98196                         featureListWrap
98197                             .classed('inspector-hidden', true);
98198
98199                         inspectorWrap
98200                             .classed('inspector-hidden', false)
98201                             .classed('inspector-hover', false);
98202
98203                         if (inspector.entityID() !== id || inspector.state() !== 'select') {
98204                             inspector
98205                                 .state('select')
98206                                 .entityID(id)
98207                                 .newFeature(newFeature);
98208
98209                             inspectorWrap
98210                                 .call(inspector, newFeature);
98211                         }
98212
98213                         sidebar.showPresetList = function() {
98214                             inspector.showList(context.presets().match(entity, context.graph()));
98215                         };
98216
98217                     } else {
98218                         inspector
98219                             .state('hide');
98220                     }
98221                 };
98222
98223
98224                 sidebar.show = function(component, element) {
98225                     featureListWrap
98226                         .classed('inspector-hidden', true);
98227                     inspectorWrap
98228                         .classed('inspector-hidden', true);
98229
98230                     if (_current) _current.remove();
98231                     _current = selection
98232                         .append('div')
98233                         .attr('class', 'sidebar-component')
98234                         .call(component, element);
98235                 };
98236
98237
98238                 sidebar.hide = function() {
98239                     featureListWrap
98240                         .classed('inspector-hidden', false);
98241                     inspectorWrap
98242                         .classed('inspector-hidden', true);
98243
98244                     if (_current) _current.remove();
98245                     _current = null;
98246                 };
98247
98248
98249                 sidebar.expand = function(moveMap) {
98250                     if (selection.classed('collapsed')) {
98251                         sidebar.toggle(moveMap);
98252                     }
98253                 };
98254
98255
98256                 sidebar.collapse = function(moveMap) {
98257                     if (!selection.classed('collapsed')) {
98258                         sidebar.toggle(moveMap);
98259                     }
98260                 };
98261
98262
98263                 sidebar.toggle = function(moveMap) {
98264                     var e = event;
98265                     if (e && e.sourceEvent) {
98266                         e.sourceEvent.preventDefault();
98267                     } else if (e) {
98268                         e.preventDefault();
98269                     }
98270
98271                     // Don't allow sidebar to toggle when the user is in the walkthrough.
98272                     if (context.inIntro()) return;
98273
98274                     var isCollapsed = selection.classed('collapsed');
98275                     var isCollapsing = !isCollapsed;
98276                     var isRTL = (textDirection === 'rtl');
98277                     var scaleX = isRTL ? 0 : 1;
98278                     var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
98279
98280                     sidebarWidth = selection.node().getBoundingClientRect().width;
98281
98282                     // switch from % to px
98283                     selection.style('width', sidebarWidth + 'px');
98284
98285                     var startMargin, endMargin, lastMargin;
98286                     if (isCollapsing) {
98287                         startMargin = lastMargin = 0;
98288                         endMargin = -sidebarWidth;
98289                     } else {
98290                         startMargin = lastMargin = -sidebarWidth;
98291                         endMargin = 0;
98292                     }
98293
98294                     selection.transition()
98295                         .style(xMarginProperty, endMargin + 'px')
98296                         .tween('panner', function() {
98297                             var i = d3_interpolateNumber(startMargin, endMargin);
98298                             return function(t) {
98299                                 var dx = lastMargin - Math.round(i(t));
98300                                 lastMargin = lastMargin - dx;
98301                                 context.ui().onResize(moveMap ? undefined : [dx * scaleX, 0]);
98302                             };
98303                         })
98304                         .on('end', function() {
98305                             selection.classed('collapsed', isCollapsing);
98306
98307                             // switch back from px to %
98308                             if (!isCollapsing) {
98309                                 var containerWidth = container.node().getBoundingClientRect().width;
98310                                 var widthPct = (sidebarWidth / containerWidth) * 100;
98311                                 selection
98312                                     .style(xMarginProperty, null)
98313                                     .style('width', widthPct + '%');
98314                             }
98315                         });
98316                 };
98317
98318                 // toggle the sidebar collapse when double-clicking the resizer
98319                 resizer.on('dblclick', sidebar.toggle);
98320             }
98321
98322             sidebar.showPresetList = function() {};
98323             sidebar.hover = function() {};
98324             sidebar.hover.cancel = function() {};
98325             sidebar.intersects = function() {};
98326             sidebar.select = function() {};
98327             sidebar.show = function() {};
98328             sidebar.hide = function() {};
98329             sidebar.expand = function() {};
98330             sidebar.collapse = function() {};
98331             sidebar.toggle = function() {};
98332
98333             return sidebar;
98334         }
98335
98336         function uiSpinner(context) {
98337             var osm = context.connection();
98338
98339
98340             return function(selection) {
98341                 var img = selection
98342                     .append('img')
98343                     .attr('src', context.imagePath('loader-black.gif'))
98344                     .style('opacity', 0);
98345
98346                 if (osm) {
98347                     osm
98348                         .on('loading.spinner', function() {
98349                             img.transition()
98350                                 .style('opacity', 1);
98351                         })
98352                         .on('loaded.spinner', function() {
98353                             img.transition()
98354                                 .style('opacity', 0);
98355                         });
98356                 }
98357             };
98358         }
98359
98360         function uiSplash(context) {
98361
98362             return function(selection) {
98363                 if (context.storage('sawSplash'))
98364                      return;
98365
98366                 context.storage('sawSplash', true);
98367
98368                 var modalSelection = uiModal(selection);
98369
98370                 modalSelection.select('.modal')
98371                     .attr('class', 'modal-splash modal');
98372
98373                 var introModal = modalSelection.select('.content')
98374                     .append('div')
98375                     .attr('class', 'fillL');
98376
98377                 introModal
98378                     .append('div')
98379                     .attr('class','modal-section')
98380                     .append('h3').text(t('splash.welcome'));
98381
98382                 introModal
98383                     .append('div')
98384                     .attr('class','modal-section')
98385                     .append('p')
98386                     .html(t('splash.text', {
98387                         version: context.version,
98388                         website: '<a href="http://ideditor.com/">ideditor.com</a>',
98389                         github: '<a href="https://github.com/openstreetmap/iD">github.com</a>'
98390                     }));
98391
98392                 var buttonWrap = introModal
98393                     .append('div')
98394                     .attr('class', 'modal-actions');
98395
98396                 var walkthrough = buttonWrap
98397                     .append('button')
98398                     .attr('class', 'walkthrough')
98399                     .on('click', function() {
98400                         context.container().call(uiIntro(context));
98401                         modalSelection.close();
98402                     });
98403
98404                 walkthrough
98405                     .append('svg')
98406                     .attr('class', 'logo logo-walkthrough')
98407                     .append('use')
98408                     .attr('xlink:href', '#iD-logo-walkthrough');
98409
98410                 walkthrough
98411                     .append('div')
98412                     .text(t('splash.walkthrough'));
98413
98414                 var startEditing = buttonWrap
98415                     .append('button')
98416                     .attr('class', 'start-editing')
98417                     .on('click', modalSelection.close);
98418
98419                 startEditing
98420                     .append('svg')
98421                     .attr('class', 'logo logo-features')
98422                     .append('use')
98423                     .attr('xlink:href', '#iD-logo-features');
98424
98425                 startEditing
98426                     .append('div')
98427                     .text(t('splash.start'));
98428
98429
98430                 modalSelection.select('button.close')
98431                     .attr('class','hide');
98432
98433             };
98434         }
98435
98436         function uiStatus(context) {
98437             var osm = context.connection();
98438
98439
98440             return function(selection) {
98441                 if (!osm) return;
98442
98443                 function update() {
98444                     osm.status(function(err, apiStatus) {
98445                         selection.html('');
98446
98447                         if (err) {
98448                             if (apiStatus === 'connectionSwitched') {
98449                                 // if the connection was just switched, we can't rely on
98450                                 // the status (we're getting the status of the previous api)
98451                                 return;
98452
98453                             } else if (apiStatus === 'rateLimited') {
98454                                 selection
98455                                     .text(t('status.rateLimit'))
98456                                     .append('a')
98457                                     .attr('class', 'api-status-login')
98458                                     .attr('target', '_blank')
98459                                     .call(svgIcon('#iD-icon-out-link', 'inline'))
98460                                     .append('span')
98461                                     .text(t('login'))
98462                                     .on('click.login', function() {
98463                                         event.preventDefault();
98464                                         osm.authenticate();
98465                                     });
98466                             } else {
98467                                 // eslint-disable-next-line no-warning-comments
98468                                 // TODO: nice messages for different error types
98469                                 selection.text(t('status.error'));
98470                             }
98471
98472                         } else if (apiStatus === 'readonly') {
98473                             selection.text(t('status.readonly'));
98474                         } else if (apiStatus === 'offline') {
98475                             selection.text(t('status.offline'));
98476                         }
98477
98478                         selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
98479                     });
98480                 }
98481
98482                 osm.on('change', function() { update(); });
98483
98484                 window.setInterval(update, 90000);
98485                 update();
98486             };
98487         }
98488
98489         function modeDrawArea(context, wayID, startGraph, baselineGraph, button) {
98490             var mode = {
98491                 button: button,
98492                 id: 'draw-area'
98493             };
98494
98495             var behavior;
98496
98497             mode.wayID = wayID;
98498
98499             mode.enter = function() {
98500                 var way = context.entity(wayID);
98501
98502                 behavior = behaviorDrawWay(context, wayID, undefined, mode, startGraph, baselineGraph)
98503                     .tail(t('modes.draw_area.tail'));
98504
98505                 var addNode = behavior.addNode;
98506
98507                 behavior.addNode = function(node, d) {
98508                     var length = way.nodes.length;
98509                     var penultimate = length > 2 ? way.nodes[length - 2] : null;
98510
98511                     if (node.id === way.first() || node.id === penultimate) {
98512                         behavior.finish();
98513                     } else {
98514                         addNode(node, d);
98515                     }
98516                 };
98517
98518                 context.install(behavior);
98519             };
98520
98521
98522             mode.exit = function() {
98523                 context.uninstall(behavior);
98524             };
98525
98526
98527             mode.selectedIDs = function() {
98528                 return [wayID];
98529             };
98530
98531
98532             mode.activeID = function() {
98533                 return (behavior && behavior.activeID()) || [];
98534             };
98535
98536
98537             return mode;
98538         }
98539
98540         function modeAddArea(context, mode) {
98541             mode.id = 'add-area';
98542
98543             var behavior = behaviorAddWay(context)
98544                 .tail(t('modes.add_area.tail'))
98545                 .on('start', start)
98546                 .on('startFromWay', startFromWay)
98547                 .on('startFromNode', startFromNode);
98548
98549             var defaultTags = { area: 'yes' };
98550             if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'area');
98551
98552
98553             function actionClose(wayId) {
98554                 return function (graph) {
98555                     return graph.replace(graph.entity(wayId).close());
98556                 };
98557             }
98558
98559
98560             function start(loc) {
98561                 var startGraph = context.graph();
98562                 var node = osmNode({ loc: loc });
98563                 var way = osmWay({ tags: defaultTags });
98564
98565                 context.perform(
98566                     actionAddEntity(node),
98567                     actionAddEntity(way),
98568                     actionAddVertex(way.id, node.id),
98569                     actionClose(way.id)
98570                 );
98571
98572                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
98573             }
98574
98575
98576             function startFromWay(loc, edge) {
98577                 var startGraph = context.graph();
98578                 var node = osmNode({ loc: loc });
98579                 var way = osmWay({ tags: defaultTags });
98580
98581                 context.perform(
98582                     actionAddEntity(node),
98583                     actionAddEntity(way),
98584                     actionAddVertex(way.id, node.id),
98585                     actionClose(way.id),
98586                     actionAddMidpoint({ loc: loc, edge: edge }, node)
98587                 );
98588
98589                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
98590             }
98591
98592
98593             function startFromNode(node) {
98594                 var startGraph = context.graph();
98595                 var way = osmWay({ tags: defaultTags });
98596
98597                 context.perform(
98598                     actionAddEntity(way),
98599                     actionAddVertex(way.id, node.id),
98600                     actionClose(way.id)
98601                 );
98602
98603                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
98604             }
98605
98606
98607             mode.enter = function() {
98608                 context.install(behavior);
98609             };
98610
98611
98612             mode.exit = function() {
98613                 context.uninstall(behavior);
98614             };
98615
98616
98617             return mode;
98618         }
98619
98620         function modeAddLine(context, mode) {
98621             mode.id = 'add-line';
98622
98623             var behavior = behaviorAddWay(context)
98624                 .tail(t('modes.add_line.tail'))
98625                 .on('start', start)
98626                 .on('startFromWay', startFromWay)
98627                 .on('startFromNode', startFromNode);
98628
98629             var defaultTags = {};
98630             if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'line');
98631
98632
98633             function start(loc) {
98634                 var startGraph = context.graph();
98635                 var node = osmNode({ loc: loc });
98636                 var way = osmWay({ tags: defaultTags });
98637
98638                 context.perform(
98639                     actionAddEntity(node),
98640                     actionAddEntity(way),
98641                     actionAddVertex(way.id, node.id)
98642                 );
98643
98644                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
98645             }
98646
98647
98648             function startFromWay(loc, edge) {
98649                 var startGraph = context.graph();
98650                 var node = osmNode({ loc: loc });
98651                 var way = osmWay({ tags: defaultTags });
98652
98653                 context.perform(
98654                     actionAddEntity(node),
98655                     actionAddEntity(way),
98656                     actionAddVertex(way.id, node.id),
98657                     actionAddMidpoint({ loc: loc, edge: edge }, node)
98658                 );
98659
98660                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
98661             }
98662
98663
98664             function startFromNode(node) {
98665                 var startGraph = context.graph();
98666                 var way = osmWay({ tags: defaultTags });
98667
98668                 context.perform(
98669                     actionAddEntity(way),
98670                     actionAddVertex(way.id, node.id)
98671                 );
98672
98673                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
98674             }
98675
98676
98677             mode.enter = function() {
98678                 context.install(behavior);
98679             };
98680
98681
98682             mode.exit = function() {
98683                 context.uninstall(behavior);
98684             };
98685
98686             return mode;
98687         }
98688
98689         function modeAddPoint(context, mode) {
98690
98691             mode.id = 'add-point';
98692
98693             var behavior = behaviorDraw(context)
98694                 .tail(t('modes.add_point.tail'))
98695                 .on('click', add)
98696                 .on('clickWay', addWay)
98697                 .on('clickNode', addNode)
98698                 .on('cancel', cancel)
98699                 .on('finish', cancel);
98700
98701             var defaultTags = {};
98702             if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'point');
98703
98704
98705             function add(loc) {
98706                 var node = osmNode({ loc: loc, tags: defaultTags });
98707
98708                 context.perform(
98709                     actionAddEntity(node),
98710                     t('operations.add.annotation.point')
98711                 );
98712
98713                 enterSelectMode(node);
98714             }
98715
98716
98717             function addWay(loc, edge) {
98718                 var node = osmNode({ tags: defaultTags });
98719
98720                 context.perform(
98721                     actionAddMidpoint({loc: loc, edge: edge}, node),
98722                     t('operations.add.annotation.vertex')
98723                 );
98724
98725                 enterSelectMode(node);
98726             }
98727
98728             function enterSelectMode(node) {
98729                 context.enter(
98730                     modeSelect(context, [node.id]).newFeature(true)
98731                 );
98732             }
98733
98734
98735             function addNode(node) {
98736                 if (Object.keys(defaultTags).length === 0) {
98737                     enterSelectMode(node);
98738                     return;
98739                 }
98740
98741                 var tags = Object.assign({}, node.tags);  // shallow copy
98742                 for (var key in defaultTags) {
98743                     tags[key] = defaultTags[key];
98744                 }
98745
98746                 context.perform(
98747                     actionChangeTags(node.id, tags),
98748                     t('operations.add.annotation.point')
98749                 );
98750
98751                 enterSelectMode(node);
98752             }
98753
98754
98755             function cancel() {
98756                 context.enter(modeBrowse(context));
98757             }
98758
98759
98760             mode.enter = function() {
98761                 context.install(behavior);
98762             };
98763
98764
98765             mode.exit = function() {
98766                 context.uninstall(behavior);
98767             };
98768
98769
98770             return mode;
98771         }
98772
98773         function modeAddNote(context) {
98774             var mode = {
98775                 id: 'add-note',
98776                 button: 'note',
98777                 title: t('modes.add_note.title'),
98778                 description: t('modes.add_note.description'),
98779                 key: t('modes.add_note.key')
98780             };
98781
98782             var behavior = behaviorDraw(context)
98783                 .tail(t('modes.add_note.tail'))
98784                 .on('click', add)
98785                 .on('cancel', cancel)
98786                 .on('finish', cancel);
98787
98788
98789             function add(loc) {
98790                 var osm = services$1.osm;
98791                 if (!osm) return;
98792
98793                 var note = osmNote({ loc: loc, status: 'open', comments: [] });
98794                 osm.replaceNote(note);
98795
98796                 // force a reraw (there is no history change that would otherwise do this)
98797                 context.pan([0,0]);
98798
98799                 context
98800                     .selectedNoteID(note.id)
98801                     .enter(modeSelectNote(context, note.id).newFeature(true));
98802             }
98803
98804
98805             function cancel() {
98806                 context.enter(modeBrowse(context));
98807             }
98808
98809
98810             mode.enter = function() {
98811                 context.install(behavior);
98812             };
98813
98814
98815             mode.exit = function() {
98816                 context.uninstall(behavior);
98817             };
98818
98819
98820             return mode;
98821         }
98822
98823         function uiConflicts(context) {
98824             var dispatch$1 = dispatch('cancel', 'save');
98825             var keybinding = utilKeybinding('conflicts');
98826             var _origChanges;
98827             var _conflictList;
98828
98829
98830             function keybindingOn() {
98831                 d3_select(document)
98832                     .call(keybinding.on('⎋', cancel, true));
98833             }
98834
98835             function keybindingOff() {
98836                 d3_select(document)
98837                     .call(keybinding.unbind);
98838             }
98839
98840             function tryAgain() {
98841                 keybindingOff();
98842                 dispatch$1.call('save');
98843             }
98844
98845             function cancel() {
98846                 keybindingOff();
98847                 dispatch$1.call('cancel');
98848             }
98849
98850
98851             function conflicts(selection) {
98852                 keybindingOn();
98853
98854                 var headerEnter = selection.selectAll('.header')
98855                     .data([0])
98856                     .enter()
98857                     .append('div')
98858                     .attr('class', 'header fillL');
98859
98860                 headerEnter
98861                     .append('button')
98862                     .attr('class', 'fr')
98863                     .on('click', cancel)
98864                     .call(svgIcon('#iD-icon-close'));
98865
98866                 headerEnter
98867                     .append('h3')
98868                     .text(t('save.conflict.header'));
98869
98870                 var bodyEnter = selection.selectAll('.body')
98871                     .data([0])
98872                     .enter()
98873                     .append('div')
98874                     .attr('class', 'body fillL');
98875
98876                 var conflictsHelpEnter = bodyEnter
98877                     .append('div')
98878                     .attr('class', 'conflicts-help')
98879                     .text(t('save.conflict.help'));
98880
98881
98882                 // Download changes link
98883                 var detected = utilDetect();
98884                 var changeset = new osmChangeset();
98885
98886                 delete changeset.id;  // Export without changeset_id
98887
98888                 var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
98889                 var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
98890                 var fileName = 'changes.osc';
98891
98892                 var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
98893                     .append('a')
98894                     .attr('class', 'download-changes');
98895
98896                 if (detected.download) {      // All except IE11 and Edge
98897                     linkEnter                 // download the data as a file
98898                         .attr('href', window.URL.createObjectURL(blob))
98899                         .attr('download', fileName);
98900
98901                 } else {                      // IE11 and Edge
98902                     linkEnter                 // open data uri in a new tab
98903                         .attr('target', '_blank')
98904                         .on('click.download', function() {
98905                             navigator.msSaveBlob(blob, fileName);
98906                         });
98907                 }
98908
98909                 linkEnter
98910                     .call(svgIcon('#iD-icon-load', 'inline'))
98911                     .append('span')
98912                     .text(t('save.conflict.download_changes'));
98913
98914
98915                 bodyEnter
98916                     .append('div')
98917                     .attr('class', 'conflict-container fillL3')
98918                     .call(showConflict, 0);
98919
98920                 bodyEnter
98921                     .append('div')
98922                     .attr('class', 'conflicts-done')
98923                     .attr('opacity', 0)
98924                     .style('display', 'none')
98925                     .text(t('save.conflict.done'));
98926
98927                 var buttonsEnter = bodyEnter
98928                     .append('div')
98929                     .attr('class','buttons col12 joined conflicts-buttons');
98930
98931                 buttonsEnter
98932                     .append('button')
98933                     .attr('disabled', _conflictList.length > 1)
98934                     .attr('class', 'action conflicts-button col6')
98935                     .text(t('save.title'))
98936                     .on('click.try_again', tryAgain);
98937
98938                 buttonsEnter
98939                     .append('button')
98940                     .attr('class', 'secondary-action conflicts-button col6')
98941                     .text(t('confirm.cancel'))
98942                     .on('click.cancel', cancel);
98943             }
98944
98945
98946             function showConflict(selection, index) {
98947                 index = utilWrap(index, _conflictList.length);
98948
98949                 var parent = d3_select(selection.node().parentNode);
98950
98951                 // enable save button if this is the last conflict being reviewed..
98952                 if (index === _conflictList.length - 1) {
98953                     window.setTimeout(function() {
98954                         parent.select('.conflicts-button')
98955                             .attr('disabled', null);
98956
98957                         parent.select('.conflicts-done')
98958                             .transition()
98959                             .attr('opacity', 1)
98960                             .style('display', 'block');
98961                     }, 250);
98962                 }
98963
98964                 var conflict = selection
98965                     .selectAll('.conflict')
98966                     .data([_conflictList[index]]);
98967
98968                 conflict.exit()
98969                     .remove();
98970
98971                 var conflictEnter = conflict.enter()
98972                     .append('div')
98973                     .attr('class', 'conflict');
98974
98975                 conflictEnter
98976                     .append('h4')
98977                     .attr('class', 'conflict-count')
98978                     .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
98979
98980                 conflictEnter
98981                     .append('a')
98982                     .attr('class', 'conflict-description')
98983                     .attr('href', '#')
98984                     .text(function(d) { return d.name; })
98985                     .on('click', function(d) {
98986                         event.preventDefault();
98987                         zoomToEntity(d.id);
98988                     });
98989
98990                 var details = conflictEnter
98991                     .append('div')
98992                     .attr('class', 'conflict-detail-container');
98993
98994                 details
98995                     .append('ul')
98996                     .attr('class', 'conflict-detail-list')
98997                     .selectAll('li')
98998                     .data(function(d) { return d.details || []; })
98999                     .enter()
99000                     .append('li')
99001                     .attr('class', 'conflict-detail-item')
99002                     .html(function(d) { return d; });
99003
99004                 details
99005                     .append('div')
99006                     .attr('class', 'conflict-choices')
99007                     .call(addChoices);
99008
99009                 details
99010                     .append('div')
99011                     .attr('class', 'conflict-nav-buttons joined cf')
99012                     .selectAll('button')
99013                     .data(['previous', 'next'])
99014                     .enter()
99015                     .append('button')
99016                     .text(function(d) { return t('save.conflict.' + d); })
99017                     .attr('class', 'conflict-nav-button action col6')
99018                     .attr('disabled', function(d, i) {
99019                         return (i === 0 && index === 0) ||
99020                             (i === 1 && index === _conflictList.length - 1) || null;
99021                     })
99022                     .on('click', function(d, i) {
99023                         event.preventDefault();
99024
99025                         var container = parent.selectAll('.conflict-container');
99026                         var sign = (i === 0 ? -1 : 1);
99027
99028                         container
99029                             .selectAll('.conflict')
99030                             .remove();
99031
99032                         container
99033                             .call(showConflict, index + sign);
99034                     });
99035
99036             }
99037
99038
99039             function addChoices(selection) {
99040                 var choices = selection
99041                     .append('ul')
99042                     .attr('class', 'layer-list')
99043                     .selectAll('li')
99044                     .data(function(d) { return d.choices || []; });
99045
99046                 // enter
99047                 var choicesEnter = choices.enter()
99048                     .append('li')
99049                     .attr('class', 'layer');
99050
99051                 var labelEnter = choicesEnter
99052                     .append('label');
99053
99054                 labelEnter
99055                     .append('input')
99056                     .attr('type', 'radio')
99057                     .attr('name', function(d) { return d.id; })
99058                     .on('change', function(d, i) {
99059                         var ul = this.parentNode.parentNode.parentNode;
99060                         ul.__data__.chosen = i;
99061                         choose(ul, d);
99062                     });
99063
99064                 labelEnter
99065                     .append('span')
99066                     .text(function(d) { return d.text; });
99067
99068                 // update
99069                 choicesEnter
99070                     .merge(choices)
99071                     .each(function(d, i) {
99072                         var ul = this.parentNode;
99073                         if (ul.__data__.chosen === i) {
99074                             choose(ul, d);
99075                         }
99076                     });
99077             }
99078
99079
99080             function choose(ul, datum) {
99081                 if (event) event.preventDefault();
99082
99083                 d3_select(ul)
99084                     .selectAll('li')
99085                     .classed('active', function(d) { return d === datum; })
99086                     .selectAll('input')
99087                     .property('checked', function(d) { return d === datum; });
99088
99089                 var extent = geoExtent();
99090                 var entity;
99091
99092                 entity = context.graph().hasEntity(datum.id);
99093                 if (entity) extent._extend(entity.extent(context.graph()));
99094
99095                 datum.action();
99096
99097                 entity = context.graph().hasEntity(datum.id);
99098                 if (entity) extent._extend(entity.extent(context.graph()));
99099
99100                 zoomToEntity(datum.id, extent);
99101             }
99102
99103
99104             function zoomToEntity(id, extent) {
99105                 context.surface().selectAll('.hover')
99106                     .classed('hover', false);
99107
99108                 var entity = context.graph().hasEntity(id);
99109                 if (entity) {
99110                     if (extent) {
99111                         context.map().trimmedExtent(extent);
99112                     } else {
99113                         context.map().zoomToEase(entity);
99114                     }
99115                     context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
99116                         .classed('hover', true);
99117                 }
99118             }
99119
99120
99121             // The conflict list should be an array of objects like:
99122             // {
99123             //     id: id,
99124             //     name: entityName(local),
99125             //     details: merge.conflicts(),
99126             //     chosen: 1,
99127             //     choices: [
99128             //         choice(id, keepMine, forceLocal),
99129             //         choice(id, keepTheirs, forceRemote)
99130             //     ]
99131             // }
99132             conflicts.conflictList = function(_) {
99133                 if (!arguments.length) return _conflictList;
99134                 _conflictList = _;
99135                 return conflicts;
99136             };
99137
99138
99139             conflicts.origChanges = function(_) {
99140                 if (!arguments.length) return _origChanges;
99141                 _origChanges = _;
99142                 return conflicts;
99143             };
99144
99145
99146             return utilRebind(conflicts, dispatch$1, 'on');
99147         }
99148
99149         function uiChangesetEditor(context) {
99150             var dispatch$1 = dispatch('change');
99151             var formFields = uiFormFields(context);
99152             var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
99153             var _fieldsArr;
99154             var _tags;
99155             var _changesetID;
99156
99157
99158             function changesetEditor(selection) {
99159                 render(selection);
99160             }
99161
99162
99163             function render(selection) {
99164                 var initial = false;
99165
99166                 if (!_fieldsArr) {
99167                     initial = true;
99168                     var presets = context.presets();
99169
99170                     _fieldsArr = [
99171                         uiField(context, presets.field('comment'), null, { show: true, revert: false }),
99172                         uiField(context, presets.field('source'), null, { show: false, revert: false }),
99173                         uiField(context, presets.field('hashtags'), null, { show: false, revert: false }),
99174                     ];
99175
99176                     _fieldsArr.forEach(function(field) {
99177                         field
99178                             .on('change', function(t, onInput) {
99179                                 dispatch$1.call('change', field, t, onInput);
99180                             });
99181                     });
99182                 }
99183
99184                 _fieldsArr.forEach(function(field) {
99185                     field
99186                         .tags(_tags);
99187                 });
99188
99189
99190                 selection
99191                     .call(formFields.fieldsArr(_fieldsArr));
99192
99193
99194                 if (initial) {
99195                     var commentField = selection.select('#preset-input-comment');
99196                     var commentNode = commentField.node();
99197
99198                     if (commentNode) {
99199                         commentNode.focus();
99200                         commentNode.select();
99201                     }
99202
99203                     // trigger a 'blur' event so that comment field can be cleaned
99204                     // and checked for hashtags, even if retrieved from localstorage
99205                     utilTriggerEvent(commentField, 'blur');
99206
99207                     var osm = context.connection();
99208                     if (osm) {
99209                         osm.userChangesets(function (err, changesets) {
99210                             if (err) return;
99211
99212                             var comments = changesets.map(function(changeset) {
99213                                 var comment = changeset.tags.comment;
99214                                 return comment ? { title: comment, value: comment } : null;
99215                             }).filter(Boolean);
99216
99217                             commentField
99218                                 .call(commentCombo
99219                                     .data(utilArrayUniqBy(comments, 'title'))
99220                                 );
99221                         });
99222                     }
99223                 }
99224
99225                 // Add warning if comment mentions Google
99226                 var hasGoogle = _tags.comment.match(/google/i);
99227                 var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
99228                     .data(hasGoogle ? [0] : []);
99229
99230                 commentWarning.exit()
99231                     .transition()
99232                     .duration(200)
99233                     .style('opacity', 0)
99234                     .remove();
99235
99236                 var commentEnter = commentWarning.enter()
99237                     .insert('div', '.tag-reference-body')
99238                     .attr('class', 'field-warning comment-warning')
99239                     .style('opacity', 0);
99240
99241                 commentEnter
99242                     .append('a')
99243                     .attr('target', '_blank')
99244                     .attr('tabindex', -1)
99245                     .call(svgIcon('#iD-icon-alert', 'inline'))
99246                     .attr('href', t('commit.google_warning_link'))
99247                     .append('span')
99248                     .text(t('commit.google_warning'));
99249
99250                 commentEnter
99251                     .transition()
99252                     .duration(200)
99253                     .style('opacity', 1);
99254             }
99255
99256
99257             changesetEditor.tags = function(_) {
99258                 if (!arguments.length) return _tags;
99259                 _tags = _;
99260                 // Don't reset _fieldsArr here.
99261                 return changesetEditor;
99262             };
99263
99264
99265             changesetEditor.changesetID = function(_) {
99266                 if (!arguments.length) return _changesetID;
99267                 if (_changesetID === _) return changesetEditor;
99268                 _changesetID = _;
99269                 _fieldsArr = null;
99270                 return changesetEditor;
99271             };
99272
99273
99274             return utilRebind(changesetEditor, dispatch$1, 'on');
99275         }
99276
99277         function uiCommitChanges(context) {
99278             var detected = utilDetect();
99279             var _entityID;
99280
99281
99282             function commitChanges(selection) {
99283                 var history = context.history();
99284                 var summary = history.difference().summary();
99285
99286                 var container = selection.selectAll('.modal-section.commit-section')
99287                     .data([0]);
99288
99289                 var containerEnter = container.enter()
99290                     .append('div')
99291                     .attr('class', 'commit-section modal-section fillL2');
99292
99293                 containerEnter
99294                     .append('h3')
99295                     .text(t('commit.changes', { count: summary.length }));
99296
99297                 containerEnter
99298                     .append('ul')
99299                     .attr('class', 'changeset-list');
99300
99301                 container = containerEnter
99302                     .merge(container);
99303
99304
99305                 var items = container.select('ul').selectAll('li')
99306                     .data(summary);
99307
99308                 var itemsEnter = items.enter()
99309                     .append('li')
99310                     .attr('class', 'change-item');
99311
99312                 itemsEnter
99313                     .each(function(d) {
99314                         d3_select(this)
99315                             .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
99316                     });
99317
99318                 itemsEnter
99319                     .append('span')
99320                     .attr('class', 'change-type')
99321                     .text(function(d) { return t('commit.' + d.changeType) + ' '; });
99322
99323                 itemsEnter
99324                     .append('strong')
99325                     .attr('class', 'entity-type')
99326                     .text(function(d) {
99327                         var matched = context.presets().match(d.entity, d.graph);
99328                         return (matched && matched.name()) || utilDisplayType(d.entity.id);
99329                     });
99330
99331                 itemsEnter
99332                     .append('span')
99333                     .attr('class', 'entity-name')
99334                     .text(function(d) {
99335                         var name = utilDisplayName(d.entity) || '',
99336                             string = '';
99337                         if (name !== '') {
99338                             string += ':';
99339                         }
99340                         return string += ' ' + name;
99341                     });
99342
99343                 itemsEnter
99344                     .style('opacity', 0)
99345                     .transition()
99346                     .style('opacity', 1);
99347
99348                 items = itemsEnter
99349                     .merge(items);
99350
99351                 items
99352                     .on('mouseover', mouseover)
99353                     .on('mouseout', mouseout)
99354                     .on('click', click);
99355
99356
99357                 // Download changeset link
99358                 var changeset = new osmChangeset().update({ id: undefined });
99359                 var changes = history.changes(actionDiscardTags(history.difference()));
99360
99361                 delete changeset.id;  // Export without chnageset_id
99362
99363                 var data = JXON.stringify(changeset.osmChangeJXON(changes));
99364                 var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
99365                 var fileName = 'changes.osc';
99366
99367                 var linkEnter = container.selectAll('.download-changes')
99368                     .data([0])
99369                     .enter()
99370                     .append('a')
99371                     .attr('class', 'download-changes');
99372
99373                 if (detected.download) {      // All except IE11 and Edge
99374                     linkEnter                 // download the data as a file
99375                         .attr('href', window.URL.createObjectURL(blob))
99376                         .attr('download', fileName);
99377
99378                 } else {                      // IE11 and Edge
99379                     linkEnter                 // open data uri in a new tab
99380                         .attr('target', '_blank')
99381                         .on('click.download', function() {
99382                             navigator.msSaveBlob(blob, fileName);
99383                         });
99384                 }
99385
99386                 linkEnter
99387                     .call(svgIcon('#iD-icon-load', 'inline'))
99388                     .append('span')
99389                     .text(t('commit.download_changes'));
99390
99391
99392                 function mouseover(d) {
99393                     if (d.entity) {
99394                         context.surface().selectAll(
99395                             utilEntityOrMemberSelector([d.entity.id], context.graph())
99396                         ).classed('hover', true);
99397                     }
99398                 }
99399
99400
99401                 function mouseout() {
99402                     context.surface().selectAll('.hover')
99403                         .classed('hover', false);
99404                 }
99405
99406
99407                 function click(change) {
99408                     if (change.changeType === 'deleted') {
99409                         _entityID = null;
99410                     } else {
99411                         var entity = change.entity;
99412                         _entityID = change.entity.id;
99413                         context.map().zoomToEase(entity);
99414                         context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
99415                             .classed('hover', true);
99416                     }
99417                 }
99418             }
99419
99420
99421             commitChanges.entityID = function(_) {
99422                 if (!arguments.length) return _entityID;
99423                 _entityID = _;
99424                 return commitChanges;
99425             };
99426
99427
99428             return commitChanges;
99429         }
99430
99431         function uiCommitWarnings(context) {
99432
99433             function commitWarnings(selection) {
99434                 var issuesBySeverity = context.validator()
99435                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeDisabledRules: true });
99436
99437                 for (var severity in issuesBySeverity) {
99438                     var issues = issuesBySeverity[severity];
99439                     var section = severity + '-section';
99440                     var issueItem = severity + '-item';
99441
99442                     var container = selection.selectAll('.' + section)
99443                         .data(issues.length ? [0] : []);
99444
99445                     container.exit()
99446                         .remove();
99447
99448                     var containerEnter = container.enter()
99449                         .append('div')
99450                         .attr('class', 'modal-section ' + section + ' fillL2');
99451
99452                     containerEnter
99453                         .append('h3')
99454                         .text(severity === 'warning' ? t('commit.warnings') : t('commit.errors'));
99455
99456                     containerEnter
99457                         .append('ul')
99458                         .attr('class', 'changeset-list');
99459
99460                     container = containerEnter
99461                         .merge(container);
99462
99463
99464                     var items = container.select('ul').selectAll('li')
99465                         .data(issues, function(d) { return d.id; });
99466
99467                     items.exit()
99468                         .remove();
99469
99470                     var itemsEnter = items.enter()
99471                         .append('li')
99472                         .attr('class', issueItem);
99473
99474                     itemsEnter
99475                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
99476
99477                     itemsEnter
99478                         .append('strong')
99479                         .attr('class', 'issue-message');
99480
99481                     itemsEnter.filter(function(d) { return d.tooltip; })
99482                         .call(tooltip()
99483                             .title(function(d) { return d.tooltip; })
99484                             .placement('top')
99485                         );
99486
99487                     items = itemsEnter
99488                         .merge(items);
99489
99490                     items.selectAll('.issue-message')
99491                         .text(function(d) {
99492                             return d.message(context);
99493                         });
99494
99495                     items
99496                         .on('mouseover', function(d) {
99497                             if (d.entityIds) {
99498                                 context.surface().selectAll(
99499                                     utilEntityOrMemberSelector(
99500                                         d.entityIds,
99501                                         context.graph()
99502                                     )
99503                                 ).classed('hover', true);
99504                             }
99505                         })
99506                         .on('mouseout', function() {
99507                             context.surface().selectAll('.hover')
99508                                 .classed('hover', false);
99509                         })
99510                         .on('click', function(d) {
99511                             context.validator().focusIssue(d);
99512                         });
99513                 }
99514             }
99515
99516
99517             return commitWarnings;
99518         }
99519
99520         var _changeset$1;
99521         var readOnlyTags = [
99522             /^changesets_count$/,
99523             /^created_by$/,
99524             /^ideditor:/,
99525             /^imagery_used$/,
99526             /^host$/,
99527             /^locale$/,
99528             /^warnings:/
99529         ];
99530
99531         // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
99532         // from https://stackoverflow.com/a/25575009
99533         var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
99534
99535
99536         function uiCommit(context) {
99537             var dispatch$1 = dispatch('cancel', 'save');
99538             var _userDetails;
99539             var _selection;
99540
99541             var changesetEditor = uiChangesetEditor(context)
99542                 .on('change', changeTags);
99543             var rawTagEditor = uiRawTagEditor(context)
99544                 .on('change', changeTags);
99545             var commitChanges = uiCommitChanges(context);
99546             var commitWarnings = uiCommitWarnings(context);
99547
99548
99549             function commit(selection) {
99550                 _selection = selection;
99551
99552                 var osm = context.connection();
99553                 if (!osm) return;
99554
99555                 // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
99556                 var commentDate = +context.storage('commentDate') || 0;
99557                 var currDate = Date.now();
99558                 var cutoff = 2 * 86400 * 1000;   // 2 days
99559                 if (commentDate > currDate || currDate - commentDate > cutoff) {
99560                     context.storage('comment', null);
99561                     context.storage('hashtags', null);
99562                     context.storage('source', null);
99563                 }
99564
99565                 var tags;
99566                 // Initialize changeset if one does not exist yet.
99567                 // Also pull values from local storage.
99568                 if (!_changeset$1) {
99569
99570                     // load in the URL hash values, if any
99571                     var hash = context.ui().hash;
99572                     if (hash.comment) {
99573                         context.storage('comment', hash.comment);
99574                         context.storage('commentDate', Date.now());
99575                     }
99576                     if (hash.source) {
99577                         context.storage('source', hash.source);
99578                         context.storage('commentDate', Date.now());
99579                     }
99580                     if (hash.hashtags) {
99581                         context.storage('hashtags', hash.hashtags);
99582                     }
99583
99584                     var detected = utilDetect();
99585                     tags = {
99586                         comment: context.storage('comment') || '',
99587                         created_by: ('iD ' + context.version).substr(0, 255),
99588                         host: detected.host.substr(0, 255),
99589                         locale: detected.locale.substr(0, 255)
99590                     };
99591
99592                     // call findHashtags initially - this will remove stored
99593                     // hashtags if any hashtags are found in the comment - #4304
99594                     findHashtags(tags, true);
99595
99596                     var hashtags = context.storage('hashtags');
99597                     if (hashtags) {
99598                         tags.hashtags = hashtags;
99599                     }
99600
99601                     var source = context.storage('source');
99602                     if (source) {
99603                         tags.source = source;
99604                     }
99605                     var photoOverlaysUsed = context.history().photoOverlaysUsed();
99606                     if (photoOverlaysUsed.length) {
99607                         var sources = (tags.source || '').split(';');
99608
99609                         // include this tag for any photo layer
99610                         if (sources.indexOf('streetlevel imagery') === -1) {
99611                             sources.push('streetlevel imagery');
99612                         }
99613
99614                         // add the photo overlays used during editing as sources
99615                         photoOverlaysUsed.forEach(function(photoOverlay) {
99616                             if (sources.indexOf(photoOverlay) === -1) {
99617                                 sources.push(photoOverlay);
99618                             }
99619                         });
99620
99621                         tags.source = sources.join(';').substr(0, 255);
99622                     }
99623
99624                     _changeset$1 = new osmChangeset({ tags: tags });
99625                 }
99626
99627                 tags = Object.assign({}, _changeset$1.tags);   // shallow copy
99628
99629                 // assign tags for imagery used
99630                 var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
99631                 tags.imagery_used = imageryUsed || 'None';
99632
99633                 // assign tags for closed issues and notes
99634                 var osmClosed = osm.getClosedIDs();
99635                 if (osmClosed.length) {
99636                     tags['closed:note'] = osmClosed.join(';').substr(0, 255);
99637                 }
99638                 if (services$1.keepRight) {
99639                     var krClosed = services$1.keepRight.getClosedIDs();
99640                     if (krClosed.length) {
99641                         tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
99642                     }
99643                 }
99644                 if (services$1.improveOSM) {
99645                     var iOsmClosed = services$1.improveOSM.getClosedIDs();
99646                     if (iOsmClosed.length) {
99647                         tags['closed:improveosm'] = iOsmClosed.join(';').substr(0, 255);
99648                     }
99649                 }
99650
99651                 // remove existing warning counts
99652                 for (var key in tags) {
99653                     if (key.match(/^warnings:/)) {
99654                         delete tags[key];
99655                     }
99656                 }
99657
99658                 // add counts of warnings generated by the user's edits
99659                 var warnings = context.validator()
99660                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeIgnored: true, includeDisabledRules: true }).warning;
99661
99662                 var warningsByType = utilArrayGroupBy(warnings, 'type');
99663                 for (var warningType in warningsByType) {
99664                     var warningsOfType = warningsByType[warningType];
99665                     if (warningsOfType[0].subtype) {
99666                         var warningsBySubtype = utilArrayGroupBy(warningsOfType, 'subtype');
99667                         for (var warningSubtype in warningsBySubtype) {
99668                             var warningsOfSubtype = warningsBySubtype[warningSubtype];
99669                             tags['warnings:' + warningType + ':' + warningSubtype] = warningsOfSubtype.length.toString();
99670                         }
99671                     } else {
99672                         tags['warnings:' + warningType] = warningsOfType.length.toString();
99673                     }
99674                 }
99675
99676
99677                 _changeset$1 = _changeset$1.update({ tags: tags });
99678
99679                 var header = selection.selectAll('.header')
99680                     .data([0]);
99681
99682                 var headerTitle = header.enter()
99683                     .append('div')
99684                     .attr('class', 'header fillL header-container');
99685
99686                 headerTitle
99687                     .append('div')
99688                     .attr('class', 'header-block header-block-outer');
99689
99690                 headerTitle
99691                     .append('div')
99692                     .attr('class', 'header-block')
99693                     .append('h3')
99694                     .text(t('commit.title'));
99695
99696                 headerTitle
99697                     .append('div')
99698                     .attr('class', 'header-block header-block-outer header-block-close')
99699                     .append('button')
99700                     .attr('class', 'close')
99701                     .on('click', function() { context.enter(modeBrowse(context)); })
99702                     .call(svgIcon('#iD-icon-close'));
99703
99704                 var body = selection.selectAll('.body')
99705                     .data([0]);
99706
99707                 body = body.enter()
99708                     .append('div')
99709                     .attr('class', 'body')
99710                     .merge(body);
99711
99712
99713                 // Changeset Section
99714                 var changesetSection = body.selectAll('.changeset-editor')
99715                     .data([0]);
99716
99717                 changesetSection = changesetSection.enter()
99718                     .append('div')
99719                     .attr('class', 'modal-section changeset-editor')
99720                     .merge(changesetSection);
99721
99722                 changesetSection
99723                     .call(changesetEditor
99724                         .changesetID(_changeset$1.id)
99725                         .tags(tags)
99726                     );
99727
99728
99729                 // Warnings
99730                 body.call(commitWarnings);
99731
99732
99733                 // Upload Explanation
99734                 var saveSection = body.selectAll('.save-section')
99735                     .data([0]);
99736
99737                 saveSection = saveSection.enter()
99738                     .append('div')
99739                     .attr('class','modal-section save-section fillL cf')
99740                     .merge(saveSection);
99741
99742                 var prose = saveSection.selectAll('.commit-info')
99743                     .data([0]);
99744
99745                 if (prose.enter().size()) {   // first time, make sure to update user details in prose
99746                     _userDetails = null;
99747                 }
99748
99749                 prose = prose.enter()
99750                     .append('p')
99751                     .attr('class', 'commit-info')
99752                     .text(t('commit.upload_explanation'))
99753                     .merge(prose);
99754
99755                 // always check if this has changed, but only update prose.html()
99756                 // if needed, because it can trigger a style recalculation
99757                 osm.userDetails(function(err, user) {
99758                     if (err) return;
99759
99760                     if (_userDetails === user) return;  // no change
99761                     _userDetails = user;
99762
99763                     var userLink = d3_select(document.createElement('div'));
99764
99765                     if (user.image_url) {
99766                         userLink
99767                             .append('img')
99768                             .attr('src', user.image_url)
99769                             .attr('class', 'icon pre-text user-icon');
99770                     }
99771
99772                     userLink
99773                         .append('a')
99774                         .attr('class', 'user-info')
99775                         .text(user.display_name)
99776                         .attr('href', osm.userURL(user.display_name))
99777                         .attr('target', '_blank');
99778
99779                     prose
99780                         .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
99781                 });
99782
99783
99784                 // Request Review
99785                 var requestReview = saveSection.selectAll('.request-review')
99786                     .data([0]);
99787
99788                 // Enter
99789                 var requestReviewEnter = requestReview.enter()
99790                     .append('div')
99791                     .attr('class', 'request-review');
99792
99793                 var labelEnter = requestReviewEnter
99794                     .append('label')
99795                     .attr('for', 'commit-input-request-review');
99796
99797                 labelEnter
99798                     .append('input')
99799                     .attr('type', 'checkbox')
99800                     .attr('id', 'commit-input-request-review');
99801
99802                 labelEnter
99803                     .append('span')
99804                     .text(t('commit.request_review'));
99805
99806                 // Update
99807                 requestReview = requestReview
99808                     .merge(requestReviewEnter);
99809
99810                 var requestReviewInput = requestReview.selectAll('input')
99811                     .property('checked', isReviewRequested(_changeset$1.tags))
99812                     .on('change', toggleRequestReview);
99813
99814
99815                 // Buttons
99816                 var buttonSection = saveSection.selectAll('.buttons')
99817                     .data([0]);
99818
99819                 // enter
99820                 var buttonEnter = buttonSection.enter()
99821                     .append('div')
99822                     .attr('class', 'buttons fillL cf');
99823
99824                 buttonEnter
99825                     .append('button')
99826                     .attr('class', 'secondary-action button cancel-button')
99827                     .append('span')
99828                     .attr('class', 'label')
99829                     .text(t('commit.cancel'));
99830
99831                 var uploadButton = buttonEnter
99832                     .append('button')
99833                     .attr('class', 'action button save-button');
99834
99835                 uploadButton.append('span')
99836                     .attr('class', 'label')
99837                     .text(t('commit.save'));
99838
99839                 var uploadBlockerTooltipText = getUploadBlockerMessage();
99840
99841                 // update
99842                 buttonSection = buttonSection
99843                     .merge(buttonEnter);
99844
99845                 buttonSection.selectAll('.cancel-button')
99846                     .on('click.cancel', function() {
99847                         var selectedID = commitChanges.entityID();
99848                         dispatch$1.call('cancel', this, selectedID);
99849                     });
99850
99851                 buttonSection.selectAll('.save-button')
99852                     .classed('disabled', uploadBlockerTooltipText !== null)
99853                     .on('click.save', function() {
99854                         if (!d3_select(this).classed('disabled')) {
99855                             this.blur();    // avoid keeping focus on the button - #4641
99856                             dispatch$1.call('save', this, _changeset$1);
99857                         }
99858                     });
99859
99860                 // remove any existing tooltip
99861                 tooltip().destroyAny(buttonSection.selectAll('.save-button'));
99862
99863                 if (uploadBlockerTooltipText) {
99864                     buttonSection.selectAll('.save-button')
99865                         .call(tooltip().title(uploadBlockerTooltipText).placement('top'));
99866                 }
99867
99868                 // Raw Tag Editor
99869                 var tagSection = body.selectAll('.tag-section.raw-tag-editor')
99870                     .data([0]);
99871
99872                 tagSection = tagSection.enter()
99873                     .append('div')
99874                     .attr('class', 'modal-section tag-section raw-tag-editor')
99875                     .merge(tagSection);
99876
99877                 var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
99878                 tagSection
99879                     .call(rawTagEditor
99880                         .expanded(expanded)
99881                         .readOnlyTags(readOnlyTags)
99882                         .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
99883                     );
99884
99885
99886                 // Change summary
99887                 body.call(commitChanges);
99888
99889
99890                 function toggleRequestReview() {
99891                     var rr = requestReviewInput.property('checked');
99892                     updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
99893
99894                     var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
99895                     tagSection
99896                         .call(rawTagEditor
99897                             .expanded(expanded)
99898                             .readOnlyTags(readOnlyTags)
99899                             .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
99900                         );
99901                 }
99902             }
99903
99904
99905             function getUploadBlockerMessage() {
99906                 var errors = context.validator()
99907                     .getIssuesBySeverity({ what: 'edited', where: 'all' }).error;
99908
99909                 if (errors.length) {
99910                     return t('commit.outstanding_errors_message', { count: errors.length });
99911
99912                 } else {
99913                     var n = d3_select('#preset-input-comment').node();
99914                     var hasChangesetComment = n && n.value.length > 0;
99915                     if (!hasChangesetComment) {
99916                         return t('commit.comment_needed_message');
99917                     }
99918                 }
99919                 return null;
99920             }
99921
99922
99923             function changeTags(changed, onInput) {
99924                 if (changed.hasOwnProperty('comment')) {
99925                     if (changed.comment === undefined) {
99926                         changed.comment = '';
99927                     }
99928                     if (!onInput) {
99929                         context.storage('comment', changed.comment);
99930                         context.storage('commentDate', Date.now());
99931                     }
99932                 }
99933                 if (changed.hasOwnProperty('source')) {
99934                     if (changed.source === undefined) {
99935                         context.storage('source', null);
99936                     } else if (!onInput) {
99937                         context.storage('source', changed.source);
99938                         context.storage('commentDate', Date.now());
99939                     }
99940                 }
99941
99942                 updateChangeset(changed, onInput);
99943
99944                 if (_selection) {
99945                     _selection.call(commit);
99946                 }
99947             }
99948
99949
99950             function findHashtags(tags, commentOnly) {
99951                 var inComment = commentTags();
99952                 var inHashTags = hashTags();
99953
99954                 if (inComment !== null) {                    // when hashtags are detected in comment...
99955                     context.storage('hashtags', null);       // always remove stored hashtags - #4304
99956                     if (commentOnly) { inHashTags = []; }    // optionally override hashtags field
99957                 }
99958
99959                 // keep only one copy of the tags
99960                 var all = new Set();
99961                 var keepTags = [];
99962                 inComment.forEach(checkTag);
99963                 inHashTags.forEach(checkTag);
99964                 return keepTags;
99965
99966                 // Compare tags as lowercase strings, but keep original case tags
99967                 function checkTag(s) {
99968                     var compare = s.toLowerCase();
99969                     if (!all.has(compare)) {
99970                         all.add(compare);
99971                         keepTags.push(s);
99972                     }
99973                 }
99974
99975                 // Extract hashtags from `comment`
99976                 function commentTags() {
99977                     var matches = (tags.comment || '')
99978                         .replace(/http\S*/g, '')  // drop anything that looks like a URL - #4289
99979                         .match(hashtagRegex);
99980
99981                     return (matches || []);
99982                 }
99983
99984                 // Extract and clean hashtags from `hashtags`
99985                 function hashTags() {
99986                     var matches = (tags.hashtags || '')
99987                         .split(/[,;\s]+/)
99988                         .map(function (s) {
99989                             if (s[0] !== '#') { s = '#' + s; }    // prepend '#'
99990                             var matched = s.match(hashtagRegex);
99991                             return matched && matched[0];
99992                         }).filter(Boolean);                       // exclude falsy
99993
99994                     return (matches || []);
99995                 }
99996             }
99997
99998
99999             function isReviewRequested(tags) {
100000                 var rr = tags.review_requested;
100001                 if (rr === undefined) return false;
100002                 rr = rr.trim().toLowerCase();
100003                 return !(rr === '' || rr === 'no');
100004             }
100005
100006
100007             function updateChangeset(changed, onInput) {
100008                 var tags = Object.assign({}, _changeset$1.tags);   // shallow copy
100009
100010                 Object.keys(changed).forEach(function(k) {
100011                     var v = changed[k];
100012                     k = k.trim().substr(0, 255);
100013                     if (readOnlyTags.indexOf(k) !== -1) return;
100014
100015                     if (k !== '' && v !== undefined) {
100016                         if (onInput) {
100017                             tags[k] = v;
100018                         } else {
100019                             tags[k] = v.trim().substr(0, 255);
100020                         }
100021                     } else {
100022                         delete tags[k];
100023                     }
100024                 });
100025
100026                 if (!onInput) {
100027                     // when changing the comment, override hashtags with any found in comment.
100028                     var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
100029                     var arr = findHashtags(tags, commentOnly);
100030                     if (arr.length) {
100031                         tags.hashtags = arr.join(';').substr(0, 255);
100032                         context.storage('hashtags', tags.hashtags);
100033                     } else {
100034                         delete tags.hashtags;
100035                         context.storage('hashtags', null);
100036                     }
100037                 }
100038
100039                 // always update userdetails, just in case user reauthenticates as someone else
100040                 if (_userDetails && _userDetails.changesets_count !== undefined) {
100041                     var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1;  // #4283
100042                     tags.changesets_count = String(changesetsCount);
100043
100044                     // first 100 edits - new user
100045                     if (changesetsCount <= 100) {
100046                         var s;
100047                         s = context.storage('walkthrough_completed');
100048                         if (s) {
100049                             tags['ideditor:walkthrough_completed'] = s;
100050                         }
100051
100052                         s = context.storage('walkthrough_progress');
100053                         if (s) {
100054                             tags['ideditor:walkthrough_progress'] = s;
100055                         }
100056
100057                         s = context.storage('walkthrough_started');
100058                         if (s) {
100059                             tags['ideditor:walkthrough_started'] = s;
100060                         }
100061                     }
100062                 } else {
100063                     delete tags.changesets_count;
100064                 }
100065
100066                 if (!fastDeepEqual(_changeset$1.tags, tags)) {
100067                     _changeset$1 = _changeset$1.update({ tags: tags });
100068                 }
100069             }
100070
100071
100072             commit.reset = function() {
100073                 _changeset$1 = null;
100074             };
100075
100076
100077             return utilRebind(commit, dispatch$1, 'on');
100078         }
100079
100080         function uiSuccess(context) {
100081             var MAXEVENTS = 2;
100082
100083             // All else being equal, rank more "social" communities higher
100084             // (anything not in this list receives no adjustment)
100085             var COMMUNITYRANK = {
100086                 'meetup': +5,
100087                 'slack': +4,
100088                 'facebook': +3,
100089                 'reddit': +2,
100090                 'forum': -2,
100091                 'mailinglist': -3,
100092                 'irc': -4
100093             };
100094
100095             var detected = utilDetect();
100096             var dispatch$1 = dispatch('cancel');
100097             var _changeset;
100098             var _location;
100099
100100
100101             // string-to-date parsing in JavaScript is weird
100102             function parseEventDate(when) {
100103                 if (!when) return;
100104
100105                 var raw = when.trim();
100106                 if (!raw) return;
100107
100108                 if (!/Z$/.test(raw)) {    // if no trailing 'Z', add one
100109                     raw += 'Z';           // this forces date to be parsed as a UTC date
100110                 }
100111
100112                 var parsed = new Date(raw);
100113                 return new Date(parsed.toUTCString().substr(0, 25));  // convert to local timezone
100114             }
100115
100116
100117             function success(selection) {
100118                 var header = selection
100119                     .append('div')
100120                     .attr('class', 'header fillL');
100121
100122                 header
100123                     .append('button')
100124                     .attr('class', 'fr')
100125                     .on('click', function() { dispatch$1.call('cancel'); })
100126                     .call(svgIcon('#iD-icon-close'));
100127
100128                 header
100129                     .append('h3')
100130                     .text(t('success.just_edited'));
100131
100132                 var body = selection
100133                     .append('div')
100134                     .attr('class', 'body save-success fillL');
100135
100136                 var summary = body
100137                     .append('div')
100138                     .attr('class', 'save-summary');
100139
100140                 summary
100141                     .append('h3')
100142                     .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
100143
100144                 summary
100145                     .append('p')
100146                     .text(t('success.help_html'))
100147                     .append('a')
100148                     .attr('class', 'link-out')
100149                     .attr('target', '_blank')
100150                     .attr('tabindex', -1)
100151                     .attr('href', t('success.help_link_url'))
100152                     .call(svgIcon('#iD-icon-out-link', 'inline'))
100153                     .append('span')
100154                     .text(t('success.help_link_text'));
100155
100156                 var osm = context.connection();
100157                 if (!osm) return;
100158
100159                 var changesetURL = osm.changesetURL(_changeset.id);
100160
100161                 var table = summary
100162                     .append('table')
100163                     .attr('class', 'summary-table');
100164
100165                 var row = table
100166                     .append('tr')
100167                     .attr('class', 'summary-row');
100168
100169                 row
100170                     .append('td')
100171                     .attr('class', 'cell-icon summary-icon')
100172                     .append('a')
100173                     .attr('target', '_blank')
100174                     .attr('href', changesetURL)
100175                     .append('svg')
100176                     .attr('class', 'logo-small')
100177                     .append('use')
100178                     .attr('xlink:href', '#iD-logo-osm');
100179
100180                 var summaryDetail = row
100181                     .append('td')
100182                     .attr('class', 'cell-detail summary-detail');
100183
100184                 summaryDetail
100185                     .append('a')
100186                     .attr('class', 'cell-detail summary-view-on-osm')
100187                     .attr('target', '_blank')
100188                     .attr('href', changesetURL)
100189                     .text(t('success.view_on_osm'));
100190
100191                 summaryDetail
100192                     .append('div')
100193                     .html(t('success.changeset_id', {
100194                         changeset_id: '<a href="' + changesetURL + '" target="_blank">' + _changeset.id + '</a>'
100195                     }));
100196
100197
100198                 // Gather community polygon IDs intersecting the map..
100199                 var matchFeatures = data.community.query(context.map().center(), true) || [];
100200                 var matchIDs = matchFeatures.map(function(feature) { return feature.id; });
100201
100202                 // Gather community resources that are either global or match a polygon.
100203                 var matchResources = Object.values(data.community.resources)
100204                     .filter(function(v) { return !v.featureId || matchIDs.indexOf(v.featureId) !== -1; });
100205
100206                 if (matchResources.length) {
100207                     // sort by size ascending, then by community rank
100208                     matchResources.sort(function(a, b) {
100209                         var aSize = Infinity;
100210                         var bSize = Infinity;
100211                         var aRank = COMMUNITYRANK[a.type] || 0;
100212                         var bRank = COMMUNITYRANK[b.type] || 0;
100213
100214                         if (a.featureId) {
100215                             aSize = data.community.features[a.featureId].properties.area;
100216                         }
100217                         if (b.featureId) {
100218                             bSize = data.community.features[b.featureId].properties.area;
100219                         }
100220
100221                         return aSize < bSize ? -1 : aSize > bSize ? 1 : bRank - aRank;
100222                     });
100223
100224                     body
100225                         .call(showCommunityLinks, matchResources);
100226                 }
100227             }
100228
100229
100230             function showCommunityLinks(selection, matchResources) {
100231                 var communityLinks = selection
100232                     .append('div')
100233                     .attr('class', 'save-communityLinks');
100234
100235                 communityLinks
100236                     .append('h3')
100237                     .text(t('success.like_osm'));
100238
100239                 var table = communityLinks
100240                     .append('table')
100241                     .attr('class', 'community-table');
100242
100243                 var row = table.selectAll('.community-row')
100244                     .data(matchResources);
100245
100246                 var rowEnter = row.enter()
100247                     .append('tr')
100248                     .attr('class', 'community-row');
100249
100250                 rowEnter
100251                     .append('td')
100252                     .attr('class', 'cell-icon community-icon')
100253                     .append('a')
100254                     .attr('target', '_blank')
100255                     .attr('href', function(d) { return d.url; })
100256                     .append('svg')
100257                     .attr('class', 'logo-small')
100258                     .append('use')
100259                     .attr('xlink:href', function(d) { return '#community-' + d.type; });
100260
100261                 var communityDetail = rowEnter
100262                     .append('td')
100263                     .attr('class', 'cell-detail community-detail');
100264
100265                 communityDetail
100266                     .each(showCommunityDetails);
100267
100268                 communityLinks
100269                     .append('div')
100270                     .attr('class', 'community-missing')
100271                     .text(t('success.missing'))
100272                     .append('a')
100273                     .attr('class', 'link-out')
100274                     .attr('target', '_blank')
100275                     .attr('tabindex', -1)
100276                     .call(svgIcon('#iD-icon-out-link', 'inline'))
100277                     .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
100278                     .append('span')
100279                     .text(t('success.tell_us'));
100280             }
100281
100282
100283             function showCommunityDetails(d) {
100284                 var selection = d3_select(this);
100285                 var communityID = d.id;
100286                 var replacements = {
100287                     url: linkify(d.url),
100288                     signupUrl: linkify(d.signupUrl || d.url)
100289                 };
100290
100291                 selection
100292                     .append('div')
100293                     .attr('class', 'community-name')
100294                     .append('a')
100295                     .attr('target', '_blank')
100296                     .attr('href', d.url)
100297                     .text(t('community.' + d.id + '.name'));
100298
100299                 var descriptionHTML = t('community.' + d.id + '.description', replacements);
100300
100301                 if (d.type === 'reddit') {   // linkify subreddits  #4997
100302                     descriptionHTML = descriptionHTML
100303                         .replace(/(\/r\/\w*\/*)/i, function(match) { return linkify(d.url, match); });
100304                 }
100305
100306                 selection
100307                     .append('div')
100308                     .attr('class', 'community-description')
100309                     .html(descriptionHTML);
100310
100311                 if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
100312                     selection
100313                         .append('div')
100314                         .call(uiDisclosure(context, 'community-more-' + d.id, false)
100315                             .expanded(false)
100316                             .updatePreference(false)
100317                             .title(t('success.more'))
100318                             .content(showMore)
100319                         );
100320                 }
100321
100322                 var nextEvents = (d.events || [])
100323                     .map(function(event) {
100324                         event.date = parseEventDate(event.when);
100325                         return event;
100326                     })
100327                     .filter(function(event) {               // date is valid and future (or today)
100328                         var t = event.date.getTime();
100329                         var now = (new Date()).setHours(0,0,0,0);
100330                         return !isNaN(t) && t >= now;
100331                     })
100332                     .sort(function(a, b) {                  // sort by date ascending
100333                         return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
100334                     })
100335                     .slice(0, MAXEVENTS);                   // limit number of events shown
100336
100337                 if (nextEvents.length) {
100338                     selection
100339                         .append('div')
100340                         .call(uiDisclosure(context, 'community-events-' + d.id, false)
100341                             .expanded(false)
100342                             .updatePreference(false)
100343                             .title(t('success.events'))
100344                             .content(showNextEvents)
100345                         )
100346                         .select('.hide-toggle')
100347                         .append('span')
100348                         .attr('class', 'badge-text')
100349                         .text(nextEvents.length);
100350                 }
100351
100352
100353                 function showMore(selection) {
100354                     var more = selection.selectAll('.community-more')
100355                         .data([0]);
100356
100357                     var moreEnter = more.enter()
100358                         .append('div')
100359                         .attr('class', 'community-more');
100360
100361                     if (d.extendedDescription) {
100362                         moreEnter
100363                             .append('div')
100364                             .attr('class', 'community-extended-description')
100365                             .html(t('community.' + d.id + '.extendedDescription', replacements));
100366                     }
100367
100368                     if (d.languageCodes && d.languageCodes.length) {
100369                         var languageList = d.languageCodes.map(function(code) {
100370                             return languageName(code);
100371                         }).join(', ');
100372
100373                         moreEnter
100374                             .append('div')
100375                             .attr('class', 'community-languages')
100376                             .text(t('success.languages', { languages: languageList }));
100377                     }
100378                 }
100379
100380
100381                 function showNextEvents(selection) {
100382                     var events = selection
100383                         .append('div')
100384                         .attr('class', 'community-events');
100385
100386                     var item = events.selectAll('.community-event')
100387                         .data(nextEvents);
100388
100389                     var itemEnter = item.enter()
100390                         .append('div')
100391                         .attr('class', 'community-event');
100392
100393                     itemEnter
100394                         .append('div')
100395                         .attr('class', 'community-event-name')
100396                         .append('a')
100397                         .attr('target', '_blank')
100398                         .attr('href', function(d) { return d.url; })
100399                         .text(function(d) {
100400                             var name = d.name;
100401                             if (d.i18n && d.id) {
100402                                 name = t('community.' + communityID + '.events.' + d.id + '.name', { default: name });
100403                             }
100404                             return name;
100405                         });
100406
100407                     itemEnter
100408                         .append('div')
100409                         .attr('class', 'community-event-when')
100410                         .text(function(d) {
100411                             var options = {
100412                                 weekday: 'short', day: 'numeric', month: 'short', year: 'numeric'
100413                             };
100414                             if (d.date.getHours() || d.date.getMinutes()) {   // include time if it has one
100415                                 options.hour = 'numeric';
100416                                 options.minute = 'numeric';
100417                             }
100418                             return d.date.toLocaleString(detected.locale, options);
100419                         });
100420
100421                     itemEnter
100422                         .append('div')
100423                         .attr('class', 'community-event-where')
100424                         .text(function(d) {
100425                             var where = d.where;
100426                             if (d.i18n && d.id) {
100427                                 where = t('community.' + communityID + '.events.' + d.id + '.where', { default: where });
100428                             }
100429                             return where;
100430                         });
100431
100432                     itemEnter
100433                         .append('div')
100434                         .attr('class', 'community-event-description')
100435                         .text(function(d) {
100436                             var description = d.description;
100437                             if (d.i18n && d.id) {
100438                                 description = t('community.' + communityID + '.events.' + d.id + '.description', { default: description });
100439                             }
100440                             return description;
100441                         });
100442                 }
100443
100444
100445                 function linkify(url, text) {
100446                     text = text || url;
100447                     return '<a target="_blank" href="' + url + '">' + text + '</a>';
100448                 }
100449             }
100450
100451
100452             success.changeset = function(_) {
100453                 if (!arguments.length) return _changeset;
100454                 _changeset = _;
100455                 return success;
100456             };
100457
100458
100459             success.location = function(_) {
100460                 if (!arguments.length) return _location;
100461                 _location = _;
100462                 return success;
100463             };
100464
100465
100466             return utilRebind(success, dispatch$1, 'on');
100467         }
100468
100469         var _isSaving = false;
100470
100471
100472         function modeSave(context) {
100473             var mode = { id: 'save' };
100474             var keybinding = utilKeybinding('modeSave');
100475
100476             var loading = uiLoading(context)
100477                 .message(t('save.uploading'))
100478                 .blocking(true);
100479
100480             var commit = uiCommit(context)
100481                 .on('cancel', cancel)
100482                 .on('save', save);
100483
100484             var _toCheck = [];
100485             var _toLoad = [];
100486             var _loaded = {};
100487             var _toLoadCount = 0;
100488             var _toLoadTotal = 0;
100489
100490             var _conflicts = [];
100491             var _errors = [];
100492             var _origChanges;
100493             var _location;
100494
100495
100496             function cancel(selectedID) {
100497                 if (selectedID) {
100498                     context.enter(modeSelect(context, [selectedID]));
100499                 } else {
100500                     context.enter(modeBrowse(context));
100501                 }
100502             }
100503
100504
100505             function save(changeset, tryAgain, checkConflicts) {
100506                 // Guard against accidentally entering save code twice - #4641
100507                 if (_isSaving && !tryAgain) {
100508                     return;
100509                 }
100510
100511                 var osm = context.connection();
100512                 if (!osm) {
100513                     cancel();
100514                     return;
100515                 }
100516
100517                 // If user somehow got logged out mid-save, try to reauthenticate..
100518                 // This can happen if they were logged in from before, but the tokens are no longer valid.
100519                 if (!osm.authenticated()) {
100520                     osm.authenticate(function(err) {
100521                         if (err) {
100522                             cancel();   // quit save mode..
100523                         } else {
100524                             save(changeset, tryAgain, checkConflicts);  // continue where we left off..
100525                         }
100526                     });
100527                     return;
100528                 }
100529
100530                 if (!_isSaving) {
100531                     keybindingOff();
100532                     context.container().call(loading);  // block input
100533                     _isSaving = true;
100534                 }
100535
100536                 var history = context.history();
100537                 var localGraph = context.graph();
100538                 var remoteGraph = coreGraph(history.base(), true);
100539
100540                 _conflicts = [];
100541                 _errors = [];
100542
100543                 // Store original changes, in case user wants to download them as an .osc file
100544                 _origChanges = history.changes(actionDiscardTags(history.difference()));
100545
100546                 // First time, `history.perform` a no-op action.
100547                 // Any conflict resolutions will be done as `history.replace`
100548                 if (!tryAgain) {
100549                     history.perform(actionNoop());
100550                 }
100551
100552                 // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
100553                 if (!checkConflicts) {
100554                     upload(changeset);
100555
100556                 // Do the full (slow) conflict check..
100557                 } else {
100558                     var summary = history.difference().summary();
100559                     _toCheck = [];
100560                     for (var i = 0; i < summary.length; i++) {
100561                         var item = summary[i];
100562                         if (item.changeType === 'modified') {
100563                             _toCheck.push(item.entity.id);
100564                         }
100565                     }
100566
100567                     _toLoad = withChildNodes(_toCheck, localGraph);
100568                     _loaded = {};
100569                     _toLoadCount = 0;
100570                     _toLoadTotal = _toLoad.length;
100571
100572                     if (_toCheck.length) {
100573                         showProgress(_toLoadCount, _toLoadTotal);
100574                         _toLoad.forEach(function(id) { _loaded[id] = false; });
100575                         osm.loadMultiple(_toLoad, loaded);
100576                     } else {
100577                         upload(changeset);
100578                     }
100579                 }
100580
100581                 return;
100582
100583
100584                 function withChildNodes(ids, graph) {
100585                     var s = new Set(ids);
100586                     ids.forEach(function(id) {
100587                         var entity = graph.entity(id);
100588                         if (entity.type !== 'way') return;
100589
100590                         graph.childNodes(entity).forEach(function(child) {
100591                             if (child.version !== undefined) {
100592                                 s.add(child.id);
100593                             }
100594                         });
100595                     });
100596
100597                     return Array.from(s);
100598                 }
100599
100600
100601                 // Reload modified entities into an alternate graph and check for conflicts..
100602                 function loaded(err, result) {
100603                     if (_errors.length) return;
100604
100605                     if (err) {
100606                         _errors.push({
100607                             msg: err.message || err.responseText,
100608                             details: [ t('save.status_code', { code: err.status }) ]
100609                         });
100610                         showErrors();
100611
100612                     } else {
100613                         var loadMore = [];
100614
100615                         result.data.forEach(function(entity) {
100616                             remoteGraph.replace(entity);
100617                             _loaded[entity.id] = true;
100618                             _toLoad = _toLoad.filter(function(val) { return val !== entity.id; });
100619
100620                             if (!entity.visible) return;
100621
100622                             // Because loadMultiple doesn't download /full like loadEntity,
100623                             // need to also load children that aren't already being checked..
100624                             var i, id;
100625                             if (entity.type === 'way') {
100626                                 for (i = 0; i < entity.nodes.length; i++) {
100627                                     id = entity.nodes[i];
100628                                     if (_loaded[id] === undefined) {
100629                                         _loaded[id] = false;
100630                                         loadMore.push(id);
100631                                     }
100632                                 }
100633                             } else if (entity.type === 'relation' && entity.isMultipolygon()) {
100634                                 for (i = 0; i < entity.members.length; i++) {
100635                                     id = entity.members[i].id;
100636                                     if (_loaded[id] === undefined) {
100637                                         _loaded[id] = false;
100638                                         loadMore.push(id);
100639                                     }
100640                                 }
100641                             }
100642                         });
100643
100644                         _toLoadCount += result.data.length;
100645                         _toLoadTotal += loadMore.length;
100646                         showProgress(_toLoadCount, _toLoadTotal);
100647
100648                         if (loadMore.length) {
100649                             _toLoad.push.apply(_toLoad, loadMore);
100650                             osm.loadMultiple(loadMore, loaded);
100651                         }
100652
100653                         if (!_toLoad.length) {
100654                             detectConflicts();
100655                         }
100656                     }
100657                 }
100658
100659
100660                 function detectConflicts() {
100661                     function choice(id, text, action) {
100662                         return { id: id, text: text, action: function() { history.replace(action); } };
100663                     }
100664                     function formatUser(d) {
100665                         return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
100666                     }
100667                     function entityName(entity) {
100668                         return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
100669                     }
100670
100671                     function sameVersions(local, remote) {
100672                         if (local.version !== remote.version) return false;
100673
100674                         if (local.type === 'way') {
100675                             var children = utilArrayUnion(local.nodes, remote.nodes);
100676                             for (var i = 0; i < children.length; i++) {
100677                                 var a = localGraph.hasEntity(children[i]);
100678                                 var b = remoteGraph.hasEntity(children[i]);
100679                                 if (a && b && a.version !== b.version) return false;
100680                             }
100681                         }
100682
100683                         return true;
100684                     }
100685
100686                     _toCheck.forEach(function(id) {
100687                         var local = localGraph.entity(id);
100688                         var remote = remoteGraph.entity(id);
100689
100690                         if (sameVersions(local, remote)) return;
100691
100692                         var action = actionMergeRemoteChanges;
100693                         var merge = action(id, localGraph, remoteGraph, formatUser);
100694
100695                         history.replace(merge);
100696
100697                         var mergeConflicts = merge.conflicts();
100698                         if (!mergeConflicts.length) return;  // merged safely
100699
100700                         var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
100701                         var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
100702                         var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
100703                         var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
100704
100705                         _conflicts.push({
100706                             id: id,
100707                             name: entityName(local),
100708                             details: mergeConflicts,
100709                             chosen: 1,
100710                             choices: [
100711                                 choice(id, keepMine, forceLocal),
100712                                 choice(id, keepTheirs, forceRemote)
100713                             ]
100714                         });
100715                     });
100716
100717                     upload(changeset);
100718                 }
100719             }
100720
100721
100722             function upload(changeset) {
100723                 var osm = context.connection();
100724                 if (!osm) {
100725                     _errors.push({ msg: 'No OSM Service' });
100726                 }
100727
100728                 if (_conflicts.length) {
100729                     _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
100730                     showConflicts(changeset);
100731
100732                 } else if (_errors.length) {
100733                     showErrors();
100734
100735                 } else {
100736                     var history = context.history();
100737                     var changes = history.changes(actionDiscardTags(history.difference()));
100738                     if (changes.modified.length || changes.created.length || changes.deleted.length) {
100739                         loadLocation();  // so it is ready when we display the save screen
100740                         osm.putChangeset(changeset, changes, uploadCallback);
100741                     } else {        // changes were insignificant or reverted by user
100742                         d3_select('.inspector-wrap *').remove();
100743                         loading.close();
100744                         _isSaving = false;
100745                         context.flush();
100746                         cancel();
100747                     }
100748                 }
100749             }
100750
100751
100752             function uploadCallback(err, changeset) {
100753                 if (err) {
100754                     if (err.status === 409) {          // 409 Conflict
100755                         save(changeset, true, true);   // tryAgain = true, checkConflicts = true
100756                     } else {
100757                         _errors.push({
100758                             msg: err.message || err.responseText,
100759                             details: [ t('save.status_code', { code: err.status }) ]
100760                         });
100761                         showErrors();
100762                     }
100763
100764                 } else {
100765                     context.history().clearSaved();
100766                     success(changeset);
100767                     // Add delay to allow for postgres replication #1646 #2678
100768                     window.setTimeout(function() {
100769                         d3_select('.inspector-wrap *').remove();
100770                         loading.close();
100771                         _isSaving = false;
100772                         context.flush();
100773                     }, 2500);
100774                 }
100775             }
100776
100777
100778             function showProgress(num, total) {
100779                 var modal = context.container().select('.loading-modal .modal-section');
100780                 var progress = modal.selectAll('.progress')
100781                     .data([0]);
100782
100783                 // enter/update
100784                 progress.enter()
100785                     .append('div')
100786                     .attr('class', 'progress')
100787                     .merge(progress)
100788                     .text(t('save.conflict_progress', { num: num, total: total }));
100789             }
100790
100791
100792             function showConflicts(changeset) {
100793                 var history = context.history();
100794                 var selection = context.container()
100795                     .select('#sidebar')
100796                     .append('div')
100797                     .attr('class','sidebar-component');
100798
100799                 loading.close();
100800                 _isSaving = false;
100801
100802                 var ui = uiConflicts(context)
100803                     .conflictList(_conflicts)
100804                     .origChanges(_origChanges)
100805                     .on('cancel', function() {
100806                         history.pop();
100807                         selection.remove();
100808                         keybindingOn();
100809                     })
100810                     .on('save', function() {
100811                         for (var i = 0; i < _conflicts.length; i++) {
100812                             if (_conflicts[i].chosen === 1) {  // user chose "keep theirs"
100813                                 var entity = context.hasEntity(_conflicts[i].id);
100814                                 if (entity && entity.type === 'way') {
100815                                     var children = utilArrayUniq(entity.nodes);
100816                                     for (var j = 0; j < children.length; j++) {
100817                                         history.replace(actionRevert(children[j]));
100818                                     }
100819                                 }
100820                                 history.replace(actionRevert(_conflicts[i].id));
100821                             }
100822                         }
100823
100824                         selection.remove();
100825                         save(changeset, true, false);  // tryAgain = true, checkConflicts = false
100826                     });
100827
100828                 selection.call(ui);
100829             }
100830
100831
100832             function showErrors() {
100833                 keybindingOn();
100834                 context.history().pop();
100835                 loading.close();
100836                 _isSaving = false;
100837
100838                 var selection = uiConfirm(context.container());
100839                 selection
100840                     .select('.modal-section.header')
100841                     .append('h3')
100842                     .text(t('save.error'));
100843
100844                 addErrors(selection, _errors);
100845                 selection.okButton();
100846             }
100847
100848
100849             function addErrors(selection, data) {
100850                 var message = selection
100851                     .select('.modal-section.message-text');
100852
100853                 var items = message
100854                     .selectAll('.error-container')
100855                     .data(data);
100856
100857                 var enter = items.enter()
100858                     .append('div')
100859                     .attr('class', 'error-container');
100860
100861                 enter
100862                     .append('a')
100863                     .attr('class', 'error-description')
100864                     .attr('href', '#')
100865                     .classed('hide-toggle', true)
100866                     .text(function(d) { return d.msg || t('save.unknown_error_details'); })
100867                     .on('click', function() {
100868                         event.preventDefault();
100869
100870                         var error = d3_select(this);
100871                         var detail = d3_select(this.nextElementSibling);
100872                         var exp = error.classed('expanded');
100873
100874                         detail.style('display', exp ? 'none' : 'block');
100875                         error.classed('expanded', !exp);
100876                     });
100877
100878                 var details = enter
100879                     .append('div')
100880                     .attr('class', 'error-detail-container')
100881                     .style('display', 'none');
100882
100883                 details
100884                     .append('ul')
100885                     .attr('class', 'error-detail-list')
100886                     .selectAll('li')
100887                     .data(function(d) { return d.details || []; })
100888                     .enter()
100889                     .append('li')
100890                     .attr('class', 'error-detail-item')
100891                     .text(function(d) { return d; });
100892
100893                 items.exit()
100894                     .remove();
100895             }
100896
100897
100898             function success(changeset) {
100899                 commit.reset();
100900
100901                 var ui = uiSuccess(context)
100902                     .changeset(changeset)
100903                     .location(_location)
100904                     .on('cancel', function() { context.ui().sidebar.hide(); });
100905
100906                 context.enter(modeBrowse(context).sidebar(ui));
100907             }
100908
100909
100910             function keybindingOn() {
100911                 d3_select(document)
100912                     .call(keybinding.on('⎋', cancel, true));
100913             }
100914
100915
100916             function keybindingOff() {
100917                 d3_select(document)
100918                     .call(keybinding.unbind);
100919             }
100920
100921
100922             // Reverse geocode current map location so we can display a message on
100923             // the success screen like "Thank you for editing around place, region."
100924             function loadLocation() {
100925                 _location = null;
100926                 if (!services$1.geocoder) return;
100927
100928                 services$1.geocoder.reverse(context.map().center(), function(err, result) {
100929                     if (err || !result || !result.address) return;
100930
100931                     var addr = result.address;
100932                     var place = (addr && (addr.town || addr.city || addr.county)) || '';
100933                     var region = (addr && (addr.state || addr.country)) || '';
100934                     var separator = (place && region) ? t('success.thank_you_where.separator') : '';
100935
100936                     _location = t('success.thank_you_where.format',
100937                         { place: place, separator: separator, region: region }
100938                     );
100939                 });
100940             }
100941
100942
100943             mode.enter = function() {
100944                 // Show sidebar
100945                 context.ui().sidebar.expand();
100946
100947                 function done() {
100948                     context.ui().sidebar.show(commit);
100949                 }
100950
100951                 keybindingOn();
100952
100953                 context.container().selectAll('#content')
100954                     .attr('class', 'inactive');
100955
100956                 var osm = context.connection();
100957                 if (!osm) {
100958                     cancel();
100959                     return;
100960                 }
100961
100962                 if (osm.authenticated()) {
100963                     done();
100964                 } else {
100965                     osm.authenticate(function(err) {
100966                         if (err) {
100967                             cancel();
100968                         } else {
100969                             done();
100970                         }
100971                     });
100972                 }
100973             };
100974
100975
100976             mode.exit = function() {
100977                 _isSaving = false;
100978
100979                 keybindingOff();
100980
100981                 context.container().selectAll('#content')
100982                     .attr('class', 'active');
100983
100984                 context.ui().sidebar.hide();
100985             };
100986
100987             return mode;
100988         }
100989
100990         function uiToolOldDrawModes(context) {
100991
100992             var tool = {
100993                 id: 'old_modes',
100994                 label: t('toolbar.add_feature')
100995             };
100996
100997             var modes = [
100998                 modeAddPoint(context, {
100999                     title: t('modes.add_point.title'),
101000                     button: 'point',
101001                     description: t('modes.add_point.description'),
101002                     preset: context.presets().item('point'),
101003                     key: '1'
101004                 }),
101005                 modeAddLine(context, {
101006                     title: t('modes.add_line.title'),
101007                     button: 'line',
101008                     description: t('modes.add_line.description'),
101009                     preset: context.presets().item('line'),
101010                     key: '2'
101011                 }),
101012                 modeAddArea(context, {
101013                     title: t('modes.add_area.title'),
101014                     button: 'area',
101015                     description: t('modes.add_area.description'),
101016                     preset: context.presets().item('area'),
101017                     key: '3'
101018                 })
101019             ];
101020
101021
101022             function enabled() {
101023                 return osmEditable();
101024             }
101025
101026             function osmEditable() {
101027                 var mode = context.mode();
101028                 return context.editable() && mode && mode.id !== 'save';
101029             }
101030
101031             modes.forEach(function(mode) {
101032                 context.keybinding().on(mode.key, function() {
101033                     if (!enabled()) return;
101034
101035                     if (mode.id === context.mode().id) {
101036                         context.enter(modeBrowse(context));
101037                     } else {
101038                         context.enter(mode);
101039                     }
101040                 });
101041             });
101042
101043             tool.render = function(selection) {
101044
101045                 var wrap = selection
101046                     .append('div')
101047                     .attr('class', 'joined')
101048                     .style('display', 'flex');
101049
101050                 context
101051                     .on('enter.editor', function(entered) {
101052                         selection.selectAll('button.add-button')
101053                             .classed('active', function(mode) { return entered.button === mode.button; });
101054                         context.container()
101055                             .classed('mode-' + entered.id, true);
101056                     });
101057
101058                 context
101059                     .on('exit.editor', function(exited) {
101060                         context.container()
101061                             .classed('mode-' + exited.id, false);
101062                     });
101063
101064
101065                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
101066
101067                 context.map()
101068                     .on('move.modes', debouncedUpdate)
101069                     .on('drawn.modes', debouncedUpdate);
101070
101071                 context
101072                     .on('enter.modes', update);
101073
101074                 update();
101075
101076
101077                 function update() {
101078
101079                     var buttons = wrap.selectAll('button.add-button')
101080                         .data(modes, function(d) { return d.id; });
101081
101082                     // exit
101083                     buttons.exit()
101084                         .remove();
101085
101086                     // enter
101087                     var buttonsEnter = buttons.enter()
101088                         .append('button')
101089                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
101090                         .on('click.mode-buttons', function(d) {
101091                             if (!enabled()) return;
101092
101093                             // When drawing, ignore accidental clicks on mode buttons - #4042
101094                             var currMode = context.mode().id;
101095                             if (/^draw/.test(currMode)) return;
101096
101097                             if (d.id === currMode) {
101098                                 context.enter(modeBrowse(context));
101099                             } else {
101100                                 context.enter(d);
101101                             }
101102                         })
101103                         .call(tooltip()
101104                             .placement('bottom')
101105                             .html(true)
101106                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
101107                         );
101108
101109                     buttonsEnter
101110                         .each(function(d) {
101111                             d3_select(this)
101112                                 .call(svgIcon('#iD-icon-' + d.button));
101113                         });
101114
101115                     buttonsEnter
101116                         .append('span')
101117                         .attr('class', 'label')
101118                         .text(function(mode) { return mode.title; });
101119
101120                     // if we are adding/removing the buttons, check if toolbar has overflowed
101121                     if (buttons.enter().size() || buttons.exit().size()) {
101122                         context.ui().checkOverflow('#bar', true);
101123                     }
101124
101125                     // update
101126                     buttons = buttons
101127                         .merge(buttonsEnter)
101128                         .classed('disabled', function(d) { return !enabled(); });
101129                 }
101130             };
101131
101132             return tool;
101133         }
101134
101135         function uiToolNotes(context) {
101136
101137             var tool = {
101138                 id: 'notes',
101139                 label: t('modes.add_note.label')
101140             };
101141
101142             var mode = modeAddNote(context);
101143
101144             function enabled() {
101145                 return notesEnabled() && notesEditable();
101146             }
101147
101148             function notesEnabled() {
101149                 var noteLayer = context.layers().layer('notes');
101150                 return noteLayer && noteLayer.enabled();
101151             }
101152
101153             function notesEditable() {
101154                 var mode = context.mode();
101155                 return context.map().notesEditable() && mode && mode.id !== 'save';
101156             }
101157
101158             context.keybinding().on(mode.key, function() {
101159                 if (!enabled()) return;
101160
101161                 if (mode.id === context.mode().id) {
101162                     context.enter(modeBrowse(context));
101163                 } else {
101164                     context.enter(mode);
101165                 }
101166             });
101167
101168             tool.render = function(selection) {
101169
101170                 context
101171                     .on('enter.editor.notes', function(entered) {
101172                         selection.selectAll('button.add-button')
101173                             .classed('active', function(mode) { return entered.button === mode.button; });
101174                         context.container()
101175                             .classed('mode-' + entered.id, true);
101176                     });
101177
101178                 context
101179                     .on('exit.editor.notes', function(exited) {
101180                         context.container()
101181                             .classed('mode-' + exited.id, false);
101182                     });
101183
101184
101185                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
101186
101187                 context.map()
101188                     .on('move.notes', debouncedUpdate)
101189                     .on('drawn.notes', debouncedUpdate);
101190
101191                 context
101192                     .on('enter.notes', update);
101193
101194                 update();
101195
101196
101197                 function update() {
101198                     var showNotes = notesEnabled();
101199                     var data = showNotes ? [mode] : [];
101200
101201                     var buttons = selection.selectAll('button.add-button')
101202                         .data(data, function(d) { return d.id; });
101203
101204                     // exit
101205                     buttons.exit()
101206                         .remove();
101207
101208                     // enter
101209                     var buttonsEnter = buttons.enter()
101210                         .append('button')
101211                         .attr('tabindex', -1)
101212                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
101213                         .on('click.notes', function(d) {
101214                             if (!enabled()) return;
101215
101216                             // When drawing, ignore accidental clicks on mode buttons - #4042
101217                             var currMode = context.mode().id;
101218                             if (/^draw/.test(currMode)) return;
101219
101220                             if (d.id === currMode) {
101221                                 context.enter(modeBrowse(context));
101222                             } else {
101223                                 context.enter(d);
101224                             }
101225                         })
101226                         .call(tooltip()
101227                             .placement('bottom')
101228                             .html(true)
101229                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
101230                         );
101231
101232                     buttonsEnter
101233                         .each(function(d) {
101234                             d3_select(this)
101235                                 .call(svgIcon(d.icon || '#iD-icon-' + d.button));
101236                         });
101237
101238                     // if we are adding/removing the buttons, check if toolbar has overflowed
101239                     if (buttons.enter().size() || buttons.exit().size()) {
101240                         context.ui().checkOverflow('#bar', true);
101241                     }
101242
101243                     // update
101244                     buttons = buttons
101245                         .merge(buttonsEnter)
101246                         .classed('disabled', function(d) { return !enabled(); });
101247                 }
101248             };
101249
101250             tool.uninstall = function() {
101251                 context
101252                     .on('enter.editor.notes', null)
101253                     .on('exit.editor.notes', null)
101254                     .on('enter.notes', null);
101255
101256                 context.map()
101257                     .on('move.notes', null)
101258                     .on('drawn.notes', null);
101259             };
101260
101261             return tool;
101262         }
101263
101264         function uiToolSave(context) {
101265
101266             var tool = {
101267                 id: 'save',
101268                 label: t('save.title')
101269             };
101270
101271             var button = null;
101272             var tooltipBehavior = null;
101273             var history = context.history();
101274             var key = uiCmd('⌘S');
101275             var _numChanges = 0;
101276
101277             function isSaving() {
101278                 var mode = context.mode();
101279                 return mode && mode.id === 'save';
101280             }
101281
101282             function isDisabled() {
101283                 return _numChanges === 0 || isSaving();
101284             }
101285
101286             function save() {
101287                 event.preventDefault();
101288                 if (!context.inIntro() && !isSaving() && history.hasChanges()) {
101289                     context.enter(modeSave(context));
101290                 }
101291             }
101292
101293             function bgColor() {
101294                 var step;
101295                 if (_numChanges === 0) {
101296                     return null;
101297                 } else if (_numChanges <= 50) {
101298                     step = _numChanges / 50;
101299                     return d3_interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
101300                 } else {
101301                     step = Math.min((_numChanges - 50) / 50, 1.0);
101302                     return d3_interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
101303                 }
101304             }
101305
101306
101307             function updateCount() {
101308                 var val = history.difference().summary().length;
101309                 if (val === _numChanges) return;
101310                 _numChanges = val;
101311
101312                 if (tooltipBehavior) {
101313                     tooltipBehavior
101314                         .title(uiTooltipHtml(
101315                             t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
101316                         );
101317                 }
101318
101319                 if (button) {
101320                     button
101321                         .classed('disabled', isDisabled())
101322                         .style('background', bgColor());
101323
101324                     button.select('span.count')
101325                         .text(_numChanges);
101326                 }
101327             }
101328
101329
101330             tool.render = function(selection) {
101331                 tooltipBehavior = tooltip()
101332                     .placement('bottom')
101333                     .html(true)
101334                     .title(uiTooltipHtml(t('save.no_changes'), key));
101335
101336                 button = selection
101337                     .append('button')
101338                     .attr('class', 'save disabled bar-button')
101339                     .on('click', save)
101340                     .call(tooltipBehavior);
101341
101342                 button
101343                     .call(svgIcon('#iD-icon-save'));
101344
101345                 button
101346                     .append('span')
101347                     .attr('class', 'count')
101348                     .attr('aria-hidden', 'true')
101349                     .text('0');
101350
101351                 updateCount();
101352
101353
101354                 context.keybinding()
101355                     .on(key, save, true);
101356
101357
101358                 context.history()
101359                     .on('change.save', updateCount);
101360
101361                 context
101362                     .on('enter.save', function() {
101363                         if (button) {
101364                             button
101365                                 .classed('disabled', isDisabled());
101366
101367                             if (isSaving()) {
101368                                 button.call(tooltipBehavior.hide);
101369                             }
101370                         }
101371                     });
101372             };
101373
101374
101375             tool.uninstall = function() {
101376                 context.keybinding()
101377                     .off(key, true);
101378
101379                 context.history()
101380                     .on('change.save', null);
101381
101382                 context
101383                     .on('enter.save', null);
101384
101385                 button = null;
101386                 tooltipBehavior = null;
101387             };
101388
101389             return tool;
101390         }
101391
101392         function uiToolSidebarToggle(context) {
101393
101394             var tool = {
101395                 id: 'sidebar_toggle',
101396                 label: t('toolbar.inspect')
101397             };
101398
101399             tool.render = function(selection) {
101400                 selection
101401                     .append('button')
101402                     .attr('class', 'bar-button')
101403                     .on('click', function() {
101404                         context.ui().sidebar.toggle();
101405                     })
101406                     .call(tooltip()
101407                         .placement('bottom')
101408                         .html(true)
101409                         .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
101410                     )
101411                     .call(svgIcon('#iD-icon-sidebar-' + (textDirection === 'rtl' ? 'right' : 'left')));
101412             };
101413
101414             return tool;
101415         }
101416
101417         function uiToolUndoRedo(context) {
101418
101419             var tool = {
101420                 id: 'undo_redo',
101421                 label: t('toolbar.undo_redo')
101422             };
101423
101424             var commands = [{
101425                 id: 'undo',
101426                 cmd: uiCmd('⌘Z'),
101427                 action: function() { if (editable()) context.undo(); },
101428                 annotation: function() { return context.history().undoAnnotation(); }
101429             }, {
101430                 id: 'redo',
101431                 cmd: uiCmd('⌘⇧Z'),
101432                 action: function() { if (editable()) context.redo(); },
101433                 annotation: function() { return context.history().redoAnnotation(); }
101434             }];
101435
101436
101437             function editable() {
101438                 var mode = context.mode();
101439                 return context.editable() && mode && mode.id !== 'save';
101440             }
101441
101442
101443             tool.render = function(selection) {
101444                 var tooltipBehavior = tooltip()
101445                     .placement('bottom')
101446                     .html(true)
101447                     .title(function (d) {
101448                         return uiTooltipHtml(d.annotation() ?
101449                             t(d.id + '.tooltip', {action: d.annotation()}) :
101450                             t(d.id + '.nothing'), d.cmd);
101451                     });
101452
101453                 var buttons = selection.selectAll('button')
101454                     .data(commands)
101455                     .enter()
101456                     .append('button')
101457                     .attr('class', function(d) { return 'disabled ' + d.id + '-button bar-button'; })
101458                     .on('click', function(d) { return d.action(); })
101459                     .call(tooltipBehavior);
101460
101461                 buttons.each(function(d) {
101462                     var iconName = d.id;
101463                     if (textDirection === 'rtl') {
101464                         if (iconName === 'undo') {
101465                             iconName = 'redo';
101466                         } else if (iconName === 'redo') {
101467                             iconName = 'undo';
101468                         }
101469                     }
101470                     d3_select(this)
101471                         .call(svgIcon('#iD-icon-' + iconName));
101472                 });
101473
101474                 context.keybinding()
101475                     .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
101476                     .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
101477
101478
101479                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
101480
101481                 context.map()
101482                     .on('move.undo_redo', debouncedUpdate)
101483                     .on('drawn.undo_redo', debouncedUpdate);
101484
101485                 context.history()
101486                     .on('change.undo_redo', function(difference) {
101487                         if (difference) update();
101488                     });
101489
101490                 context
101491                     .on('enter.undo_redo', update);
101492
101493
101494                 function update() {
101495                     buttons
101496                         .property('disabled', !editable())
101497                         .classed('disabled', function(d) {
101498                             return !editable() || !d.annotation();
101499                         })
101500                         .each(function() {
101501                             var selection = d3_select(this);
101502                             if (selection.property('tooltipVisible')) {
101503                                 selection.call(tooltipBehavior.show);
101504                             }
101505                         });
101506                 }
101507             };
101508
101509             tool.uninstall = function() {
101510                 context.keybinding()
101511                     .off(commands[0].cmd)
101512                     .off(commands[1].cmd);
101513
101514                 context.map()
101515                     .on('move.undo_redo', null)
101516                     .on('drawn.undo_redo', null);
101517
101518                 context.history()
101519                     .on('change.undo_redo', null);
101520
101521                 context
101522                     .on('enter.undo_redo', null);
101523             };
101524
101525             return tool;
101526         }
101527
101528         function uiTopToolbar(context) {
101529
101530             var sidebarToggle = uiToolSidebarToggle(context),
101531                 modes = uiToolOldDrawModes(context),
101532                 //searchAdd = uiToolSearchAdd(context),
101533                 //addFavorite = uiToolAddFavorite(context),
101534                 //addRecent = uiToolAddRecent(context),
101535                 notes = uiToolNotes(context),
101536                 undoRedo = uiToolUndoRedo(context),
101537                 save = uiToolSave(context);
101538
101539             function notesEnabled() {
101540                 var noteLayer = context.layers().layer('notes');
101541                 return noteLayer && noteLayer.enabled();
101542             }
101543
101544             function topToolbar(bar) {
101545
101546                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
101547                 context.layers()
101548                     .on('change.topToolbar', debouncedUpdate);
101549
101550                 context.presets()
101551                     .on('favoritePreset.topToolbar', update)
101552                     .on('recentsChange.topToolbar', update);
101553
101554                 update();
101555
101556                 function update() {
101557
101558                     var tools = [
101559                         sidebarToggle,
101560                         'spacer',
101561                         modes
101562                     //    searchAdd
101563                     ];
101564                     /*
101565                     if (context.presets().getFavorites().length > 0) {
101566                         tools.push(addFavorite);
101567                     }
101568
101569                     if (addRecent.shouldShow()) {
101570                         tools.push(addRecent);
101571                     }*/
101572
101573                     tools.push('spacer');
101574
101575                     if (notesEnabled()) {
101576                         tools = tools.concat([notes, 'spacer']);
101577                     }
101578
101579                     tools = tools.concat([undoRedo, save]);
101580
101581                     var toolbarItems = bar.selectAll('.toolbar-item')
101582                         .data(tools, function(d) {
101583                             return d.id || d;
101584                         });
101585
101586                     toolbarItems.exit()
101587                         .each(function(d) {
101588                             if (d.uninstall) {
101589                                 d.uninstall();
101590                             }
101591                         })
101592                         .remove();
101593
101594                     var itemsEnter = toolbarItems
101595                         .enter()
101596                         .append('div')
101597                         .attr('class', function(d) {
101598                             var classes = 'toolbar-item ' + (d.id || d).replace('_', '-');
101599                             if (d.klass) classes += ' ' + d.klass;
101600                             return classes;
101601                         });
101602
101603                     var actionableItems = itemsEnter.filter(function(d) { return d !== 'spacer'; });
101604
101605                     actionableItems
101606                         .append('div')
101607                         .attr('class', 'item-content')
101608                         .each(function(d) {
101609                             d3_select(this).call(d.render, bar);
101610                         });
101611
101612                     actionableItems
101613                         .append('div')
101614                         .attr('class', 'item-label')
101615                         .text(function(d) {
101616                             return d.label;
101617                         });
101618                 }
101619
101620             }
101621
101622             return topToolbar;
101623         }
101624
101625         // these are module variables so they are preserved through a ui.restart()
101626         var sawVersion = null;
101627         var isNewVersion = false;
101628         var isNewUser = false;
101629
101630
101631         function uiVersion(context) {
101632
101633             var currVersion = context.version;
101634             var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
101635
101636             if (sawVersion === null && matchedVersion !== null) {
101637                 isNewVersion = (context.storage('sawVersion') !== currVersion);
101638                 isNewUser = !context.storage('sawSplash');
101639                 context.storage('sawVersion', currVersion);
101640                 sawVersion = currVersion;
101641             }
101642
101643             return function(selection) {
101644                 selection
101645                     .append('a')
101646                     .attr('target', '_blank')
101647                     .attr('href', 'https://github.com/openstreetmap/iD')
101648                     .text(currVersion);
101649
101650                 // only show new version indicator to users that have used iD before
101651                 if (isNewVersion && !isNewUser) {
101652                     selection
101653                         .append('div')
101654                         .attr('class', 'badge')
101655                         .append('a')
101656                         .attr('target', '_blank')
101657                         .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new')
101658                         .call(svgIcon('#maki-gift-11'))
101659                         .call(tooltip()
101660                             .title(t('version.whats_new', { version: currVersion }))
101661                             .placement('top')
101662                         );
101663                 }
101664             };
101665         }
101666
101667         function uiZoom(context) {
101668             var zooms = [{
101669                 id: 'zoom-in',
101670                 icon: 'plus',
101671                 title: t('zoom.in'),
101672                 action: context.zoomIn,
101673                 key: '+'
101674             }, {
101675                 id: 'zoom-out',
101676                 icon: 'minus',
101677                 title: t('zoom.out'),
101678                 action: context.zoomOut,
101679                 key: '-'
101680             }];
101681
101682
101683             function zoomIn() {
101684                 event.preventDefault();
101685                 context.zoomIn();
101686             }
101687
101688
101689             function zoomOut() {
101690                 event.preventDefault();
101691                 context.zoomOut();
101692             }
101693
101694
101695             function zoomInFurther() {
101696                 event.preventDefault();
101697                 context.zoomInFurther();
101698             }
101699
101700
101701             function zoomOutFurther() {
101702                 event.preventDefault();
101703                 context.zoomOutFurther();
101704             }
101705
101706
101707             return function(selection) {
101708                 var button = selection.selectAll('button')
101709                     .data(zooms)
101710                     .enter()
101711                     .append('button')
101712                     .attr('class', function(d) { return d.id; })
101713                     .on('click.editor', function(d) { d.action(); })
101714                     .call(tooltip()
101715                         .placement((textDirection === 'rtl') ? 'right' : 'left')
101716                         .html(true)
101717                         .title(function(d) {
101718                             return uiTooltipHtml(d.title, d.key);
101719                         })
101720                     );
101721
101722                 button.each(function(d) {
101723                     d3_select(this)
101724                         .call(svgIcon('#iD-icon-' + d.icon, 'light'));
101725                 });
101726
101727                 ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
101728                     context.keybinding().on([key], zoomIn);
101729                     context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
101730                 });
101731
101732                 ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
101733                     context.keybinding().on([key], zoomOut);
101734                     context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
101735                 });
101736             };
101737         }
101738
101739         function uiInit(context) {
101740             var _initCounter = 0;
101741             var _initCallback;
101742             var _needWidth = {};
101743
101744
101745             function render(container) {
101746                 container
101747                     .attr('dir', textDirection);
101748
101749                 // setup fullscreen keybindings (no button shown at this time)
101750                 container
101751                     .call(uiFullScreen(context));
101752
101753                 var map = context.map();
101754                 map.redrawEnable(false);  // don't draw until we've set zoom/lat/long
101755
101756                 container
101757                     .append('svg')
101758                     .attr('id', 'defs')
101759                     .call(svgDefs(context));
101760
101761                 container
101762                     .append('div')
101763                     .attr('id', 'sidebar')
101764                     .call(ui.sidebar);
101765
101766                 var content = container
101767                     .append('div')
101768                     .attr('id', 'content')
101769                     .attr('class', 'active');
101770
101771                 // Top toolbar
101772                 content
101773                     .append('div')
101774                     .attr('id', 'bar')
101775                     .attr('class', 'fillD')
101776                     .call(uiTopToolbar(context));
101777
101778                 content
101779                     .append('div')
101780                     .attr('id', 'map')
101781                     .attr('dir', 'ltr')
101782                     .call(map);
101783
101784
101785                 // Map controls
101786                 var controls = content
101787                     .append('div')
101788                     .attr('class', 'map-controls');
101789
101790                 controls
101791                     .append('div')
101792                     .attr('class', 'map-control zoombuttons')
101793                     .call(uiZoom(context));
101794
101795                 controls
101796                     .append('div')
101797                     .attr('class', 'map-control geolocate-control')
101798                     .call(uiGeolocate(context));
101799
101800                 var background = uiBackground(context);
101801                 controls
101802                     .append('div')
101803                     .attr('class', 'map-control background-control')
101804                     .call(background.renderToggleButton);
101805
101806                 var mapData = uiMapData(context);
101807                 controls
101808                     .append('div')
101809                     .attr('class', 'map-control map-data-control')
101810                     .call(mapData.renderToggleButton);
101811
101812                 var issues = uiIssues(context);
101813                 controls
101814                     .append('div')
101815                     .attr('class', 'map-control map-issues-control')
101816                     .call(issues.renderToggleButton);
101817
101818                 var help = uiHelp(context);
101819                 controls
101820                     .append('div')
101821                     .attr('class', 'map-control help-control')
101822                     .call(help.renderToggleButton);
101823
101824                 content
101825                     .append('div')
101826                     .attr('class', 'spinner')
101827                     .call(uiSpinner(context));
101828
101829                 // Add attribution and footer
101830                 var about = content
101831                     .append('div')
101832                     .attr('id', 'about');
101833
101834                 about
101835                     .append('div')
101836                     .attr('id', 'attrib')
101837                     .attr('dir', 'ltr')
101838                     .call(uiAttribution(context));
101839
101840                 about
101841                     .append('div')
101842                     .attr('class', 'api-status')
101843                     .call(uiStatus(context));
101844
101845
101846                 var footer = about
101847                     .append('div')
101848                     .attr('id', 'footer')
101849                     .attr('class', 'fillD');
101850
101851                 footer
101852                     .append('div')
101853                     .attr('id', 'flash-wrap')
101854                     .attr('class', 'footer-hide');
101855
101856                 var footerWrap = footer
101857                     .append('div')
101858                     .attr('id', 'footer-wrap')
101859                     .attr('class', 'footer-show');
101860
101861                 footerWrap
101862                     .append('div')
101863                     .attr('id', 'scale-block')
101864                     .call(uiScale(context));
101865
101866                 var aboutList = footerWrap
101867                     .append('div')
101868                     .attr('id', 'info-block')
101869                     .append('ul')
101870                     .attr('id', 'about-list');
101871
101872                 if (!context.embed()) {
101873                     aboutList
101874                         .call(uiAccount(context));
101875                 }
101876
101877                 aboutList
101878                     .append('li')
101879                     .attr('class', 'version')
101880                     .call(uiVersion(context));
101881
101882                 var issueLinks = aboutList
101883                     .append('li');
101884
101885                 issueLinks
101886                     .append('a')
101887                     .attr('target', '_blank')
101888                     .attr('href', 'https://github.com/openstreetmap/iD/issues')
101889                     .call(svgIcon('#iD-icon-bug', 'light'))
101890                     .call(tooltip().title(t('report_a_bug')).placement('top'));
101891
101892                 issueLinks
101893                     .append('a')
101894                     .attr('target', '_blank')
101895                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating')
101896                     .call(svgIcon('#iD-icon-translate', 'light'))
101897                     .call(tooltip().title(t('help_translate')).placement('top'));
101898
101899                 aboutList
101900                     .append('li')
101901                     .attr('class', 'feature-warning')
101902                     .attr('tabindex', -1)
101903                     .call(uiFeatureInfo(context));
101904
101905                 aboutList
101906                     .append('li')
101907                     .attr('class', 'user-list')
101908                     .attr('tabindex', -1)
101909                     .call(uiContributors(context));
101910
101911
101912                 // Setup map dimensions and move map to initial center/zoom.
101913                 // This should happen after #content and toolbars exist.
101914                 ui.onResize();
101915                 map.redrawEnable(true);
101916
101917                 ui.hash = behaviorHash(context);
101918                 ui.hash();
101919                 if (!ui.hash.hadHash) {
101920                     map.centerZoom([0, 0], 2);
101921                 }
101922
101923
101924                 var overMap = content
101925                     .append('div')
101926                     .attr('class', 'over-map');
101927
101928                 // Add panes
101929                 // This should happen after map is initialized, as some require surface()
101930                 var panes = overMap
101931                     .append('div')
101932                     .attr('class', 'map-panes');
101933
101934                 panes
101935                     .call(background.renderPane)
101936                     .call(mapData.renderPane)
101937                     .call(issues.renderPane)
101938                     .call(help.renderPane);
101939
101940                 // Add absolutely-positioned elements that sit on top of the map
101941                 // This should happen after the map is ready (center/zoom)
101942                 overMap
101943                     .call(uiMapInMap(context))
101944                     .call(uiInfo(context))
101945                     .call(uiNotice(context));
101946
101947
101948                 overMap
101949                     .append('div')
101950                     .attr('id', 'photoviewer')
101951                     .classed('al', true)       // 'al'=left,  'ar'=right
101952                     .classed('hide', true)
101953                     .call(ui.photoviewer);
101954
101955
101956                 // Bind events
101957                 window.onbeforeunload = function() {
101958                     return context.save();
101959                 };
101960                 window.onunload = function() {
101961                     context.history().unlock();
101962                 };
101963
101964                 d3_select(window)
101965                     .on('gesturestart.editor', eventCancel)
101966                     .on('gesturechange.editor', eventCancel)
101967                     .on('gestureend.editor', eventCancel)
101968                     .on('resize.editor', ui.onResize);
101969
101970
101971                 var panPixels = 80;
101972                 context.keybinding()
101973                     .on('⌫', function() { event.preventDefault(); })
101974                     .on([t('sidebar.key'), '`', '²'], ui.sidebar.toggle)   // #5663 - common QWERTY, AZERTY
101975                     .on('←', pan([panPixels, 0]))
101976                     .on('↑', pan([0, panPixels]))
101977                     .on('→', pan([-panPixels, 0]))
101978                     .on('↓', pan([0, -panPixels]))
101979                     .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
101980                     .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
101981                     .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
101982                     .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
101983
101984                 context.enter(modeBrowse(context));
101985
101986                 if (!_initCounter++) {
101987                     if (!ui.hash.startWalkthrough) {
101988                         context.container()
101989                             .call(uiSplash(context))
101990                             .call(uiRestore(context));
101991                     }
101992
101993                     context.container()
101994                         .call(uiShortcuts(context));
101995                 }
101996
101997                 var osm = context.connection();
101998                 var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
101999
102000                 if (osm && auth) {
102001                     osm
102002                         .on('authLoading.ui', function() {
102003                             context.container()
102004                                 .call(auth);
102005                         })
102006                         .on('authDone.ui', function() {
102007                             auth.close();
102008                         });
102009                 }
102010
102011                 _initCounter++;
102012
102013                 if (ui.hash.startWalkthrough) {
102014                     ui.hash.startWalkthrough = false;
102015                     context.container().call(uiIntro(context));
102016                 }
102017
102018
102019                 function pan(d) {
102020                     return function() {
102021                         if (d3_select('.combobox').size()) return;
102022                         event.preventDefault();
102023                         context.pan(d, 100);
102024                     };
102025                 }
102026
102027                 function eventCancel() {
102028                     event.preventDefault();
102029                 }
102030             }
102031
102032
102033             function ui(node, callback) {
102034                 _initCallback = callback;
102035                 var container = d3_select(node);
102036                 context.container(container);
102037                 context.loadLocale(function(err) {
102038                     if (!err) {
102039                         render(container);
102040                     }
102041                     if (callback) {
102042                         callback(err);
102043                     }
102044                 });
102045             }
102046
102047
102048             ui.restart = function(arg) {
102049                 context.keybinding().clear();
102050                 context.locale(arg);
102051                 context.loadLocale(function(err) {
102052                     if (!err) {
102053                         context.container().selectAll('*').remove();
102054                         render(context.container());
102055                         if (_initCallback) _initCallback();
102056                     }
102057                 });
102058             };
102059
102060
102061             ui.sidebar = uiSidebar(context);
102062
102063             ui.photoviewer = uiPhotoviewer(context);
102064
102065             ui.onResize = function(withPan) {
102066                 var map = context.map();
102067
102068                 // Recalc dimensions of map and sidebar.. (`true` = force recalc)
102069                 // This will call `getBoundingClientRect` and trigger reflow,
102070                 //  but the values will be cached for later use.
102071                 var mapDimensions = utilGetDimensions(d3_select('#content'), true);
102072                 utilGetDimensions(d3_select('#sidebar'), true);
102073
102074                 if (withPan !== undefined) {
102075                     map.redrawEnable(false);
102076                     map.pan(withPan);
102077                     map.redrawEnable(true);
102078                 }
102079                 map.dimensions(mapDimensions);
102080
102081                 ui.photoviewer.onMapResize();
102082
102083                 // check if header or footer have overflowed
102084                 ui.checkOverflow('#bar');
102085                 ui.checkOverflow('#footer');
102086
102087                 // Use outdated code so it works on Explorer
102088                 var resizeWindowEvent = document.createEvent('Event');
102089
102090                 resizeWindowEvent.initEvent('resizeWindow', true, true);
102091
102092                 document.dispatchEvent(resizeWindowEvent);
102093             };
102094
102095
102096             // Call checkOverflow when resizing or whenever the contents change.
102097             ui.checkOverflow = function(selector, reset) {
102098                 if (reset) {
102099                     delete _needWidth[selector];
102100                 }
102101
102102                 var element = d3_select(selector);
102103                 var scrollWidth = element.property('scrollWidth');
102104                 var clientWidth = element.property('clientWidth');
102105                 var needed = _needWidth[selector] || scrollWidth;
102106
102107                 if (scrollWidth > clientWidth) {    // overflow happening
102108                     element.classed('narrow', true);
102109                     if (!_needWidth[selector]) {
102110                         _needWidth[selector] = scrollWidth;
102111                     }
102112
102113                 } else if (scrollWidth >= needed) {
102114                     element.classed('narrow', false);
102115                 }
102116             };
102117
102118             ui.togglePanes = function(showPane) {
102119                 var shownPanes = d3_selectAll('.map-pane.shown');
102120
102121                 var side = textDirection === 'ltr' ? 'right' : 'left';
102122
102123                 shownPanes
102124                     .classed('shown', false);
102125
102126                 d3_selectAll('.map-control button')
102127                     .classed('active', false);
102128
102129                 if (showPane) {
102130                     shownPanes
102131                         .style('display', 'none')
102132                         .style(side, '-500px');
102133
102134                     d3_selectAll('.' + showPane.attr('pane') + '-control button')
102135                         .classed('active', true);
102136
102137                     showPane
102138                         .classed('shown', true)
102139                         .style('display', 'block');
102140                     if (shownPanes.empty()) {
102141                         showPane
102142                             .style('display', 'block')
102143                             .style(side, '-500px')
102144                             .transition()
102145                             .duration(200)
102146                             .style(side, '0px');
102147                     } else {
102148                         showPane
102149                             .style(side, '0px');
102150                     }
102151                 } else {
102152                     shownPanes
102153                         .style('display', 'block')
102154                         .style(side, '0px')
102155                         .transition()
102156                         .duration(200)
102157                         .style(side, '-500px')
102158                         .on('end', function() {
102159                             d3_select(this).style('display', 'none');
102160                         });
102161                 }
102162             };
102163
102164             return ui;
102165         }
102166
102167         function coreContext() {
102168             var dispatch$1 = dispatch('enter', 'exit', 'change');
102169             var context = utilRebind({}, dispatch$1, 'on');
102170             var _deferred = new Set();
102171
102172             context.version = '2.15.5';
102173
102174             // create a special translation that contains the keys in place of the strings
102175             var tkeys = JSON.parse(JSON.stringify(en));  // clone deep
102176             var parents = [];
102177
102178             function traverser(v, k, obj) {
102179                 parents.push(k);
102180                 if (typeof v === 'object') {
102181                     forOwn(v, traverser);
102182                 } else if (typeof v === 'string') {
102183                     obj[k] = parents.join('.');
102184                 }
102185                 parents.pop();
102186             }
102187
102188             function forOwn(obj, fn) {
102189                 Object.keys(obj).forEach(function(k) { fn(obj[k], k, obj); });
102190             }
102191
102192             forOwn(tkeys, traverser);
102193             addTranslation('_tkeys_', tkeys);
102194
102195             addTranslation('en', en);
102196             setLocale('en');
102197
102198
102199             // https://github.com/openstreetmap/iD/issues/772
102200             // http://mathiasbynens.be/notes/localstorage-pattern#comment-9
102201             var storage;
102202             try { storage = localStorage; } catch (e) {}  // eslint-disable-line no-empty
102203             storage = storage || (function() {
102204                 var s = {};
102205                 return {
102206                     getItem: function(k) { return s[k]; },
102207                     setItem: function(k, v) { s[k] = v; },
102208                     removeItem: function(k) { delete s[k]; }
102209                 };
102210             })();
102211
102212             context.storage = function(k, v) {
102213                 try {
102214                     if (arguments.length === 1) return storage.getItem(k);
102215                     else if (v === null) storage.removeItem(k);
102216                     else storage.setItem(k, v);
102217                 } catch (e) {
102218                     // localstorage quota exceeded
102219                     /* eslint-disable no-console */
102220                     if (typeof console !== 'undefined') console.error('localStorage quota exceeded');
102221                     /* eslint-enable no-console */
102222                 }
102223             };
102224
102225
102226             /* User interface and keybinding */
102227             var ui;
102228             context.ui = function() { return ui; };
102229
102230             var keybinding = utilKeybinding('context');
102231             context.keybinding = function() { return keybinding; };
102232             d3_select(document).call(keybinding);
102233
102234
102235             /* Straight accessors. Avoid using these if you can. */
102236             var connection, history, validator;
102237             context.connection = function() { return connection; };
102238             context.history = function() { return history; };
102239             context.validator = function() { return validator; };
102240
102241             /* Connection */
102242             context.preauth = function(options) {
102243                 if (connection) {
102244                     connection.switch(options);
102245                 }
102246                 return context;
102247             };
102248
102249
102250             function afterLoad(cid, callback) {
102251                 return function(err, result) {
102252                     if (err) {
102253                         // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
102254                         if (err.status === 400 || err.status === 401 || err.status === 403) {
102255                             if (connection) {
102256                                 connection.logout();
102257                             }
102258                         }
102259                         if (typeof callback === 'function') {
102260                             callback(err);
102261                         }
102262                         return;
102263
102264                     } else if (connection && connection.getConnectionId() !== cid) {
102265                         if (typeof callback === 'function') {
102266                             callback({ message: 'Connection Switched', status: -1 });
102267                         }
102268                         return;
102269
102270                     } else {
102271                         history.merge(result.data, result.extent);
102272                         if (typeof callback === 'function') {
102273                             callback(err, result);
102274                         }
102275                         return;
102276                     }
102277                 };
102278             }
102279
102280
102281             context.loadTiles = function(projection, callback) {
102282                 var handle = window.requestIdleCallback(function() {
102283                     _deferred.delete(handle);
102284                     if (connection && context.editable()) {
102285                         var cid = connection.getConnectionId();
102286                         connection.loadTiles(projection, afterLoad(cid, callback));
102287                     }
102288                 });
102289                 _deferred.add(handle);
102290             };
102291
102292             context.loadTileAtLoc = function(loc, callback) {
102293                 var handle = window.requestIdleCallback(function() {
102294                     _deferred.delete(handle);
102295                     if (connection && context.editable()) {
102296                         var cid = connection.getConnectionId();
102297                         connection.loadTileAtLoc(loc, afterLoad(cid, callback));
102298                     }
102299                 });
102300                 _deferred.add(handle);
102301             };
102302
102303             context.loadEntity = function(entityID, callback) {
102304                 if (connection) {
102305                     var cid = connection.getConnectionId();
102306                     connection.loadEntity(entityID, afterLoad(cid, callback));
102307                 }
102308             };
102309
102310             context.zoomToEntity = function(entityID, zoomTo) {
102311                 if (zoomTo !== false) {
102312                     this.loadEntity(entityID, function(err, result) {
102313                         if (err) return;
102314                         var entity = result.data.find(function(e) { return e.id === entityID; });
102315                         if (entity) {
102316                             map.zoomTo(entity);
102317                         }
102318                     });
102319                 }
102320
102321                 map.on('drawn.zoomToEntity', function() {
102322                     if (!context.hasEntity(entityID)) return;
102323                     map.on('drawn.zoomToEntity', null);
102324                     context.on('enter.zoomToEntity', null);
102325                     context.enter(modeSelect(context, [entityID]));
102326                 });
102327
102328                 context.on('enter.zoomToEntity', function() {
102329                     if (mode.id !== 'browse') {
102330                         map.on('drawn.zoomToEntity', null);
102331                         context.on('enter.zoomToEntity', null);
102332                     }
102333                 });
102334             };
102335
102336             var minEditableZoom = 16;
102337             context.minEditableZoom = function(val) {
102338                 if (!arguments.length) return minEditableZoom;
102339                 minEditableZoom = val;
102340                 if (connection) {
102341                     connection.tileZoom(val);
102342                 }
102343                 return context;
102344             };
102345
102346
102347             /* History */
102348             var inIntro = false;
102349             context.inIntro = function(val) {
102350                 if (!arguments.length) return inIntro;
102351                 inIntro = val;
102352                 return context;
102353             };
102354
102355             context.save = function() {
102356                 // no history save, no message onbeforeunload
102357                 if (inIntro || d3_select('.modal').size()) return;
102358
102359                 var canSave;
102360                 if (mode && mode.id === 'save') {
102361                     canSave = false;
102362
102363                     // Attempt to prevent user from creating duplicate changes - see #5200
102364                     if (services$1.osm && services$1.osm.isChangesetInflight()) {
102365                         history.clearSaved();
102366                         return;
102367                     }
102368
102369                 } else {
102370                     canSave = context.selectedIDs().every(function(id) {
102371                         var entity = context.hasEntity(id);
102372                         return entity && !entity.isDegenerate();
102373                     });
102374                 }
102375
102376                 if (canSave) {
102377                     history.save();
102378                 }
102379                 if (history.hasChanges()) {
102380                     return t('save.unsaved_changes');
102381                 }
102382             };
102383
102384
102385             /* Graph */
102386             context.hasEntity = function(id) {
102387                 return history.graph().hasEntity(id);
102388             };
102389             context.entity = function(id) {
102390                 return history.graph().entity(id);
102391             };
102392             context.childNodes = function(way) {
102393                 return history.graph().childNodes(way);
102394             };
102395             context.geometry = function(id) {
102396                 return context.entity(id).geometry(history.graph());
102397             };
102398
102399
102400             /* Modes */
102401             var mode;
102402             context.mode = function() {
102403                 return mode;
102404             };
102405             context.enter = function(newMode) {
102406                 if (mode) {
102407                     mode.exit();
102408                     dispatch$1.call('exit', this, mode);
102409                 }
102410
102411                 mode = newMode;
102412                 mode.enter();
102413                 dispatch$1.call('enter', this, mode);
102414             };
102415
102416             context.selectedIDs = function() {
102417                 if (mode && mode.selectedIDs) {
102418                     return mode.selectedIDs();
102419                 } else {
102420                     return [];
102421                 }
102422             };
102423
102424             context.activeID = function() {
102425                 return mode && mode.activeID && mode.activeID();
102426             };
102427
102428             var _selectedNoteID;
102429             context.selectedNoteID = function(noteID) {
102430                 if (!arguments.length) return _selectedNoteID;
102431                 _selectedNoteID = noteID;
102432                 return context;
102433             };
102434
102435             var _selectedErrorID;
102436             context.selectedErrorID = function(errorID) {
102437                 if (!arguments.length) return _selectedErrorID;
102438                 _selectedErrorID = errorID;
102439                 return context;
102440             };
102441
102442
102443             /* Behaviors */
102444             context.install = function(behavior) {
102445                 context.surface().call(behavior);
102446             };
102447             context.uninstall = function(behavior) {
102448                 context.surface().call(behavior.off);
102449             };
102450
102451
102452             /* Copy/Paste */
102453             var copyIDs = [], copyGraph;
102454             context.copyGraph = function() { return copyGraph; };
102455             context.copyIDs = function(val) {
102456                 if (!arguments.length) return copyIDs;
102457                 copyIDs = val;
102458                 copyGraph = history.graph();
102459                 return context;
102460             };
102461
102462
102463             /* Background */
102464             var background;
102465             context.background = function() { return background; };
102466
102467
102468             /* Features */
102469             var features;
102470             context.features = function() { return features; };
102471             context.hasHiddenConnections = function(id) {
102472                 var graph = history.graph();
102473                 var entity = graph.entity(id);
102474                 return features.hasHiddenConnections(entity, graph);
102475             };
102476
102477
102478             /* Photos */
102479             var photos;
102480             context.photos = function() { return photos; };
102481
102482
102483             /* Presets */
102484             var presets;
102485             context.presets = function() { return presets; };
102486
102487
102488             /* Map */
102489             var map;
102490             context.map = function() { return map; };
102491             context.layers = function() { return map.layers; };
102492             context.surface = function() { return map.surface; };
102493             context.editable = function() { return map.editable(); };
102494             context.surfaceRect = function() {
102495                 return map.surface.node().getBoundingClientRect();
102496             };
102497
102498
102499             /* Debug */
102500             var debugFlags = {
102501                 tile: false,        // tile boundaries
102502                 collision: false,   // label collision bounding boxes
102503                 imagery: false,     // imagery bounding polygons
102504                 community: false,   // community bounding polygons
102505                 imperial: false,    // imperial (not metric) bounding polygons
102506                 driveLeft: false,   // driveLeft bounding polygons
102507                 target: false,      // touch targets
102508                 downloaded: false   // downloaded data from osm
102509             };
102510             context.debugFlags = function() {
102511                 return debugFlags;
102512             };
102513             context.setDebug = function(flag, val) {
102514                 if (arguments.length === 1) val = true;
102515                 debugFlags[flag] = val;
102516                 dispatch$1.call('change');
102517                 return context;
102518             };
102519             context.getDebug = function(flag) {
102520                 return flag && debugFlags[flag];
102521             };
102522
102523
102524             /* Container */
102525             var container = d3_select(document.body);
102526             context.container = function(val) {
102527                 if (!arguments.length) return container;
102528                 container = val;
102529                 container.classed('id-container', true);
102530                 return context;
102531             };
102532             var embed;
102533             context.embed = function(val) {
102534                 if (!arguments.length) return embed;
102535                 embed = val;
102536                 return context;
102537             };
102538
102539
102540             /* Assets */
102541             var assetPath = '';
102542             context.assetPath = function(val) {
102543                 if (!arguments.length) return assetPath;
102544                 assetPath = val;
102545                 return context;
102546             };
102547
102548             var assetMap = {};
102549             context.assetMap = function(val) {
102550                 if (!arguments.length) return assetMap;
102551                 assetMap = val;
102552                 return context;
102553             };
102554
102555             context.asset = function(val) {
102556                 var filename = assetPath + val;
102557                 return assetMap[filename] || filename;
102558             };
102559
102560             context.imagePath = function(val) {
102561                 return context.asset('img/' + val);
102562             };
102563
102564
102565             /* locales */
102566             // `locale` variable contains a "requested locale".
102567             // It won't become the `currentLocale` until after loadLocale() is called.
102568             var locale, localePath;
102569
102570             context.locale = function(loc, path) {
102571                 if (!arguments.length) return currentLocale;
102572                 locale = loc;
102573                 localePath = path;
102574                 return context;
102575             };
102576
102577             context.loadLocale = function(callback) {
102578                 if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) {
102579                     localePath = localePath || context.asset('locales/' + locale + '.json');
102580                     d3_json(localePath)
102581                         .then(function(result) {
102582                             addTranslation(locale, result[locale]);
102583                             setLocale(locale);
102584                             utilDetect(true);
102585                             if (callback) callback();
102586                         })
102587                         .catch(function(err) {
102588                             if (callback) callback(err.message);
102589                         });
102590                 } else {
102591                     if (locale) {
102592                         setLocale(locale);
102593                         utilDetect(true);
102594                     }
102595                     if (callback) {
102596                         callback();
102597                     }
102598                 }
102599             };
102600
102601
102602             /* reset (aka flush) */
102603             context.reset = context.flush = function() {
102604                 context.debouncedSave.cancel();
102605
102606                 Array.from(_deferred).forEach(function(handle) {
102607                     window.cancelIdleCallback(handle);
102608                     _deferred.delete(handle);
102609                 });
102610
102611                 Object.values(services$1).forEach(function(service) {
102612                     if (service && typeof service.reset === 'function') {
102613                         service.reset(context);
102614                     }
102615                 });
102616
102617                 validator.reset();
102618                 features.reset();
102619                 history.reset();
102620
102621                 return context;
102622             };
102623
102624
102625             /* Init */
102626
102627             context.projection = geoRawMercator();
102628             context.curtainProjection = geoRawMercator();
102629
102630             locale = utilDetect().locale;
102631             if (locale && !dataLocales.hasOwnProperty(locale)) {
102632                 locale = locale.split('-')[0];
102633             }
102634
102635             history = coreHistory(context);
102636             validator = coreValidator(context);
102637
102638             context.graph = history.graph;
102639             context.changes = history.changes;
102640             context.intersects = history.intersects;
102641             context.pauseChangeDispatch = history.pauseChangeDispatch;
102642             context.resumeChangeDispatch = history.resumeChangeDispatch;
102643
102644             // Debounce save, since it's a synchronous localStorage write,
102645             // and history changes can happen frequently (e.g. when dragging).
102646             context.debouncedSave = debounce(context.save, 350);
102647             function withDebouncedSave(fn) {
102648                 return function() {
102649                     var result = fn.apply(history, arguments);
102650                     context.debouncedSave();
102651                     return result;
102652                 };
102653             }
102654
102655             context.perform = withDebouncedSave(history.perform);
102656             context.replace = withDebouncedSave(history.replace);
102657             context.pop = withDebouncedSave(history.pop);
102658             context.overwrite = withDebouncedSave(history.overwrite);
102659             context.undo = withDebouncedSave(history.undo);
102660             context.redo = withDebouncedSave(history.redo);
102661
102662             ui = uiInit(context);
102663
102664             connection = services$1.osm;
102665             background = rendererBackground(context);
102666             features = rendererFeatures(context);
102667             photos = rendererPhotos(context);
102668             presets = presetIndex(context);
102669
102670             if (services$1.maprules && utilStringQs(window.location.hash).maprules) {
102671                 var maprules = utilStringQs(window.location.hash).maprules;
102672                 d3_json(maprules)
102673                     .then(function(mapcss) {
102674                         services$1.maprules.init();
102675                         mapcss.forEach(function(mapcssSelector) {
102676                             return services$1.maprules.addRule(mapcssSelector);
102677                         });
102678                     })
102679                     .catch(function() {
102680                         /* ignore */
102681                     });
102682             }
102683
102684             map = rendererMap(context);
102685             context.mouse = map.mouse;
102686             context.extent = map.extent;
102687             context.pan = map.pan;
102688             context.zoomIn = map.zoomIn;
102689             context.zoomOut = map.zoomOut;
102690             context.zoomInFurther = map.zoomInFurther;
102691             context.zoomOutFurther = map.zoomOutFurther;
102692             context.redrawEnable = map.redrawEnable;
102693
102694             Object.values(services$1).forEach(function(service) {
102695                 if (service && typeof service.init === 'function') {
102696                     service.init(context);
102697                 }
102698             });
102699
102700             validator.init();
102701             background.init();
102702             features.init();
102703             photos.init();
102704
102705             var presetsParameter = utilStringQs(window.location.hash).presets;
102706             if (presetsParameter && presetsParameter.indexOf('://') !== -1) {
102707                 // assume URL of external presets file
102708
102709                 presets.fromExternal(external, function(externalPresets) {
102710                     context.presets = function() { return externalPresets; }; // default + external presets...
102711                     osmSetAreaKeys(presets.areaKeys());
102712                     osmSetPointTags(presets.pointTags());
102713                     osmSetVertexTags(presets.vertexTags());
102714                 });
102715             } else {
102716                 var addablePresetIDs;
102717                 if (presetsParameter) {
102718                     // assume list of allowed preset IDs
102719                     addablePresetIDs = presetsParameter.split(',');
102720                 }
102721                 presets.init(addablePresetIDs);
102722                 osmSetAreaKeys(presets.areaKeys());
102723                 osmSetPointTags(presets.pointTags());
102724                 osmSetVertexTags(presets.vertexTags());
102725             }
102726
102727             return context;
102728         }
102729
102730         function uiSourceSwitch(context) {
102731             var keys;
102732
102733
102734             function click() {
102735                 event.preventDefault();
102736
102737                 var osm = context.connection();
102738                 if (!osm) return;
102739
102740                 if (context.inIntro()) return;
102741
102742                 if (context.history().hasChanges() &&
102743                     !window.confirm(t('source_switch.lose_changes'))) return;
102744
102745                 var isLive = d3_select(this)
102746                     .classed('live');
102747
102748                 isLive = !isLive;
102749                 context.enter(modeBrowse(context));
102750                 context.history().clearSaved();          // remove saved history
102751                 context.flush();                         // remove stored data
102752
102753                 d3_select(this)
102754                     .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
102755                     .classed('live', isLive);
102756
102757                 osm.switch(isLive ? keys[0] : keys[1]);  // switch connection (warning: dispatches 'change' event)
102758             }
102759
102760             var sourceSwitch = function(selection) {
102761                 selection
102762                     .append('a')
102763                     .attr('href', '#')
102764                     .text(t('source_switch.live'))
102765                     .classed('live', true)
102766                     .on('click', click);
102767             };
102768
102769
102770             sourceSwitch.keys = function(_) {
102771                 if (!arguments.length) return keys;
102772                 keys = _;
102773                 return sourceSwitch;
102774             };
102775
102776
102777             return sourceSwitch;
102778         }
102779
102780         var Connection = services$1.osm;
102781
102782         var debug = false;
102783
102784         var iD = /*#__PURE__*/Object.freeze({
102785                 Connection: Connection,
102786                 debug: debug,
102787                 d3: index$3,
102788                 Context: coreContext,
102789                 setAreaKeys: osmSetAreaKeys,
102790                 get areaKeys () { return osmAreaKeys; },
102791                 Difference: coreDifference,
102792                 Graph: coreGraph,
102793                 History: coreHistory,
102794                 Tree: coreTree,
102795                 geoCross: geoVecCross,
102796                 geoInterp: geoVecInterp,
102797                 geoRoundCoordinates: geoVecFloor,
102798                 geoEuclideanDistance: geoVecLength,
102799                 Entity: osmEntity,
102800                 Node: osmNode,
102801                 Relation: osmRelation,
102802                 Way: osmWay,
102803                 BackgroundSource: rendererBackgroundSource,
102804                 Background: rendererBackground,
102805                 Features: rendererFeatures,
102806                 Map: rendererMap,
102807                 TileLayer: rendererTileLayer,
102808                 Detect: utilDetect,
102809                 uiPreset: uiPresetEditor,
102810                 rendererBackgroundSource: rendererBackgroundSource,
102811                 rendererBackground: rendererBackground,
102812                 rendererFeatures: rendererFeatures,
102813                 rendererMap: rendererMap,
102814                 rendererPhotos: rendererPhotos,
102815                 rendererTileLayer: rendererTileLayer,
102816                 actionAddEntity: actionAddEntity,
102817                 actionAddMember: actionAddMember,
102818                 actionAddMidpoint: actionAddMidpoint,
102819                 actionAddVertex: actionAddVertex,
102820                 actionChangeMember: actionChangeMember,
102821                 actionChangePreset: actionChangePreset,
102822                 actionChangeTags: actionChangeTags,
102823                 actionCircularize: actionCircularize,
102824                 actionConnect: actionConnect,
102825                 actionCopyEntities: actionCopyEntities,
102826                 actionDeleteMember: actionDeleteMember,
102827                 actionDeleteMultiple: actionDeleteMultiple,
102828                 actionDeleteNode: actionDeleteNode,
102829                 actionDeleteRelation: actionDeleteRelation,
102830                 actionDeleteWay: actionDeleteWay,
102831                 actionDiscardTags: actionDiscardTags,
102832                 actionDisconnect: actionDisconnect,
102833                 actionExtract: actionExtract,
102834                 actionJoin: actionJoin,
102835                 actionMerge: actionMerge,
102836                 actionMergeNodes: actionMergeNodes,
102837                 actionMergePolygon: actionMergePolygon,
102838                 actionMergeRemoteChanges: actionMergeRemoteChanges,
102839                 actionMove: actionMove,
102840                 actionMoveMember: actionMoveMember,
102841                 actionMoveNode: actionMoveNode,
102842                 actionNoop: actionNoop,
102843                 actionOrthogonalize: actionOrthogonalize,
102844                 actionRestrictTurn: actionRestrictTurn,
102845                 actionReverse: actionReverse,
102846                 actionRevert: actionRevert,
102847                 actionRotate: actionRotate,
102848                 actionSplit: actionSplit,
102849                 actionStraightenNodes: actionStraightenNodes,
102850                 actionStraightenWay: actionStraightenWay,
102851                 actionUnrestrictTurn: actionUnrestrictTurn,
102852                 actionReflect: actionReflect,
102853                 actionUpgradeTags: actionUpgradeTags,
102854                 coreContext: coreContext,
102855                 coreDifference: coreDifference,
102856                 coreGraph: coreGraph,
102857                 coreHistory: coreHistory,
102858                 coreTree: coreTree,
102859                 coreValidator: coreValidator,
102860                 data: data,
102861                 dataWikipedia: wikipedia$2,
102862                 dataAddressFormats: dataAddressFormats,
102863                 dataDeprecated: dataDeprecated,
102864                 dataDiscarded: dataDiscarded,
102865                 dataLanguages: dataLanguages,
102866                 dataLocales: dataLocales,
102867                 dataPhoneFormats: dataPhoneFormats,
102868                 dataShortcuts: dataShortcuts,
102869                 dataTerritoryLanguages: dataTerritoryLanguages,
102870                 dataImperial: dataImperial,
102871                 dataMPH: dataMPH,
102872                 dataDriveLeft: dataDriveLeft,
102873                 dataEn: en,
102874                 geoExtent: geoExtent,
102875                 geoLatToMeters: geoLatToMeters,
102876                 geoLonToMeters: geoLonToMeters,
102877                 geoMetersToLat: geoMetersToLat,
102878                 geoMetersToLon: geoMetersToLon,
102879                 geoMetersToOffset: geoMetersToOffset,
102880                 geoOffsetToMeters: geoOffsetToMeters,
102881                 geoScaleToZoom: geoScaleToZoom,
102882                 geoSphericalClosestNode: geoSphericalClosestNode,
102883                 geoSphericalDistance: geoSphericalDistance,
102884                 geoZoomToScale: geoZoomToScale,
102885                 geoAngle: geoAngle,
102886                 geoChooseEdge: geoChooseEdge,
102887                 geoEdgeEqual: geoEdgeEqual,
102888                 geoGetSmallestSurroundingRectangle: geoGetSmallestSurroundingRectangle,
102889                 geoHasLineIntersections: geoHasLineIntersections,
102890                 geoHasSelfIntersections: geoHasSelfIntersections,
102891                 geoRotate: geoRotate,
102892                 geoLineIntersection: geoLineIntersection,
102893                 geoPathHasIntersections: geoPathHasIntersections,
102894                 geoPathIntersections: geoPathIntersections,
102895                 geoPathLength: geoPathLength,
102896                 geoPointInPolygon: geoPointInPolygon,
102897                 geoPolygonContainsPolygon: geoPolygonContainsPolygon,
102898                 geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon,
102899                 geoViewportEdge: geoViewportEdge,
102900                 geoRawMercator: geoRawMercator,
102901                 geoVecAdd: geoVecAdd,
102902                 geoVecAngle: geoVecAngle,
102903                 geoVecCross: geoVecCross,
102904                 geoVecDot: geoVecDot,
102905                 geoVecEqual: geoVecEqual,
102906                 geoVecFloor: geoVecFloor,
102907                 geoVecInterp: geoVecInterp,
102908                 geoVecLength: geoVecLength,
102909                 geoVecNormalize: geoVecNormalize,
102910                 geoVecNormalizedDot: geoVecNormalizedDot,
102911                 geoVecProject: geoVecProject,
102912                 geoVecSubtract: geoVecSubtract,
102913                 geoVecScale: geoVecScale,
102914                 geoOrthoNormalizedDotProduct: geoOrthoNormalizedDotProduct,
102915                 geoOrthoCalcScore: geoOrthoCalcScore,
102916                 geoOrthoMaxOffsetAngle: geoOrthoMaxOffsetAngle,
102917                 geoOrthoCanOrthogonalize: geoOrthoCanOrthogonalize,
102918                 modeAddArea: modeAddArea,
102919                 modeAddLine: modeAddLine,
102920                 modeAddPoint: modeAddPoint,
102921                 modeAddNote: modeAddNote,
102922                 modeBrowse: modeBrowse,
102923                 modeDragNode: modeDragNode,
102924                 modeDragNote: modeDragNote,
102925                 modeDrawArea: modeDrawArea,
102926                 modeDrawLine: modeDrawLine,
102927                 modeMove: modeMove,
102928                 modeRotate: modeRotate,
102929                 modeSave: modeSave,
102930                 modeSelect: modeSelect,
102931                 modeSelectData: modeSelectData,
102932                 modeSelectError: modeSelectError,
102933                 modeSelectNote: modeSelectNote,
102934                 operationCircularize: operationCircularize,
102935                 operationContinue: operationContinue,
102936                 operationDelete: operationDelete,
102937                 operationDisconnect: operationDisconnect,
102938                 operationDowngrade: operationDowngrade,
102939                 operationExtract: operationExtract,
102940                 operationMerge: operationMerge,
102941                 operationMove: operationMove,
102942                 operationOrthogonalize: operationOrthogonalize,
102943                 operationReflectShort: operationReflectShort,
102944                 operationReflectLong: operationReflectLong,
102945                 operationReverse: operationReverse,
102946                 operationRotate: operationRotate,
102947                 operationSplit: operationSplit,
102948                 operationStraighten: operationStraighten,
102949                 osmChangeset: osmChangeset,
102950                 osmEntity: osmEntity,
102951                 osmNode: osmNode,
102952                 osmNote: osmNote,
102953                 osmRelation: osmRelation,
102954                 osmWay: osmWay,
102955                 qaError: qaError,
102956                 osmIntersection: osmIntersection,
102957                 osmTurn: osmTurn,
102958                 osmInferRestriction: osmInferRestriction,
102959                 osmLanes: osmLanes,
102960                 osmOldMultipolygonOuterMemberOfRelation: osmOldMultipolygonOuterMemberOfRelation,
102961                 osmIsOldMultipolygonOuterMember: osmIsOldMultipolygonOuterMember,
102962                 osmOldMultipolygonOuterMember: osmOldMultipolygonOuterMember,
102963                 osmJoinWays: osmJoinWays,
102964                 get osmAreaKeys () { return osmAreaKeys; },
102965                 osmSetAreaKeys: osmSetAreaKeys,
102966                 get osmPointTags () { return osmPointTags; },
102967                 osmSetPointTags: osmSetPointTags,
102968                 get osmVertexTags () { return osmVertexTags; },
102969                 osmSetVertexTags: osmSetVertexTags,
102970                 osmNodeGeometriesForTags: osmNodeGeometriesForTags,
102971                 osmOneWayTags: osmOneWayTags,
102972                 osmPavedTags: osmPavedTags,
102973                 osmIsInterestingTag: osmIsInterestingTag,
102974                 osmRoutableHighwayTagValues: osmRoutableHighwayTagValues,
102975                 osmFlowingWaterwayTagValues: osmFlowingWaterwayTagValues,
102976                 osmRailwayTrackTagValues: osmRailwayTrackTagValues,
102977                 presetCategory: presetCategory,
102978                 presetCollection: presetCollection,
102979                 presetField: presetField,
102980                 presetPreset: presetPreset,
102981                 presetIndex: presetIndex,
102982                 behaviorAddWay: behaviorAddWay,
102983                 behaviorBreathe: behaviorBreathe,
102984                 behaviorCopy: behaviorCopy,
102985                 behaviorDrag: behaviorDrag,
102986                 behaviorDrawWay: behaviorDrawWay,
102987                 behaviorDraw: behaviorDraw,
102988                 behaviorEdit: behaviorEdit,
102989                 behaviorHash: behaviorHash,
102990                 behaviorHover: behaviorHover,
102991                 behaviorLasso: behaviorLasso,
102992                 behaviorOperation: behaviorOperation,
102993                 behaviorPaste: behaviorPaste,
102994                 behaviorSelect: behaviorSelect,
102995                 behaviorTail: behaviorTail,
102996                 services: services$1,
102997                 serviceKeepRight: serviceKeepRight,
102998                 serviceImproveOSM: serviceImproveOSM,
102999                 serviceMapillary: serviceMapillary,
103000                 serviceMapRules: serviceMapRules,
103001                 serviceNominatim: serviceNominatim,
103002                 serviceOpenstreetcam: serviceOpenstreetcam,
103003                 serviceOsm: serviceOsm,
103004                 serviceOsmWikibase: serviceOsmWikibase,
103005                 serviceStreetside: serviceStreetside,
103006                 serviceTaginfo: serviceTaginfo,
103007                 serviceVectorTile: serviceVectorTile,
103008                 serviceWikidata: serviceWikidata,
103009                 serviceWikipedia: serviceWikipedia,
103010                 svgAreas: svgAreas,
103011                 svgData: svgData,
103012                 svgDebug: svgDebug,
103013                 svgDefs: svgDefs,
103014                 svgKeepRight: svgKeepRight,
103015                 svgIcon: svgIcon,
103016                 svgGeolocate: svgGeolocate,
103017                 svgLabels: svgLabels,
103018                 svgLayers: svgLayers,
103019                 svgLines: svgLines,
103020                 svgMapillaryImages: svgMapillaryImages,
103021                 svgMapillarySigns: svgMapillarySigns,
103022                 svgMidpoints: svgMidpoints,
103023                 svgNotes: svgNotes,
103024                 svgMarkerSegments: svgMarkerSegments,
103025                 svgOpenstreetcamImages: svgOpenstreetcamImages,
103026                 svgOsm: svgOsm,
103027                 svgPassiveVertex: svgPassiveVertex,
103028                 svgPath: svgPath,
103029                 svgPointTransform: svgPointTransform,
103030                 svgPoints: svgPoints,
103031                 svgRelationMemberTags: svgRelationMemberTags,
103032                 svgSegmentWay: svgSegmentWay,
103033                 svgStreetside: svgStreetside,
103034                 svgTagClasses: svgTagClasses,
103035                 svgTouch: svgTouch,
103036                 svgTurns: svgTurns,
103037                 svgVertices: svgVertices,
103038                 uiFields: uiFields,
103039                 uiFieldLocalized: uiFieldLocalized,
103040                 uiFieldDefaultCheck: uiFieldCheck,
103041                 uiFieldOnewayCheck: uiFieldCheck,
103042                 uiFieldCheck: uiFieldCheck,
103043                 uiFieldUrl: uiFieldText,
103044                 uiFieldNumber: uiFieldText,
103045                 uiFieldTel: uiFieldText,
103046                 uiFieldEmail: uiFieldText,
103047                 uiFieldText: uiFieldText,
103048                 uiFieldAccess: uiFieldAccess,
103049                 uiFieldAddress: uiFieldAddress,
103050                 uiFieldCycleway: uiFieldCycleway,
103051                 uiFieldLanes: uiFieldLanes,
103052                 uiFieldMultiCombo: uiFieldCombo,
103053                 uiFieldNetworkCombo: uiFieldCombo,
103054                 uiFieldSemiCombo: uiFieldCombo,
103055                 uiFieldTypeCombo: uiFieldCombo,
103056                 uiFieldCombo: uiFieldCombo,
103057                 uiFieldMaxspeed: uiFieldMaxspeed,
103058                 uiFieldStructureRadio: uiFieldRadio,
103059                 uiFieldRadio: uiFieldRadio,
103060                 uiFieldRestrictions: uiFieldRestrictions,
103061                 uiFieldTextarea: uiFieldTextarea,
103062                 uiFieldWikidata: uiFieldWikidata,
103063                 uiFieldWikipedia: uiFieldWikipedia,
103064                 uiIntro: uiIntro,
103065                 uiInfoPanels: uiInfoPanels,
103066                 uiPanelBackground: uiPanelBackground,
103067                 uiPanelHistory: uiPanelHistory,
103068                 uiPanelLocation: uiPanelLocation,
103069                 uiPanelMeasurement: uiPanelMeasurement,
103070                 uiSettingsCustomBackground: uiSettingsCustomBackground,
103071                 uiSettingsCustomData: uiSettingsCustomData,
103072                 uiInit: uiInit,
103073                 uiAccount: uiAccount,
103074                 uiAttribution: uiAttribution,
103075                 uiBackground: uiBackground,
103076                 uiBackgroundDisplayOptions: uiBackgroundDisplayOptions,
103077                 uiBackgroundOffset: uiBackgroundOffset,
103078                 uiChangesetEditor: uiChangesetEditor,
103079                 uiCmd: uiCmd,
103080                 uiCombobox: uiCombobox,
103081                 uiCommit: uiCommit,
103082                 uiCommitChanges: uiCommitChanges,
103083                 uiCommitWarnings: uiCommitWarnings,
103084                 uiConfirm: uiConfirm,
103085                 uiConflicts: uiConflicts,
103086                 uiContributors: uiContributors,
103087                 uiCurtain: uiCurtain,
103088                 uiDataEditor: uiDataEditor,
103089                 uiDataHeader: uiDataHeader,
103090                 uiDisclosure: uiDisclosure,
103091                 uiEditMenu: uiEditMenu,
103092                 uiEntityEditor: uiEntityEditor,
103093                 uiFeatureInfo: uiFeatureInfo,
103094                 uiFeatureList: uiFeatureList,
103095                 uiField: uiField,
103096                 uiFieldHelp: uiFieldHelp,
103097                 uiFlash: uiFlash,
103098                 uiFormFields: uiFormFields,
103099                 uiFullScreen: uiFullScreen,
103100                 uiGeolocate: uiGeolocate,
103101                 uiHelp: uiHelp,
103102                 uiImproveOsmComments: uiImproveOsmComments,
103103                 uiImproveOsmDetails: uiImproveOsmDetails,
103104                 uiImproveOsmEditor: uiImproveOsmEditor,
103105                 uiImproveOsmHeader: uiImproveOsmHeader,
103106                 uiInfo: uiInfo,
103107                 uiInspector: uiInspector,
103108                 uiKeepRightDetails: uiKeepRightDetails,
103109                 uiKeepRightEditor: uiKeepRightEditor,
103110                 uiKeepRightHeader: uiKeepRightHeader,
103111                 uiLasso: uiLasso,
103112                 uiLoading: uiLoading,
103113                 uiMapData: uiMapData,
103114                 uiMapInMap: uiMapInMap,
103115                 uiModal: uiModal,
103116                 uiNotice: uiNotice,
103117                 uiNoteComments: uiNoteComments,
103118                 uiNoteEditor: uiNoteEditor,
103119                 uiNoteHeader: uiNoteHeader,
103120                 uiNoteReport: uiNoteReport,
103121                 uiPresetEditor: uiPresetEditor,
103122                 uiPresetIcon: uiPresetIcon,
103123                 uiPresetList: uiPresetList,
103124                 uiQuickLinks: uiQuickLinks,
103125                 uiRadialMenu: uiRadialMenu,
103126                 uiRawMemberEditor: uiRawMemberEditor,
103127                 uiRawMembershipEditor: uiRawMembershipEditor,
103128                 uiRawTagEditor: uiRawTagEditor,
103129                 uiRestore: uiRestore,
103130                 uiScale: uiScale,
103131                 uiSelectionList: uiSelectionList,
103132                 uiSidebar: uiSidebar,
103133                 uiSourceSwitch: uiSourceSwitch,
103134                 uiSpinner: uiSpinner,
103135                 uiSplash: uiSplash,
103136                 uiStatus: uiStatus,
103137                 uiSuccess: uiSuccess,
103138                 uiTagReference: uiTagReference,
103139                 uiToggle: uiToggle,
103140                 uiTooltipHtml: uiTooltipHtml,
103141                 uiVersion: uiVersion,
103142                 uiViewOnOSM: uiViewOnOSM,
103143                 uiViewOnKeepRight: uiViewOnKeepRight,
103144                 uiZoom: uiZoom,
103145                 utilArrayChunk: utilArrayChunk,
103146                 utilArrayDifference: utilArrayDifference,
103147                 utilArrayFlatten: utilArrayFlatten,
103148                 utilArrayGroupBy: utilArrayGroupBy,
103149                 utilArrayIntersection: utilArrayIntersection,
103150                 utilArrayUnion: utilArrayUnion,
103151                 utilArrayUniq: utilArrayUniq,
103152                 utilArrayUniqBy: utilArrayUniqBy,
103153                 utilAsyncMap: utilAsyncMap,
103154                 utilCleanTags: utilCleanTags,
103155                 utilDetect: utilDetect,
103156                 utilDisplayName: utilDisplayName,
103157                 utilDisplayNameForPath: utilDisplayNameForPath,
103158                 utilDisplayType: utilDisplayType,
103159                 utilDisplayLabel: utilDisplayLabel,
103160                 utilEntityRoot: utilEntityRoot,
103161                 utilEditDistance: utilEditDistance,
103162                 utilEntitySelector: utilEntitySelector,
103163                 utilEntityOrMemberSelector: utilEntityOrMemberSelector,
103164                 utilEntityOrDeepMemberSelector: utilEntityOrDeepMemberSelector,
103165                 utilFastMouse: utilFastMouse,
103166                 utilFunctor: utilFunctor,
103167                 utilGetAllNodes: utilGetAllNodes,
103168                 utilGetSetValue: utilGetSetValue,
103169                 utilHashcode: utilHashcode,
103170                 utilHighlightEntities: utilHighlightEntities,
103171                 utilKeybinding: utilKeybinding,
103172                 utilNoAuto: utilNoAuto,
103173                 utilObjectOmit: utilObjectOmit,
103174                 utilPrefixCSSProperty: utilPrefixCSSProperty,
103175                 utilPrefixDOMProperty: utilPrefixDOMProperty,
103176                 utilPreset: utilPreset,
103177                 utilQsString: utilQsString,
103178                 utilRebind: utilRebind,
103179                 utilSetTransform: utilSetTransform,
103180                 utilSessionMutex: utilSessionMutex,
103181                 utilStringQs: utilStringQs,
103182                 utilTagDiff: utilTagDiff,
103183                 utilTagText: utilTagText,
103184                 utilTiler: utilTiler,
103185                 utilTriggerEvent: utilTriggerEvent,
103186                 utilWrap: utilWrap,
103187                 validationAlmostJunction: validationAlmostJunction,
103188                 validationCloseNodes: validationCloseNodes,
103189                 validationCrossingWays: validationCrossingWays,
103190                 validationDisconnectedWay: validationDisconnectedWay,
103191                 validationFixmeTag: validationFixmeTag,
103192                 validationGenericName: validationGenericName,
103193                 validationImpossibleOneway: validationImpossibleOneway,
103194                 validationIncompatibleSource: validationIncompatibleSource,
103195                 validationFormatting: validationFormatting,
103196                 validationMaprules: validationMaprules,
103197                 validationMissingRole: validationMissingRole,
103198                 validationMissingTag: validationMissingTag,
103199                 validationOutdatedTags: validationOutdatedTags,
103200                 validationPrivateData: validationPrivateData,
103201                 validationTagSuggestsArea: validationTagSuggestsArea,
103202                 validationUnsquareWay: validationUnsquareWay
103203         });
103204
103205         // polyfill requestIdleCallback
103206         window.requestIdleCallback = window.requestIdleCallback ||
103207             function(cb) {
103208                 var start = Date.now();
103209                 return window.requestAnimationFrame(function() {
103210                     cb({
103211                         didTimeout: false,
103212                         timeRemaining: function() {
103213                             return Math.max(0, 50 - (Date.now() - start));
103214                         }
103215                     });
103216                 });
103217             };
103218
103219         window.cancelIdleCallback = window.cancelIdleCallback ||
103220             function(id) {
103221                 window.cancelAnimationFrame(id);
103222             };
103223         window.iD = iD;
103224
103225 }());
103226 //# sourceMappingURL=iD.js.map